X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Ffcp%2Fquelaton%2FGetNodeCommandImpl.java;h=025cddca152d4cfdd9f192139bbc46960a398670;hb=ebede056b159ea34d294f3fac0e2def790454a48;hp=7efffc0a3abeebd712d2cd961f00436ed24c1da4;hpb=e3f3a4323df8d53a0a59c2e4369abbcd8d60b940;p=jFCPlib.git diff --git a/src/main/java/net/pterodactylus/fcp/quelaton/GetNodeCommandImpl.java b/src/main/java/net/pterodactylus/fcp/quelaton/GetNodeCommandImpl.java index 7efffc0..025cddc 100644 --- a/src/main/java/net/pterodactylus/fcp/quelaton/GetNodeCommandImpl.java +++ b/src/main/java/net/pterodactylus/fcp/quelaton/GetNodeCommandImpl.java @@ -1,7 +1,9 @@ package net.pterodactylus.fcp.quelaton; import java.io.IOException; +import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorService; +import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicReference; import net.pterodactylus.fcp.GetNode; @@ -12,7 +14,7 @@ import com.google.common.util.concurrent.ListeningExecutorService; import com.google.common.util.concurrent.MoreExecutors; /** - * Default {@link GetNodeCommandImpl} implementation based on {@link FcpReplySequence}. + * Default {@link GetNodeCommandImpl} implementation based on {@link FcpDialog}. * * @author David ‘Bombe’ Roden */ @@ -20,6 +22,9 @@ public class GetNodeCommandImpl implements GetNodeCommand { private final ListeningExecutorService threadPool; private final ConnectionSupplier connectionSupplier; + private final AtomicBoolean giveOpennetRef = new AtomicBoolean(false); + private final AtomicBoolean includePrivate = new AtomicBoolean(false); + private final AtomicBoolean includeVolatile = new AtomicBoolean(false); public GetNodeCommandImpl(ExecutorService threadPool, ConnectionSupplier connectionSupplier) { this.threadPool = MoreExecutors.listeningDecorator(threadPool); @@ -27,16 +32,41 @@ public class GetNodeCommandImpl implements GetNodeCommand { } @Override + public GetNodeCommand opennetRef() { + giveOpennetRef.set(true); + return this; + } + + @Override + public GetNodeCommand includePrivate() { + includePrivate.set(true); + return this; + } + + @Override + public GetNodeCommand includeVolatile() { + includeVolatile.set(true); + return this; + } + + @Override public ListenableFuture execute() { - GetNode getNode = new GetNode(new RandomIdentifierGenerator().generate(), false, false, false); - return threadPool.submit(() -> new GetNodeReplySequence().send(getNode).get()); + return threadPool.submit(this::executeSequence); + } + + private NodeData executeSequence() throws InterruptedException, ExecutionException, IOException { + GetNode getNode = new GetNode(new RandomIdentifierGenerator().generate(), giveOpennetRef.get(), + includePrivate.get(), includeVolatile.get()); + try (GetNodeDialog getNodeDialog = new GetNodeDialog()) { + return getNodeDialog.send(getNode).get(); + } } - private class GetNodeReplySequence extends FcpReplySequence { + private class GetNodeDialog extends FcpDialog { private final AtomicReference nodeData = new AtomicReference<>(); - public GetNodeReplySequence() throws IOException { + public GetNodeDialog() throws IOException { super(threadPool, connectionSupplier.get()); }