package org.nutz.weixin.session.memory;
import java.util.concurrent.ConcurrentHashMap;
import org.nutz.weixin.session.AbstractWxSessionManager;
import org.nutz.weixin.spi.WxSession;
public class MemorySessionManager extends AbstractWxSessionManager {
/**
* 默认超时为2天
*/
public static long DEF_TIMEOUT = 2*24*60;
protected ConcurrentHashMap<String, MemoryWxSession> sessions = new ConcurrentHashMap<String, MemoryWxSession>();
public WxSession getSession(String id, boolean create) {
String sessionId = id;
MemoryWxSession session = sessions.get(sessionId);
if (session != null) {
int maxInterval = session.getMaxInactiveInterval();
if (maxInterval < 1) // 永不过期
return session;
long interval = (System.currentTimeMillis() - session.getLastAccessedTime()) / 1000 / 60;
if (maxInterval > interval) {
session.setLastAccessedTime(System.currentTimeMillis());
return session;
}
session = null;
}
synchronized (sessions) {
session = sessions.get(sessionId);
if (session == null) {
session = new MemoryWxSession(sessionId, this);
session.setCreateTime(System.currentTimeMillis());
session.setLastAccessedTime(System.currentTimeMillis());
sessions.put(sessionId, session);
return session;
}
}
return session;
}
void remove(String id) {
sessions.remove(id);
}
}