package com.qianwen.core.websocket.holder; import java.util.Collection; import java.util.HashSet; import java.util.Map; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import java.util.stream.Collectors; import org.springframework.web.socket.WebSocketSession; /** * websocketsession存取 */ public class WebSocketSessionHolder { private static final Map> USER_SESSION_MAP = new ConcurrentHashMap<>(); private WebSocketSessionHolder() { } public static void addSession(Object sessionKey, WebSocketSession session) { USER_SESSION_MAP.put(sessionKey, combineSessionWithSameKey(sessionKey, session)); } public static void removeSession(Object sessionKey) { USER_SESSION_MAP.remove(sessionKey); } public static void removeSession(Object sessionKey, WebSocketSession session) { Set webSocketSessions = USER_SESSION_MAP.get(sessionKey); webSocketSessions.remove(session); } public static Set getSession(Object sessionKey) { return USER_SESSION_MAP.get(sessionKey); } public static Collection getSessions() { return USER_SESSION_MAP.values().stream().flatMap(Collection::stream).collect(Collectors.toList()); } public static Set SessionKeys() { return USER_SESSION_MAP.keySet(); } private static Set combineSessionWithSameKey(Object sessionKey, WebSocketSession session) { Set result = USER_SESSION_MAP.getOrDefault(sessionKey, new HashSet()); result.add(session); return result; } }