PeerGroup: add/remove listeners from active/pending peers as well as the internal list.

This commit is contained in:
Mike Hearn
2014-11-05 18:42:14 +01:00
parent 0d5a542f22
commit 8b9d1903c5

View File

@@ -564,6 +564,10 @@ public class PeerGroup extends AbstractExecutionThreadService implements Transac
*/
public void addEventListener(PeerEventListener listener, Executor executor) {
peerEventListeners.add(new ListenerRegistration<PeerEventListener>(checkNotNull(listener), executor));
for (Peer peer : getConnectedPeers())
peer.addEventListener(listener, executor);
for (Peer peer: getPendingPeers())
peer.addEventListener(listener, executor);
}
/**
@@ -576,7 +580,12 @@ public class PeerGroup extends AbstractExecutionThreadService implements Transac
/** The given event listener will no longer be called with events. */
public boolean removeEventListener(PeerEventListener listener) {
return ListenerRegistration.removeFromList(listener, peerEventListeners);
boolean result = ListenerRegistration.removeFromList(listener, peerEventListeners);
for (Peer peer : getConnectedPeers())
peer.removeEventListener(listener);
for (Peer peer : getPendingPeers())
peer.removeEventListener(listener);
return result;
}
/**