diff --git a/mall-im/src/main/java/com/suisung/mall/im/common/websocket/service/LocalSessionManager.java b/mall-im/src/main/java/com/suisung/mall/im/common/websocket/service/LocalSessionManager.java index a3bb6776..98a83d13 100644 --- a/mall-im/src/main/java/com/suisung/mall/im/common/websocket/service/LocalSessionManager.java +++ b/mall-im/src/main/java/com/suisung/mall/im/common/websocket/service/LocalSessionManager.java @@ -1,4 +1,5 @@ package com.suisung.mall.im.common.websocket.service; +import com.suisung.mall.im.common.websocket.service.onchat.MallsuiteImSocketHandler; import com.suisung.mall.im.pojo.vo.SendVO; import lombok.Getter; import lombok.Setter; @@ -28,28 +29,8 @@ public class LocalSessionManager { // 本地存储的群组会话 (groupId -> sessions) private ConcurrentHashMap> groupSessions = new ConcurrentHashMap<>(); - - - /** - * 添加用户会话 - */ - public void addUserSession(String userId, WebSocketSession session) { - if (userId == null || session == null) { - log.info("添加用户会话失败: 参数为空"); - return; - } - userSessions.compute(userId, (key, existingSessions) -> { - if (existingSessions == null) { - existingSessions = new CopyOnWriteArrayList<>(); - } -// if (!existingSessions.contains(session)) { -// existingSessions.add(session); -// } - existingSessions.add(session); - return existingSessions; - }); - - log.info("添加用户会话成功: userId={}, sessionId={}", userId, session.getId()); + public LocalSessionManager() { + this.userSessions = MallsuiteImSocketHandler.userSessions; } /** diff --git a/mall-im/src/main/java/com/suisung/mall/im/common/websocket/service/onchat/MallsuiteImSocketHandler.java b/mall-im/src/main/java/com/suisung/mall/im/common/websocket/service/onchat/MallsuiteImSocketHandler.java index 0d238ce4..2a3d5223 100644 --- a/mall-im/src/main/java/com/suisung/mall/im/common/websocket/service/onchat/MallsuiteImSocketHandler.java +++ b/mall-im/src/main/java/com/suisung/mall/im/common/websocket/service/onchat/MallsuiteImSocketHandler.java @@ -22,6 +22,7 @@ import org.springframework.web.socket.*; import java.io.IOException; import java.util.*; import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.CopyOnWriteArrayList; public class MallsuiteImSocketHandler implements WebSocketHandler { @@ -33,6 +34,8 @@ public class MallsuiteImSocketHandler implements WebSocketHandler { // private static Map> userSession; // private static Map> groupSession; + public static ConcurrentHashMap> userSessions; + @Autowired private DistributedSessionService distributedSessionService; @@ -45,6 +48,9 @@ public class MallsuiteImSocketHandler implements WebSocketHandler { @Autowired private ChatHistoryService chatHistoryService; + static { + userSessions=new ConcurrentHashMap<>(); + } //用户上线后触发 @Override @@ -55,9 +61,7 @@ public class MallsuiteImSocketHandler implements WebSocketHandler { String sessionId = session.getId(); // 存储到本地会话管理 - ConcurrentHashMap> userSessions=new ConcurrentHashMap<>(); - localSessionManager.setUserSessions(userSessions); - localSessionManager.addUserSession(loginUserId, session); + this.addUserSession(loginUserId, session); logger.info("添加会话到本地成功:{}", localSessionManager.getUserSessions().values()); @@ -334,4 +338,26 @@ public class MallsuiteImSocketHandler implements WebSocketHandler { logger.debug("向 {} 个在线用户发送消息", onlineUserIds.size()); } + + /** + * 添加用户会话 + */ + public void addUserSession(String userId, WebSocketSession session) { + if (userId == null || session == null) { + logger.info("添加用户会话失败: 参数为空"); + return; + } + userSessions.compute(userId, (key, existingSessions) -> { + if (existingSessions == null) { + existingSessions = new CopyOnWriteArrayList<>(); + } +// if (!existingSessions.contains(session)) { +// existingSessions.add(session); +// } + existingSessions.add(session); + return existingSessions; + }); + + logger.info("添加用户会话成功: userId={}, sessionId={}", userId, session.getId()); + } } \ No newline at end of file