X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fnet%2Fpterodactylus%2Ffcp%2Fhighlevel%2FFcpClient.java;h=71b118e5f51faf2b49b15212603d554f4927101a;hb=9eeeeee78c2b7c3f6e8cda59779f1c9be036357e;hp=fdcdc39b32166ce921543614e2a94ba0c282dbf8;hpb=d8cf32504b5c889235dd55991ccdae2e34ba5cfb;p=jFCPlib.git diff --git a/src/net/pterodactylus/fcp/highlevel/FcpClient.java b/src/net/pterodactylus/fcp/highlevel/FcpClient.java index fdcdc39..71b118e 100644 --- a/src/net/pterodactylus/fcp/highlevel/FcpClient.java +++ b/src/net/pterodactylus/fcp/highlevel/FcpClient.java @@ -23,6 +23,7 @@ import java.io.IOException; import java.net.InetAddress; import java.net.URL; import java.net.UnknownHostException; +import java.util.Collections; import java.util.HashSet; import java.util.Set; import java.util.concurrent.CountDownLatch; @@ -30,6 +31,7 @@ import java.util.concurrent.CountDownLatch; import net.pterodactylus.fcp.AddPeer; import net.pterodactylus.fcp.ClientHello; import net.pterodactylus.fcp.CloseConnectionDuplicateClientName; +import net.pterodactylus.fcp.EndListPeerNotes; import net.pterodactylus.fcp.EndListPeers; import net.pterodactylus.fcp.FcpAdapter; import net.pterodactylus.fcp.FcpConnection; @@ -145,7 +147,7 @@ public class FcpClient { * if an FCP error occurs */ public void connect() throws IOException, FcpException { - ExtendedFcpAdapter fcpListener = new ExtendedFcpAdapter() { + new ExtendedFcpAdapter() { /** * {@inheritDoc} @@ -165,8 +167,7 @@ public class FcpClient { public void receivedNodeHello(FcpConnection fcpConnection, NodeHello nodeHello) { completionLatch.countDown(); } - }; - fcpListener.execute(); + }.execute(); } /** @@ -197,8 +198,11 @@ public class FcpClient { * if an FCP error occurs */ public Set getPeers(final boolean withMetadata, final boolean withVolatile) throws IOException, FcpException { - final Set peers = new HashSet(); - ExtendedFcpAdapter fcpListener = new ExtendedFcpAdapter() { + final Set peers = Collections.synchronizedSet(new HashSet()); + new ExtendedFcpAdapter() { + + /** The ID of the “ListPeers” request. */ + private String identifier = "list-peers-" + System.currentTimeMillis(); /** * {@inheritDoc} @@ -206,7 +210,7 @@ public class FcpClient { @Override @SuppressWarnings("synthetic-access") public void run() throws IOException { - fcpConnection.sendMessage(new ListPeers("list-peers", withMetadata, withVolatile)); + fcpConnection.sendMessage(new ListPeers(identifier, withMetadata, withVolatile)); } /** @@ -214,7 +218,9 @@ public class FcpClient { */ @Override public void receivedPeer(FcpConnection fcpConnection, Peer peer) { - peers.add(peer); + if (peer.getIdentifier().equals(identifier)) { + peers.add(peer); + } } /** @@ -222,10 +228,11 @@ public class FcpClient { */ @Override public void receivedEndListPeers(FcpConnection fcpConnection, EndListPeers endListPeers) { - completionLatch.countDown(); + if (endListPeers.getIdentifier().equals(identifier)) { + completionLatch.countDown(); + } } - }; - fcpListener.execute(); + }.execute(); return peers; } @@ -301,7 +308,7 @@ public class FcpClient { * if an FCP error occurs */ private void addPeer(final AddPeer addPeer) throws IOException, FcpException { - ExtendedFcpAdapter fcpListener = new ExtendedFcpAdapter() { + new ExtendedFcpAdapter() { /** * {@inheritDoc} @@ -319,8 +326,7 @@ public class FcpClient { public void receivedPeer(FcpConnection fcpConnection, Peer peer) { completionLatch.countDown(); } - }; - fcpListener.execute(); + }.execute(); } /** @@ -345,7 +351,7 @@ public class FcpClient { * if an FCP error occurs */ public void modifyPeer(final Peer peer, final Boolean allowLocalAddresses, final Boolean disabled, final Boolean listenOnly) throws IOException, FcpException { - ExtendedFcpAdapter fcpListener = new ExtendedFcpAdapter() { + new ExtendedFcpAdapter() { /** * {@inheritDoc} @@ -363,8 +369,7 @@ public class FcpClient { public void receivedPeer(FcpConnection fcpConnection, Peer peer) { completionLatch.countDown(); } - }; - fcpListener.execute(); + }.execute(); } /** @@ -378,7 +383,7 @@ public class FcpClient { * if an FCP error occurs */ public void removePeer(final Peer peer) throws IOException, FcpException { - ExtendedFcpAdapter fcpListener = new ExtendedFcpAdapter() { + new ExtendedFcpAdapter() { /** * {@inheritDoc} @@ -396,8 +401,7 @@ public class FcpClient { public void receivedPeerRemoved(FcpConnection fcpConnection, PeerRemoved peerRemoved) { completionLatch.countDown(); } - }; - fcpListener.execute(); + }.execute(); } // @@ -433,7 +437,17 @@ public class FcpClient { */ @Override public void receivedPeerNote(FcpConnection fcpConnection, PeerNote peerNote) { - objectWrapper.set(peerNote); + if (peerNote.getNodeIdentifier().equals(peer.getIdentity())) { + objectWrapper.set(peerNote); + } + } + + /** + * {@inheritDoc} + */ + @Override + public void receivedEndListPeerNotes(FcpConnection fcpConnection, EndListPeerNotes endListPeerNotes) { + completionLatch.countDown(); } }.execute(); return objectWrapper.get();