Add basic ClientPutDiskDir command implementation
[jFCPlib.git] / src / main / java / net / pterodactylus / fcp / quelaton / DefaultFcpClient.java
index 0d180cb..86a7d7f 100644 (file)
@@ -1,14 +1,12 @@
 package net.pterodactylus.fcp.quelaton;
 
 import java.io.IOException;
-import java.util.Optional;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.atomic.AtomicReference;
 import java.util.function.Supplier;
 
 import net.pterodactylus.fcp.FcpConnection;
-import net.pterodactylus.fcp.Peer;
 
 import com.google.common.util.concurrent.ListeningExecutorService;
 import com.google.common.util.concurrent.MoreExecutors;
@@ -20,11 +18,13 @@ import com.google.common.util.concurrent.MoreExecutors;
  */
 public class DefaultFcpClient implements FcpClient {
 
+       private final RandomIdentifierGenerator randomIdentifierGenerator = new RandomIdentifierGenerator();
        private final ListeningExecutorService threadPool;
        private final String hostname;
        private final int port;
        private final AtomicReference<FcpConnection> fcpConnection = new AtomicReference<>();
        private final Supplier<String> clientName;
+       private final ActiveSubscriptions activeSubscriptions = new ActiveSubscriptions(this::unsubscribeUsk);
 
        public DefaultFcpClient(ExecutorService threadPool, String hostname, int port, Supplier<String> clientName) {
                this.threadPool = MoreExecutors.listeningDecorator(threadPool);
@@ -40,6 +40,11 @@ public class DefaultFcpClient implements FcpClient {
                }
                fcpConnection = createConnection();
                this.fcpConnection.set(fcpConnection);
+               try {
+                       activeSubscriptions.renew(fcpConnection::addFcpListener, this::subscribeUsk);
+               } catch (InterruptedException | ExecutionException e) {
+                       throw new IOException(e);
+               }
                return fcpConnection;
        }
 
@@ -53,7 +58,17 @@ public class DefaultFcpClient implements FcpClient {
 
        @Override
        public GetNodeCommand getNode() {
-               return new GetNodeCommandImpl(threadPool, this::connect);
+               return new GetNodeCommandImpl(threadPool, this::connect, randomIdentifierGenerator::generate);
+       }
+
+       @Override
+       public GetConfigCommand getConfig() {
+               return new GetConfigCommandImpl(threadPool, this::connect, randomIdentifierGenerator::generate);
+       }
+
+       @Override
+       public ModifyConfigCommand modifyConfig() {
+               return new ModifyConfigCommandImpl(threadPool, this::connect, randomIdentifierGenerator::generate);
        }
 
        @Override
@@ -63,42 +78,81 @@ public class DefaultFcpClient implements FcpClient {
 
        @Override
        public ClientGetCommand clientGet() {
-               return new ClientGetCommandImpl(threadPool, this::connect);
+               return new ClientGetCommandImpl(threadPool, this::connect, randomIdentifierGenerator::generate);
        }
 
        @Override
        public ClientPutCommand clientPut() {
-               return new ClientPutCommandImpl(threadPool, this::connect);
+               return new ClientPutCommandImpl(threadPool, this::connect, randomIdentifierGenerator::generate);
+       }
+
+       @Override
+       public ClientPutDiskDirCommand clientPutDiskDir() {
+               return new ClientPutDiskDirCommandImpl(threadPool, this::connect, randomIdentifierGenerator::generate);
        }
 
        @Override
        public ListPeerCommand listPeer() {
-               return new ListPeerCommandImpl(threadPool, this::connect);
+               return new ListPeerCommandImpl(threadPool, this::connect, randomIdentifierGenerator::generate);
        }
 
        @Override
        public ListPeersCommand listPeers() {
-               return new ListPeersCommandImpl(threadPool, this::connect);
+               return new ListPeersCommandImpl(threadPool, this::connect, randomIdentifierGenerator::generate);
        }
 
        @Override
        public AddPeerCommand addPeer() {
-               return new AddPeerCommandImpl(threadPool, this::connect);
+               return new AddPeerCommandImpl(threadPool, this::connect, randomIdentifierGenerator::generate);
        }
 
        @Override
        public ModifyPeerCommand modifyPeer() {
-               return new ModifyPeerCommandImpl(threadPool, this::connect);
+               return new ModifyPeerCommandImpl(threadPool, this::connect, randomIdentifierGenerator::generate);
        }
 
        @Override
        public RemovePeerCommand removePeer() {
-               return new RemovePeerCommandImpl(threadPool, this::connect);
+               return new RemovePeerCommandImpl(threadPool, this::connect, randomIdentifierGenerator::generate);
        }
 
        @Override
        public ListPeerNotesCommand listPeerNotes() {
-               return new ListPeerNotesCommandImpl(threadPool, this::connect);
+               return new ListPeerNotesCommandImpl(threadPool, this::connect, randomIdentifierGenerator::generate);
+       }
+
+       @Override
+       public ModifyPeerNoteCommand modifyPeerNote() {
+               return new ModifyPeerNoteCommandImpl(threadPool, this::connect, randomIdentifierGenerator::generate);
+       }
+
+       @Override
+       public LoadPluginCommand loadPlugin() {
+               return new LoadPluginCommandImpl(threadPool, this::connect, randomIdentifierGenerator::generate);
+       }
+
+       @Override
+       public ReloadPluginCommand reloadPlugin() {
+               return new ReloadPluginCommandImpl(threadPool, this::connect, randomIdentifierGenerator::generate);
+       }
+
+       @Override
+       public RemovePluginCommand removePlugin() {
+               return new RemovePluginCommandImpl(threadPool, this::connect, randomIdentifierGenerator::generate);
+       }
+
+       @Override
+       public GetPluginInfoCommand getPluginInfo() {
+               return new GetPluginInfoCommandImpl(threadPool, this::connect, randomIdentifierGenerator::generate);
+       }
+
+       @Override
+       public SubscribeUskCommand subscribeUsk() {
+               return new SubscribeUskCommandImpl(threadPool, this::connect, randomIdentifierGenerator::generate, activeSubscriptions);
+       }
+
+       private UnsubscribeUskCommand unsubscribeUsk() {
+               return new UnsubscribeUskCommandImpl(threadPool, this::connect, randomIdentifierGenerator::generate);
        }
 
 }