Add getGetRequests() method.
authorDavid ‘Bombe’ Roden <bombe@freenetproject.org>
Thu, 19 Mar 2009 23:21:40 +0000 (00:21 +0100)
committerDavid ‘Bombe’ Roden <bombe@freenetproject.org>
Thu, 19 Mar 2009 23:21:40 +0000 (00:21 +0100)
src/net/pterodactylus/fcp/highlevel/FcpClient.java

index 1b695e9..dae7546 100644 (file)
@@ -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;
 
 /**
@@ -535,6 +539,56 @@ public class FcpClient {
        }
 
        //
+       // REQUEST MANAGEMENT
+       //
+
+       /**
+        * Returns all currently visible persistent get requests.
+        *
+        * @param global
+        *            <code>true</code> to return get requests from the global
+        *            queue, <code>false</code> 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<PersistentGet> getGetRequests(final boolean global) throws IOException, FcpException {
+               final Set<PersistentGet> getRequests = Collections.synchronizedSet(new HashSet<PersistentGet>());
+               new ExtendedFcpAdapter() {
+
+                       /**
+                        * {@inheritDoc}
+                        */
+                       @Override
+                       @SuppressWarnings("synthetic-access")
+                       public void run() throws IOException {
+                               fcpConnection.sendMessage(new WatchGlobal(global));
+                               fcpConnection.sendMessage(new ListPersistentRequests());
+                       }
+
+                       /**
+                        * {@inheritDoc}
+                        */
+                       @Override
+                       public void receivedPersistentGet(FcpConnection fcpConnection, PersistentGet persistentGet) {
+                               getRequests.add(persistentGet);
+                       }
+
+                       /**
+                        * {@inheritDoc}
+                        */
+                       @Override
+                       public void receivedEndListPersistentRequests(FcpConnection fcpConnection, EndListPersistentRequests endListPersistentRequests) {
+                               completionLatch.countDown();
+                       }
+               }.execute();
+               return getRequests;
+       }
+
+       //
        // PRIVATE METHODS
        //