package edu.uw.zookeeper.client; import edu.uw.zookeeper.common.Processors; import edu.uw.zookeeper.protocol.Message; import edu.uw.zookeeper.protocol.Operation; import edu.uw.zookeeper.protocol.ProtocolRequestMessage; import edu.uw.zookeeper.protocol.SessionOperation; import edu.uw.zookeeper.protocol.SessionRequest; import edu.uw.zookeeper.protocol.client.XidGenerator; import edu.uw.zookeeper.protocol.client.XidIncrementer; import edu.uw.zookeeper.protocol.proto.Records; public class SessionClientProcessor implements Processors.UncheckedProcessor<Records.Request, SessionOperation.Request<Records.Request>>, XidGenerator { public static SessionClientProcessor create(long sessionId) { return new SessionClientProcessor(sessionId, XidIncrementer.fromZero()); } protected final long sessionId; protected final XidGenerator xids; public SessionClientProcessor(long sessionId, XidGenerator xids) { super(); this.sessionId = sessionId; this.xids = xids; } public long getSessionId() { return sessionId; } @Override public SessionOperation.Request<Records.Request> apply(Records.Request input) { int xid; if (input instanceof Operation.RequestId) { xid = ((Operation.RequestId) input).xid(); } else { xid = next(); } Message.ClientRequest<Records.Request> protocolRequest = ProtocolRequestMessage.of(xid, input); return SessionRequest.of(getSessionId(), protocolRequest); } @Override public int get() { return xids.get(); } @Override public int next() { return xids.next(); } }