X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Ffcp%2Fquelaton%2FClientHelloImpl.java;h=4e3b51c8dee54c61ffcd3fd0948df81395ccd01f;hb=2012a2dad86529e1a01528c075e9a87fcb31f156;hp=a87cd301f3231995bc2903186868e661eb062a1d;hpb=bcbda1a1adef0a7848e87601a5dbf1741a63d1cb;p=jFCPlib.git diff --git a/src/main/java/net/pterodactylus/fcp/quelaton/ClientHelloImpl.java b/src/main/java/net/pterodactylus/fcp/quelaton/ClientHelloImpl.java index a87cd30..4e3b51c 100644 --- a/src/main/java/net/pterodactylus/fcp/quelaton/ClientHelloImpl.java +++ b/src/main/java/net/pterodactylus/fcp/quelaton/ClientHelloImpl.java @@ -39,48 +39,46 @@ public class ClientHelloImpl { } private ListenableFuture execute() { - return threadPool.submit(() -> establishConnection()); + return threadPool.submit(this::establishConnection); } private FcpConnection establishConnection() throws IOException { FcpConnection connection = new FcpConnection(hostname, port); connection.connect(); - FcpReplySequence nodeHelloSequence = new ClientHelloReplySequence(connection); ClientHello clientHello = new ClientHello(clientName.get(), "2.0"); - try { - nodeHelloSequence.send(clientHello).get(); + try (ClientHelloReplySequence nodeHelloSequence = new ClientHelloReplySequence(connection)) { + if (nodeHelloSequence.send(clientHello).get()) { + return connection; + } } catch (InterruptedException | ExecutionException e) { connection.close(); throw new IOException(String.format("Could not connect to %s:%d.", hostname, port), e); } - return connection; + connection.close(); + throw new IOException(String.format("Could not connect to %s:%d.", hostname, port)); } - private class ClientHelloReplySequence extends FcpReplySequence { + private class ClientHelloReplySequence extends FcpReplySequence { - private final AtomicReference receivedNodeHello; - private final AtomicBoolean receivedClosed; + private final AtomicReference receivedNodeHello = new AtomicReference<>(); public ClientHelloReplySequence(FcpConnection connection) { super(ClientHelloImpl.this.threadPool, connection); - receivedNodeHello = new AtomicReference<>(); - receivedClosed = new AtomicBoolean(); } @Override protected boolean isFinished() { - return receivedNodeHello.get() != null || receivedClosed.get(); + return receivedNodeHello.get() != null; } @Override - protected void consumeNodeHello(NodeHello nodeHello) { - receivedNodeHello.set(nodeHello); + protected Boolean getResult() { + return receivedNodeHello.get() != null; } @Override - protected void consumeCloseConnectionDuplicateClientName( - CloseConnectionDuplicateClientName closeConnectionDuplicateClientName) { - receivedClosed.set(true); + protected void consumeNodeHello(NodeHello nodeHello) { + receivedNodeHello.set(nodeHello); } }