From 509df8c232188a1d1e64282fcbedc3d14e89016d Mon Sep 17 00:00:00 2001 From: Ross Nicoll Date: Sat, 13 Feb 2016 14:44:49 +0000 Subject: [PATCH] Refactor adding/removing block download listeners --- .../java/org/bitcoinj/core/PeerGroup.java | 44 ++++++++++++------- 1 file changed, 28 insertions(+), 16 deletions(-) diff --git a/core/src/main/java/org/bitcoinj/core/PeerGroup.java b/core/src/main/java/org/bitcoinj/core/PeerGroup.java index 7e607c2ab..51a86c226 100644 --- a/core/src/main/java/org/bitcoinj/core/PeerGroup.java +++ b/core/src/main/java/org/bitcoinj/core/PeerGroup.java @@ -1481,16 +1481,10 @@ public class PeerGroup implements TransactionBroadcaster { try { if (downloadPeer != null) { if (this.downloadListener != null) { - downloadPeer.removeBlocksDownloadedEventListener(this.downloadListener); - downloadPeer.removeChainDownloadStartedEventListener(this.downloadListener); - downloadPeer.removeGetDataEventListener(this.downloadListener); - downloadPeer.removePreMessageReceivedEventListener(this.downloadListener); + removeDataEventListenerFromPeer(downloadPeer, this.downloadListener); } if (listener != null) { - downloadPeer.addBlocksDownloadedEventListener(listener); - downloadPeer.addChainDownloadStartedEventListener(listener); - downloadPeer.addGetDataEventListener(listener); - downloadPeer.addPreMessageReceivedEventListener(listener); + addDataEventListenerToPeer(Threading.USER_THREAD, downloadPeer, listener); } } this.downloadListener = listener; @@ -1505,6 +1499,30 @@ public class PeerGroup implements TransactionBroadcaster { } } + /** + * Register a data event listener against a single peer (i.e. for blockchain + * download). Handling registration/deregistration on peer death/add is + * outside the scope of these methods. + */ + private static void addDataEventListenerToPeer(Executor executor, Peer peer, PeerDataEventListener downloadListener) { + peer.addBlocksDownloadedEventListener(executor, downloadListener); + peer.addChainDownloadStartedEventListener(executor, downloadListener); + peer.addGetDataEventListener(executor, downloadListener); + peer.addPreMessageReceivedEventListener(executor, downloadListener); + } + + /** + * Remove a registered data event listener against a single peer (i.e. for + * blockchain download). Handling registration/deregistration on peer death/add is + * outside the scope of these methods. + */ + private static void removeDataEventListenerFromPeer(Peer peer, PeerDataEventListener listener) { + peer.removeBlocksDownloadedEventListener(listener); + peer.removeChainDownloadStartedEventListener(listener); + peer.removeGetDataEventListener(listener); + peer.removePreMessageReceivedEventListener(listener); + } + /** * Download the blockchain from peers. Convenience that uses a {@link DownloadProgressTracker} for you.

* @@ -1620,10 +1638,7 @@ public class PeerGroup implements TransactionBroadcaster { if (downloadPeer != null) { log.info("Unsetting download peer: {}", downloadPeer); if (downloadListener != null) { - downloadPeer.removeBlocksDownloadedEventListener(downloadListener); - downloadPeer.removeChainDownloadStartedEventListener(downloadListener); - downloadPeer.removeGetDataEventListener(downloadListener); - downloadPeer.removePreMessageReceivedEventListener(downloadListener); + removeDataEventListenerFromPeer(downloadPeer, downloadListener); } downloadPeer.setDownloadData(false); } @@ -1631,10 +1646,7 @@ public class PeerGroup implements TransactionBroadcaster { if (downloadPeer != null) { log.info("Setting download peer: {}", downloadPeer); if (downloadListener != null) { - peer.addBlocksDownloadedEventListener(Threading.SAME_THREAD, downloadListener); - peer.addChainDownloadStartedEventListener(Threading.SAME_THREAD, downloadListener); - peer.addGetDataEventListener(Threading.SAME_THREAD, downloadListener); - peer.addPreMessageReceivedEventListener(Threading.SAME_THREAD, downloadListener); + addDataEventListenerToPeer(Threading.SAME_THREAD, peer, downloadListener); } downloadPeer.setDownloadData(true); if (chain != null)