X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;ds=sidebyside;f=src%2Fnet%2Fpterodactylus%2Ffcp%2Fhighlevel%2FFcpClient.java;h=fdcdc39b32166ce921543614e2a94ba0c282dbf8;hb=d8cf32504b5c889235dd55991ccdae2e34ba5cfb;hp=78a5064aed0225adc4f6ce47f280231fa4321afb;hpb=b9e631fc3d6577df59d1660dfa37502e0e08de29;p=jFCPlib.git
diff --git a/src/net/pterodactylus/fcp/highlevel/FcpClient.java b/src/net/pterodactylus/fcp/highlevel/FcpClient.java
index 78a5064..fdcdc39 100644
--- a/src/net/pterodactylus/fcp/highlevel/FcpClient.java
+++ b/src/net/pterodactylus/fcp/highlevel/FcpClient.java
@@ -34,14 +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
@@ -183,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() {
@@ -199,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));
}
/**
@@ -393,6 +400,45 @@ public class FcpClient {
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.