package edu.uw.zookeeper.net; import edu.uw.zookeeper.common.Automaton; import edu.uw.zookeeper.common.ForwardingPromise; import edu.uw.zookeeper.common.Promise; import edu.uw.zookeeper.common.SettableFuturePromise; import edu.uw.zookeeper.net.Connection; public class GetConnectionRead<O> extends ForwardingPromise<O> implements Connection.Listener<O> { public static <O> GetConnectionRead<O> create(Connection<?,? extends O,?> connection) { return new GetConnectionRead<O>(connection, SettableFuturePromise.<O>create()); } protected final Promise<O> promise; protected final Connection<?,? extends O,?> connection; public GetConnectionRead( Connection<?,? extends O,?> connection, Promise<O> promise) { this.promise = promise; this.connection = connection; this.connection.subscribe(this); } @Override protected Promise<O> delegate() { return promise; } @Override public void handleConnectionState(Automaton.Transition<Connection.State> state) { } @Override public void handleConnectionRead(O message) { connection.unsubscribe(this); set(message); } }