package com.mtf.vega.util;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import javax.servlet.http.HttpSession;
/**
* 自定义Session容器,用于管理和引用session
*
*/
public class SessionContext {
private static SessionContext instance;
private ConcurrentHashMap<String, HttpSession> map;
private SessionContext() {
map = new ConcurrentHashMap<String, HttpSession>();
}
public static SessionContext getInstance() {
if (instance == null) {
instance = new SessionContext();
}
return instance;
}
public synchronized void addSession(HttpSession session) {
if (session != null) {
map.put(session.getId(), session);
}
}
public synchronized void removeSession(HttpSession session) {
if (session != null) {
map.remove(session.getId());
}
}
public synchronized HttpSession getSession(String sessionId) {
if (sessionId == null) return null;
return map.get(sessionId);
}
public Collection<HttpSession> getAllSessions() {
return map.values();
}
public List<SessionInfo> getOnlineUsers() {
List<SessionInfo> userList = new ArrayList<SessionInfo>();
Set<String> set = map.keySet();
for (Iterator<String> iterator = set.iterator(); iterator.hasNext();) {
String key = iterator.next();
HttpSession value = map.get(key);
if (value != null && value.getAttribute(Constants.SESSION_INFO) != null) {
userList.add((SessionInfo) value.getAttribute(Constants.SESSION_INFO));
}
}
return userList;
}
public SessionInfo getOnlineUser(String userId) {
Set<String> set = map.keySet();
for (Iterator<String> iterator = set.iterator(); iterator.hasNext();) {
String key = iterator.next();
HttpSession value = map.get(key);
if (value != null && value.getAttribute(Constants.SESSION_INFO) != null) {
SessionInfo sessionInfo = (SessionInfo) value.getAttribute(Constants.SESSION_INFO);
if (sessionInfo.getUserId().equals(userId)) {
return sessionInfo;
}
}
}
return null;
}
}