X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Ffcp%2Fquelaton%2FDefaultFcpClient.java;h=1d7c02c2365065a7909e63498ec7c6806643a2ce;hb=207d6e210e81e7dfa3fb7931aecbfe1d251f6c7c;hp=30dac917bf451624dd386ab1d29b9216090e6956;hpb=9970ce4a2868da05e778ec998afb0a899a133959;p=jFCPlib.git diff --git a/src/main/java/net/pterodactylus/fcp/quelaton/DefaultFcpClient.java b/src/main/java/net/pterodactylus/fcp/quelaton/DefaultFcpClient.java index 30dac91..1d7c02c 100644 --- a/src/main/java/net/pterodactylus/fcp/quelaton/DefaultFcpClient.java +++ b/src/main/java/net/pterodactylus/fcp/quelaton/DefaultFcpClient.java @@ -12,6 +12,9 @@ import net.pterodactylus.fcp.CloseConnectionDuplicateClientName; import net.pterodactylus.fcp.FcpConnection; import net.pterodactylus.fcp.NodeHello; +import com.google.common.util.concurrent.ListeningExecutorService; +import com.google.common.util.concurrent.MoreExecutors; + /** * Default {@link FcpClient} implementation. * @@ -19,20 +22,17 @@ import net.pterodactylus.fcp.NodeHello; */ public class DefaultFcpClient implements FcpClient { - private final ExecutorService threadPool; + private final ListeningExecutorService threadPool; private final String hostname; private final int port; private final AtomicReference fcpConnection = new AtomicReference<>(); private final Supplier clientName; - private final Supplier expectedVersion; - public DefaultFcpClient(ExecutorService threadPool, String hostname, int port, Supplier clientName, - Supplier expectedVersion) { - this.threadPool = threadPool; + public DefaultFcpClient(ExecutorService threadPool, String hostname, int port, Supplier clientName) { + this.threadPool = MoreExecutors.listeningDecorator(threadPool); this.hostname = hostname; this.port = port; this.clientName = clientName; - this.expectedVersion = expectedVersion; } private FcpConnection connect() throws IOException { @@ -48,26 +48,8 @@ public class DefaultFcpClient implements FcpClient { private FcpConnection createConnection() throws IOException { FcpConnection connection = new FcpConnection(hostname, port); connection.connect(); - FcpReplySequence nodeHelloSequence = new FcpReplySequence(threadPool, connection) { - private final AtomicReference receivedNodeHello = new AtomicReference<>(); - private final AtomicBoolean receivedClosed = new AtomicBoolean(); - @Override - protected boolean isFinished() { - return receivedNodeHello.get() != null || receivedClosed.get(); - } - - @Override - protected void consumeNodeHello(NodeHello nodeHello) { - receivedNodeHello.set(nodeHello); - } - - @Override - protected void consumeCloseConnectionDuplicateClientName( - CloseConnectionDuplicateClientName closeConnectionDuplicateClientName) { - receivedClosed.set(true); - } - }; - ClientHello clientHello = new ClientHello(clientName.get(), expectedVersion.get()); + FcpReplySequence nodeHelloSequence = new ClientHelloReplySequence(connection); + ClientHello clientHello = new ClientHello(clientName.get(), "2.0"); try { nodeHelloSequence.send(clientHello).get(); } catch (InterruptedException | ExecutionException e) { @@ -87,5 +69,44 @@ public class DefaultFcpClient implements FcpClient { return new ClientGetCommandImpl(threadPool, this::connect); } + @Override + public ClientPutCommand clientPut() { + return new ClientPutCommandImpl(threadPool, this::connect); + } + + @Override + public ListPeersCommand listPeers() { + return new ListPeersCommandImpl(threadPool, this::connect); + } + + private class ClientHelloReplySequence extends FcpReplySequence { + + private final AtomicReference receivedNodeHello; + private final AtomicBoolean receivedClosed; + + public ClientHelloReplySequence(FcpConnection connection) { + super(DefaultFcpClient.this.threadPool, connection); + receivedNodeHello = new AtomicReference<>(); + receivedClosed = new AtomicBoolean(); + } + + @Override + protected boolean isFinished() { + return receivedNodeHello.get() != null || receivedClosed.get(); + } + + @Override + protected void consumeNodeHello(NodeHello nodeHello) { + receivedNodeHello.set(nodeHello); + } + + @Override + protected void consumeCloseConnectionDuplicateClientName( + CloseConnectionDuplicateClientName closeConnectionDuplicateClientName) { + receivedClosed.set(true); + } + + } + }