X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fnet%2Fpterodactylus%2Ffcp%2Fhighlevel%2FFcpClient.java;h=90ad4da6470d38ecba6a0c6a65d26ab1cf047207;hb=c8465d7012830ae5867e228bd055fc7b93cafcd6;hp=3014aa9ccb8e674ccf4ca095e94957a02b7ac196;hpb=d841afb1cdfe393017c48adeaac14f5af8cb0194;p=jFCPlib.git diff --git a/src/net/pterodactylus/fcp/highlevel/FcpClient.java b/src/net/pterodactylus/fcp/highlevel/FcpClient.java index 3014aa9..90ad4da 100644 --- a/src/net/pterodactylus/fcp/highlevel/FcpClient.java +++ b/src/net/pterodactylus/fcp/highlevel/FcpClient.java @@ -30,18 +30,22 @@ 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; import net.pterodactylus.fcp.FcpListener; +import net.pterodactylus.fcp.ListPeerNotes; import net.pterodactylus.fcp.ListPeers; import net.pterodactylus.fcp.ModifyPeer; import net.pterodactylus.fcp.NodeHello; import net.pterodactylus.fcp.NodeRef; import net.pterodactylus.fcp.Peer; +import net.pterodactylus.fcp.PeerNote; import net.pterodactylus.fcp.PeerRemoved; import net.pterodactylus.fcp.ProtocolError; import net.pterodactylus.fcp.RemovePeer; +import net.pterodactylus.util.thread.ObjectWrapper; /** * High-level FCP client that hides the details of the underlying FCP @@ -142,7 +146,7 @@ public class FcpClient { * if an FCP error occurs */ public void connect() throws IOException, FcpException { - ExtendedFcpAdapter fcpListener = new ExtendedFcpAdapter() { + new ExtendedFcpAdapter() { /** * {@inheritDoc} @@ -162,8 +166,7 @@ public class FcpClient { public void receivedNodeHello(FcpConnection fcpConnection, NodeHello nodeHello) { completionLatch.countDown(); } - }; - fcpListener.execute(); + }.execute(); } /** @@ -195,7 +198,7 @@ public class FcpClient { */ public Set getPeers(final boolean withMetadata, final boolean withVolatile) throws IOException, FcpException { final Set peers = new HashSet(); - ExtendedFcpAdapter fcpListener = new ExtendedFcpAdapter() { + new ExtendedFcpAdapter() { /** * {@inheritDoc} @@ -221,8 +224,7 @@ public class FcpClient { public void receivedEndListPeers(FcpConnection fcpConnection, EndListPeers endListPeers) { completionLatch.countDown(); } - }; - fcpListener.execute(); + }.execute(); return peers; } @@ -298,7 +300,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} @@ -316,8 +318,7 @@ public class FcpClient { public void receivedPeer(FcpConnection fcpConnection, Peer peer) { completionLatch.countDown(); } - }; - fcpListener.execute(); + }.execute(); } /** @@ -342,7 +343,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} @@ -360,8 +361,7 @@ public class FcpClient { public void receivedPeer(FcpConnection fcpConnection, Peer peer) { completionLatch.countDown(); } - }; - fcpListener.execute(); + }.execute(); } /** @@ -375,7 +375,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} @@ -393,8 +393,56 @@ public class FcpClient { public void receivedPeerRemoved(FcpConnection fcpConnection, PeerRemoved peerRemoved) { completionLatch.countDown(); } - }; - fcpListener.execute(); + }.execute(); + } + + // + // PEER NOTES MANAGEMENT + // + + /** + * Returns the peer note of the given peer. + * + * @param peer + * The peer to get the note for + * @return The peer’s note + * @throws IOException + * if an I/O error occurs + * @throws FcpException + * if an FCP error occurs + */ + public PeerNote getPeerNote(final Peer peer) throws IOException, FcpException { + final ObjectWrapper objectWrapper = new ObjectWrapper(); + new ExtendedFcpAdapter() { + + /** + * {@inheritDoc} + */ + @Override + @SuppressWarnings("synthetic-access") + public void run() throws IOException { + fcpConnection.sendMessage(new ListPeerNotes(peer.getIdentity())); + } + + /** + * {@inheritDoc} + */ + @Override + public void receivedPeerNote(FcpConnection fcpConnection, PeerNote 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(); } /**