package edu.uw.zookeeper.server; import com.google.common.base.MoreObjects; import com.google.common.collect.Iterators; import edu.uw.zookeeper.common.TimeValue; import edu.uw.zookeeper.protocol.Session; public abstract class AbstractSessionManager implements SessionManager { protected final SessionParametersPolicy policy; protected AbstractSessionManager(SessionParametersPolicy policy) { this.policy = policy; } public SessionParametersPolicy policy() { return policy; } @Override public Session create() { long id = policy().newSessionId(); TimeValue timeOut = policy().maxTimeout(); byte[] passwd = policy().newPassword(id); Session.Parameters parameters = Session.Parameters.create(timeOut, passwd); return newSession(id, parameters); } @Override public Session create(TimeValue timeOut) { timeOut = policy().boundTimeout(timeOut); long id = policy().newSessionId(); byte[] passwd = policy().newPassword(id); return newSession(id, Session.Parameters.create(timeOut, passwd)); } @Override public String toString() { return MoreObjects.toStringHelper(this).addValue(Iterators.toString(iterator())).toString(); } protected Session newSession(long id, Session.Parameters parameters) { Session session = Session.create(id, parameters); Session prev = put(session); assert (prev == null); return session; } }