ItsWebSocketSessionManager.java 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. package com.its.op.websocket;
  2. import com.its.utils.Counter;
  3. import lombok.extern.slf4j.Slf4j;
  4. import org.springframework.web.socket.TextMessage;
  5. import org.springframework.web.socket.WebSocketSession;
  6. import java.util.concurrent.ConcurrentHashMap;
  7. @Slf4j
  8. public class ItsWebSocketSessionManager {
  9. private static ItsWebSocketSessionManager _instance = null;
  10. private volatile boolean serverRun;
  11. private Counter sessions;
  12. private ConcurrentHashMap<WebSocketSession, ItsWebSocketSession> sessionMap;
  13. public static ItsWebSocketSessionManager getInstance() {
  14. if (_instance == null) {
  15. synchronized (ItsWebSocketSessionManager.class) {
  16. if (_instance == null)
  17. _instance = new ItsWebSocketSessionManager();
  18. }
  19. }
  20. return _instance;
  21. }
  22. private ItsWebSocketSessionManager() {
  23. this.sessions = new Counter();
  24. this.sessionMap = new ConcurrentHashMap<>();
  25. }
  26. public ConcurrentHashMap<WebSocketSession, ItsWebSocketSession> getMap() {
  27. return this.sessionMap;
  28. }
  29. public int add() {
  30. return (int) this.sessions.increment();
  31. }
  32. public int remove() {
  33. return (int) this.sessions.decrement();
  34. }
  35. public int get() {
  36. return (int) this.sessions.get();
  37. }
  38. public void addSession(WebSocketSession session, ItsWebSocketSession vo) {
  39. this.sessionMap.put(session, vo);
  40. }
  41. public void removeSession(WebSocketSession session) {
  42. this.sessionMap.remove(session);
  43. }
  44. public ItsWebSocketSession getSession(WebSocketSession session) {
  45. return this.sessionMap.get(session);
  46. }
  47. public void reportSession() {
  48. log.info("Sessions: {}", this.sessionMap.toString());
  49. }
  50. public void sendBroadcastMessage(String command, TextMessage message) {
  51. this.sessionMap.forEach((key, session) -> {
  52. //log.info("{}, {}, {}", command, message, key);
  53. session.sendMessage(command, message);
  54. });
  55. }
  56. public void sendBroadcastSigPhaseMessage(String command, TextMessage message) {
  57. this.sessionMap.forEach((key, session) -> {
  58. //log.info("{}, {}, {}", command, message, key);
  59. if ("wall".equals(session.getGroupId())) {
  60. session.sendMessage(command, message);
  61. }
  62. });
  63. }
  64. }