package com.its.op.websocket; import com.its.utils.Counter; import lombok.extern.slf4j.Slf4j; import org.springframework.web.socket.TextMessage; import org.springframework.web.socket.WebSocketSession; import java.util.concurrent.ConcurrentHashMap; @Slf4j public class ItsWebSocketSessionManager { private static ItsWebSocketSessionManager _instance = null; private volatile boolean serverRun; private Counter sessions; private ConcurrentHashMap sessionMap; public static ItsWebSocketSessionManager getInstance() { if (_instance == null) { synchronized (ItsWebSocketSessionManager.class) { if (_instance == null) _instance = new ItsWebSocketSessionManager(); } } return _instance; } private ItsWebSocketSessionManager() { this.sessions = new Counter(); this.sessionMap = new ConcurrentHashMap<>(); } public ConcurrentHashMap getMap() { return this.sessionMap; } public int add() { return (int) this.sessions.increment(); } public int remove() { return (int) this.sessions.decrement(); } public int get() { return (int) this.sessions.get(); } public void addSession(WebSocketSession session, ItsWebSocketSession vo) { this.sessionMap.put(session, vo); } public void removeSession(WebSocketSession session) { this.sessionMap.remove(session); } public ItsWebSocketSession getSession(WebSocketSession session) { return this.sessionMap.get(session); } public void reportSession() { log.info("Sessions: {}", this.sessionMap.toString()); } public void sendBroadcastMessage(String command, TextMessage message) { this.sessionMap.forEach((key, session) -> { //log.info("{}, {}, {}", command, message, key); session.sendMessage(command, message); }); } public void sendBroadcastSigPhaseMessage(String command, TextMessage message) { this.sessionMap.forEach((key, session) -> { //log.info("{}, {}, {}", command, message, key); if ("wall".equals(session.getGroupId())) { session.sendMessage(command, message); } }); } }