package edu.uw.zookeeper.client;
import com.google.common.util.concurrent.ListenableFuture;
import edu.uw.zookeeper.client.ClientExecutor;
import edu.uw.zookeeper.common.Promise;
import edu.uw.zookeeper.protocol.Operation;
import edu.uw.zookeeper.protocol.SessionListener;
import edu.uw.zookeeper.protocol.SessionOperation;
import edu.uw.zookeeper.protocol.proto.Records;
public class SessionClientExecutor<V extends Operation.ProtocolResponse<?>, T extends SessionListener> implements ClientExecutor<Records.Request, V, T> {
public static <V extends Operation.ProtocolResponse<?>, T extends SessionListener> SessionClientExecutor<V,T> create(
long sessionId,
ClientExecutor<SessionOperation.Request<?>, V, T> delegate) {
return new SessionClientExecutor<V,T>(sessionId, delegate);
}
protected final SessionClientProcessor sessionProcessor;
protected final ClientExecutor<SessionOperation.Request<?>, V, T> delegate;
public SessionClientExecutor(
long sessionId,
ClientExecutor<SessionOperation.Request<?>, V, T> delegate) {
this.sessionProcessor = SessionClientProcessor.create(sessionId);
this.delegate = delegate;
}
@Override
public ListenableFuture<V> submit(Records.Request request) {
return delegate.submit(sessionProcessor.apply(request));
}
@Override
public ListenableFuture<V> submit(Records.Request request,
Promise<V> promise) {
return delegate.submit(sessionProcessor.apply(request), promise);
}
@Override
public void subscribe(T handler) {
delegate.subscribe(handler);
}
@Override
public boolean unsubscribe(T handler) {
return delegate.unsubscribe(handler);
}
}