X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fnet%2Fpterodactylus%2Ffcp%2Fhighlevel%2FFcpClient.java;h=aa2c8f15dcb6f2ffa3d3e0f125c7381dbc931e44;hb=cb45121fb347bbada3fdbc3777fb6ac522739fa4;hp=2bdcf73ce8c947c39cc7ea4837e2a32df6e3aa4b;hpb=af286d4d2254fe092f2f5170183575a89b95f307;p=jFCPlib.git
diff --git a/src/net/pterodactylus/fcp/highlevel/FcpClient.java b/src/net/pterodactylus/fcp/highlevel/FcpClient.java
index 2bdcf73..aa2c8f1 100644
--- a/src/net/pterodactylus/fcp/highlevel/FcpClient.java
+++ b/src/net/pterodactylus/fcp/highlevel/FcpClient.java
@@ -33,12 +33,14 @@ import net.pterodactylus.fcp.ClientHello;
import net.pterodactylus.fcp.CloseConnectionDuplicateClientName;
import net.pterodactylus.fcp.EndListPeerNotes;
import net.pterodactylus.fcp.EndListPeers;
+import net.pterodactylus.fcp.EndListPersistentRequests;
import net.pterodactylus.fcp.FcpAdapter;
import net.pterodactylus.fcp.FcpConnection;
import net.pterodactylus.fcp.FcpListener;
import net.pterodactylus.fcp.GenerateSSK;
import net.pterodactylus.fcp.ListPeerNotes;
import net.pterodactylus.fcp.ListPeers;
+import net.pterodactylus.fcp.ListPersistentRequests;
import net.pterodactylus.fcp.ModifyPeer;
import net.pterodactylus.fcp.ModifyPeerNote;
import net.pterodactylus.fcp.NodeHello;
@@ -46,9 +48,11 @@ import net.pterodactylus.fcp.NodeRef;
import net.pterodactylus.fcp.Peer;
import net.pterodactylus.fcp.PeerNote;
import net.pterodactylus.fcp.PeerRemoved;
+import net.pterodactylus.fcp.PersistentGet;
import net.pterodactylus.fcp.ProtocolError;
import net.pterodactylus.fcp.RemovePeer;
import net.pterodactylus.fcp.SSKKeypair;
+import net.pterodactylus.fcp.WatchGlobal;
import net.pterodactylus.util.thread.ObjectWrapper;
/**
@@ -161,6 +165,8 @@ public class FcpClient {
fcpConnection.connect();
ClientHello clientHello = new ClientHello(name);
fcpConnection.sendMessage(clientHello);
+ WatchGlobal watchGlobal = new WatchGlobal(true);
+ fcpConnection.sendMessage(watchGlobal);
}
/**
@@ -205,7 +211,8 @@ public class FcpClient {
new ExtendedFcpAdapter() {
/** The ID of the âListPeersâ request. */
- private String identifier = "list-peers-" + System.currentTimeMillis();
+ @SuppressWarnings("synthetic-access")
+ private String identifier = createIdentifier("list-peers");
/**
* {@inheritDoc}
@@ -533,6 +540,72 @@ public class FcpClient {
return sskKeypairWrapper.get();
}
+ //
+ // REQUEST MANAGEMENT
+ //
+
+ /**
+ * Returns all currently visible persistent get requests.
+ *
+ * @param global
+ * true
to return get requests from the global
+ * queue, false
to only show requests from the
+ * client-local queue
+ * @return All get requests
+ * @throws IOException
+ * if an I/O error occurs
+ * @throws FcpException
+ * if an FCP error occurs
+ */
+ public Set getGetRequests(final boolean global) throws IOException, FcpException {
+ final Set getRequests = Collections.synchronizedSet(new HashSet());
+ new ExtendedFcpAdapter() {
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ @SuppressWarnings("synthetic-access")
+ public void run() throws IOException {
+ fcpConnection.sendMessage(new ListPersistentRequests());
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void receivedPersistentGet(FcpConnection fcpConnection, PersistentGet persistentGet) {
+ if (!persistentGet.isGlobal() || global) {
+ getRequests.add(persistentGet);
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void receivedEndListPersistentRequests(FcpConnection fcpConnection, EndListPersistentRequests endListPersistentRequests) {
+ completionLatch.countDown();
+ }
+ }.execute();
+ return getRequests;
+ }
+
+ //
+ // PRIVATE METHODS
+ //
+
+ /**
+ * Creates a unique request identifier.
+ *
+ * @param basename
+ * The basename of the request
+ * @return The created request identifier
+ */
+ private String createIdentifier(String basename) {
+ return basename + "-" + System.currentTimeMillis() + "-" + (int) (Math.random() * Integer.MAX_VALUE);
+ }
+
/**
* Implementation of an {@link FcpListener} that can store an
* {@link FcpException} and wait for the arrival of a certain command.