X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Ffcp%2Fquelaton%2FSubscribeUskCommandImpl.java;h=598aeec513bcfc2949154e25346a208b2e984aec;hb=db815b5a0f70dcc602fc33b27c39e05a4e2fe57c;hp=cf9d10bc8ca0d738d10b516632fa0ac077ed4638;hpb=7f2aac0c599e683ea50b6b41e85d3ca76e1c1f55;p=jFCPlib.git diff --git a/src/main/java/net/pterodactylus/fcp/quelaton/SubscribeUskCommandImpl.java b/src/main/java/net/pterodactylus/fcp/quelaton/SubscribeUskCommandImpl.java index cf9d10b..598aeec 100644 --- a/src/main/java/net/pterodactylus/fcp/quelaton/SubscribeUskCommandImpl.java +++ b/src/main/java/net/pterodactylus/fcp/quelaton/SubscribeUskCommandImpl.java @@ -5,7 +5,6 @@ import java.util.Optional; 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.IdentifierCollision; import net.pterodactylus.fcp.SubscribeUSK; @@ -26,8 +25,12 @@ public class SubscribeUskCommandImpl implements SubscribeUskCommand { private final ListeningExecutorService threadPool; private final ConnectionSupplier connectionSupplier; private final SubscribeUSK subscribeUSK = new SubscribeUSK(IDENTIFIER.generate()); + private final ActiveSubscriptions activeSubscriptions; - public SubscribeUskCommandImpl(ExecutorService threadPool, ConnectionSupplier connectionSupplier) { + public SubscribeUskCommandImpl( + ExecutorService threadPool, ConnectionSupplier connectionSupplier, + ActiveSubscriptions activeSubscriptions) { + this.activeSubscriptions = activeSubscriptions; this.threadPool = MoreExecutors.listeningDecorator(threadPool); this.connectionSupplier = connectionSupplier; } @@ -44,14 +47,18 @@ public class SubscribeUskCommandImpl implements SubscribeUskCommand { private Optional executeDialog() throws IOException, ExecutionException, InterruptedException { try (SubscribeUskDialog subscribeUskDialog = new SubscribeUskDialog()) { - return subscribeUskDialog.send(subscribeUSK).get(); + if (subscribeUskDialog.send(subscribeUSK).get()) { + UskSubscription uskSubscription = activeSubscriptions.createUskSubscription(subscribeUSK); + return Optional.of(uskSubscription); + } + return Optional.empty(); } } - private class SubscribeUskDialog extends FcpDialog> { + private class SubscribeUskDialog extends FcpDialog { private final AtomicBoolean finished = new AtomicBoolean(); - private final AtomicReference subscribedUSK = new AtomicReference<>(); + private final AtomicBoolean success = new AtomicBoolean(); public SubscribeUskDialog() throws IOException { super(threadPool, connectionSupplier.get()); @@ -63,18 +70,13 @@ public class SubscribeUskCommandImpl implements SubscribeUskCommand { } @Override - protected Optional getResult() { - return Optional.ofNullable(subscribedUSK.get()).map(subscribedUSK -> new UskSubscription() { - @Override - public String getUri() { - return subscribedUSK.getURI(); - } - }); + protected Boolean getResult() { + return success.get(); } @Override protected void consumeSubscribedUSK(SubscribedUSK subscribedUSK) { - this.subscribedUSK.set(subscribedUSK); + success.set(true); finished.set(true); }