X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fnet%2Fpterodactylus%2Ffcp%2Fhighlevel%2FFcpClient.java;h=d33105c8cda87e098c9d5a166ad1c9312c61859b;hb=2f53d9c624a991257f26a7d543a925cfbffd65d8;hp=90ad4da6470d38ecba6a0c6a65d26ab1cf047207;hpb=c8465d7012830ae5867e228bd055fc7b93cafcd6;p=jFCPlib.git diff --git a/src/net/pterodactylus/fcp/highlevel/FcpClient.java b/src/net/pterodactylus/fcp/highlevel/FcpClient.java index 90ad4da..d33105c 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; @@ -38,6 +39,7 @@ import net.pterodactylus.fcp.FcpListener; import net.pterodactylus.fcp.ListPeerNotes; import net.pterodactylus.fcp.ListPeers; import net.pterodactylus.fcp.ModifyPeer; +import net.pterodactylus.fcp.ModifyPeerNote; import net.pterodactylus.fcp.NodeHello; import net.pterodactylus.fcp.NodeRef; import net.pterodactylus.fcp.Peer; @@ -197,16 +199,19 @@ 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(); + final Set peers = Collections.synchronizedSet(new HashSet()); new ExtendedFcpAdapter() { + /** The ID of the “ListPeers” request. */ + private String identifier = "list-peers-" + System.currentTimeMillis(); + /** * {@inheritDoc} */ @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 +219,9 @@ public class FcpClient { */ @Override public void receivedPeer(FcpConnection fcpConnection, Peer peer) { - peers.add(peer); + if (peer.getIdentifier().equals(identifier)) { + peers.add(peer); + } } /** @@ -222,7 +229,9 @@ public class FcpClient { */ @Override public void receivedEndListPeers(FcpConnection fcpConnection, EndListPeers endListPeers) { - completionLatch.countDown(); + if (endListPeers.getIdentifier().equals(identifier)) { + completionLatch.countDown(); + } } }.execute(); return peers; @@ -446,6 +455,45 @@ public class FcpClient { } /** + * Replaces the peer note for the given peer. + * + * @param peer + * The peer + * @param noteText + * The new base64-encoded note text + * @param noteType + * The type of the note (currently only 1 is + * allowed) + * @throws IOException + * if an I/O error occurs + * @throws FcpException + * if an FCP error occurs + */ + public void modifyPeerNote(final Peer peer, final String noteText, final int noteType) throws IOException, FcpException { + new ExtendedFcpAdapter() { + + /** + * {@inheritDoc} + */ + @Override + @SuppressWarnings("synthetic-access") + public void run() throws IOException { + fcpConnection.sendMessage(new ModifyPeerNote(peer.getIdentity(), noteText, noteType)); + } + + /** + * {@inheritDoc} + */ + @Override + public void receivedPeer(FcpConnection fcpConnection, Peer receivedPeer) { + if (receivedPeer.getIdentity().equals(peer.getIdentity())) { + completionLatch.countDown(); + } + } + }.execute(); + } + + /** * Implementation of an {@link FcpListener} that can store an * {@link FcpException} and wait for the arrival of a certain command. *