X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fnet%2Fpterodactylus%2Ffcp%2Fhighlevel%2FFcpClient.java;h=fdcdc39b32166ce921543614e2a94ba0c282dbf8;hb=d8cf32504b5c889235dd55991ccdae2e34ba5cfb;hp=76944852f888eaad8d4902265d34a55756c6a045;hpb=989ae4b49892ef16a846164466636c7ca091fbbe;p=jFCPlib.git diff --git a/src/net/pterodactylus/fcp/highlevel/FcpClient.java b/src/net/pterodactylus/fcp/highlevel/FcpClient.java index 7694485..fdcdc39 100644 --- a/src/net/pterodactylus/fcp/highlevel/FcpClient.java +++ b/src/net/pterodactylus/fcp/highlevel/FcpClient.java @@ -34,12 +34,17 @@ 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 @@ -181,13 +186,17 @@ public class FcpClient { /** * Returns all peers that the node has. * + * @param withMetadata + * true to include peer metadata + * @param withVolatile + * true to include volatile peer data * @return A set containing the node’s peers * @throws IOException * if an I/O error occurs * @throws FcpException * if an FCP error occurs */ - public Set getPeers() throws IOException, FcpException { + public Set getPeers(final boolean withMetadata, final boolean withVolatile) throws IOException, FcpException { final Set peers = new HashSet(); ExtendedFcpAdapter fcpListener = new ExtendedFcpAdapter() { @@ -197,7 +206,7 @@ public class FcpClient { @Override @SuppressWarnings("synthetic-access") public void run() throws IOException { - fcpConnection.sendMessage(new ListPeers("list-peers")); + fcpConnection.sendMessage(new ListPeers("list-peers", withMetadata, withVolatile)); } /** @@ -359,6 +368,78 @@ public class FcpClient { } /** + * Removes the given peer. + * + * @param peer + * The peer to remove + * @throws IOException + * if an I/O error occurs + * @throws FcpException + * if an FCP error occurs + */ + public void removePeer(final Peer peer) throws IOException, FcpException { + ExtendedFcpAdapter fcpListener = new ExtendedFcpAdapter() { + + /** + * {@inheritDoc} + */ + @Override + @SuppressWarnings("synthetic-access") + public void run() throws IOException { + fcpConnection.sendMessage(new RemovePeer(peer.getIdentity())); + } + + /** + * {@inheritDoc} + */ + @Override + public void receivedPeerRemoved(FcpConnection fcpConnection, PeerRemoved peerRemoved) { + completionLatch.countDown(); + } + }; + fcpListener.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) { + objectWrapper.set(peerNote); + } + }.execute(); + return objectWrapper.get(); + } + + /** * Implementation of an {@link FcpListener} that can store an * {@link FcpException} and wait for the arrival of a certain command. *