package com.farsunset.ichat.nio.session;
import java.util.Collection;
import java.util.HashMap;
import java.util.concurrent.atomic.AtomicInteger;
import com.farsunset.ichat.nio.constant.CIMConstant;
/**
* 自带默认 session管理实现, 各位可以自行实现 AbstractSessionManager接口来实现自己的 session管理 服务器集群时
* 须要将CIMSession 信息存入数据库或者nosql 等 第三方存储空间中,便于所有服务器都可以访问
*
* @author farsunset (3979434@qq.com)
*/
public class DefaultSessionManager implements SessionManager {
private static HashMap<String, CIMSession> sessions = new HashMap<String, CIMSession>();
private static final AtomicInteger connectionsCounter = new AtomicInteger(0);
/**
*
*/
public void addSession(String account, CIMSession session) {
if (session != null) {
session.setAttribute(CIMConstant.SESSION_KEY, account);
sessions.put(account, session);
connectionsCounter.incrementAndGet();
}
}
public CIMSession getSession(String account) {
return sessions.get(account);
}
public Collection<CIMSession> getSessions() {
return sessions.values();
}
public void removeSession(CIMSession session) {
sessions.remove(session.getAttribute(CIMConstant.SESSION_KEY));
}
public void removeSession(String account) {
sessions.remove(account);
}
public boolean containsCIMSession(CIMSession ios) {
return sessions.containsKey(ios.getAttribute(CIMConstant.SESSION_KEY))
|| sessions.containsValue(ios);
}
public String getAccount(CIMSession ios) {
if (ios.getAttribute(CIMConstant.SESSION_KEY) == null) {
for (String key : sessions.keySet()) {
if (sessions.get(key).equals(ios)
|| sessions.get(key).getNid() == ios.getNid()) {
return key;
}
}
} else {
return ios.getAttribute(CIMConstant.SESSION_KEY).toString();
}
return null;
}
}