import net.pterodactylus.fcp.SentFeed;
import net.pterodactylus.fcp.SimpleProgress;
import net.pterodactylus.fcp.StartedCompression;
+import net.pterodactylus.fcp.SubscribedUSK;
import net.pterodactylus.fcp.SubscribedUSKUpdate;
import net.pterodactylus.fcp.TestDDAComplete;
import net.pterodactylus.fcp.TestDDAReply;
private final AtomicReference<String> identifier = new AtomicReference<>();
private final AtomicBoolean connectionClosed = new AtomicBoolean();
private final AtomicReference<Throwable> connectionFailureReason = new AtomicReference<>();
+ private final AtomicBoolean finished = new AtomicBoolean();
+ private final AtomicReference<R> result = new AtomicReference<>();
- public FcpDialog(ExecutorService executorService, FcpConnection fcpConnection) {
+ public FcpDialog(ExecutorService executorService, FcpConnection fcpConnection, R initialResult) {
this.executorService = MoreExecutors.listeningDecorator(executorService);
this.fcpConnection = fcpConnection;
+ result.set(initialResult);
}
protected void setIdentifier(String identifier) {
this.identifier.set(identifier);
}
- protected abstract boolean isFinished();
+ public final boolean isFinished() {
+ return finished.get();
+ }
+
+ protected final void finish() {
+ finished.set(true);
+ }
+
+ protected final void setResult(R result) {
+ this.result.set(result);
+ finish();
+ }
public ListenableFuture<R> send(FcpMessage fcpMessage) throws IOException {
setIdentifier(fcpMessage.getField("Identifier"));
}
}
- protected R getResult() {
- return null;
+ protected final R getResult() {
+ return result.get();
}
@Override
protected void consumePersistentRequestRemoved(PersistentRequestRemoved persistentRequestRemoved) { }
@Override
+ public final void receivedSubscribedUSK(FcpConnection fcpConnection, SubscribedUSK subscribedUSK) {
+ consume(this::consumeSubscribedUSK, subscribedUSK);
+ }
+
+ protected void consumeSubscribedUSK(SubscribedUSK subscribedUSK) { }
+
+ @Override
public final void receivedSubscribedUSKUpdate(FcpConnection fcpConnection, SubscribedUSKUpdate subscribedUSKUpdate) {
consume(this::consumeSubscribedUSKUpdate, subscribedUSKUpdate);
}