From 57c673aa3e83677bcf5d30b4b45d06bae6609db8 Mon Sep 17 00:00:00 2001 From: liusuyi <1951119284@qq.com> Date: 星期四, 08 八月 2024 16:14:40 +0800 Subject: [PATCH] 优化:获取会话 --- ard-work/src/main/java/com/ruoyi/utils/websocket/service/ChatServerEndpoint.java | 57 +++++++++++++++++++++++++++++++++++++++++---------------- 1 files changed, 41 insertions(+), 16 deletions(-) diff --git a/ard-work/src/main/java/com/ruoyi/utils/websocket/service/ChatServerEndpoint.java b/ard-work/src/main/java/com/ruoyi/utils/websocket/service/ChatServerEndpoint.java index c988db1..ca6b465 100644 --- a/ard-work/src/main/java/com/ruoyi/utils/websocket/service/ChatServerEndpoint.java +++ b/ard-work/src/main/java/com/ruoyi/utils/websocket/service/ChatServerEndpoint.java @@ -3,6 +3,7 @@ import com.alibaba.fastjson2.JSONObject; import com.ruoyi.app.position.service.impl.AppPositionPushService; import com.ruoyi.call.dto.CallMessage; +import com.ruoyi.common.exception.ServiceException; import com.ruoyi.utils.websocket.util.WebSocketUtils; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; @@ -11,7 +12,10 @@ import javax.websocket.server.PathParam; import javax.websocket.server.ServerEndpoint; import java.io.IOException; +import java.util.HashSet; +import java.util.List; import java.util.Map; +import java.util.Set; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -39,38 +43,60 @@ @OnMessage public void onMessage(@PathParam("userId") String userId, String message) { - log.info("鏀跺埌娑堟伅锛�" + message); -// Session session = WebSocketUtils.ONLINE_USER_SESSIONS.get(userId); -// WebSocketUtils.sendMessage(session, message); + log.debug("鏀跺埌娑堟伅锛�" + message); Map<String, Object> messageMap = JSONObject.parseObject(message, Map.class); - if (((String) messageMap.get("type")).equals("callMessage")) { + if (messageMap.get("type")!=null &&messageMap.get("type").equals("callMessage")) { String msg = (String) messageMap.get("message"); CallMessage callMessage = JSONObject.parseObject(msg, CallMessage.class); + //鍗曡亰 if (callMessage != null && callMessage.getType().equals(0)) { - String regex = "^" + Pattern.quote(callMessage.getTargetId()) + "_\\d+$"; - Pattern pattern = Pattern.compile(regex); - ONLINE_USER_SESSIONS.entrySet().stream() - .filter(entry -> { - Matcher matcher = pattern.matcher(entry.getKey()); - return matcher.matches(); - }) - .map(Map.Entry::getValue) - .forEach(session -> WebSocketUtils.sendMessage(session, message)); + WebSocketUtils.sendMessagePrefix(callMessage.getTargetId(), message); } + //缇よ亰 + if (callMessage != null && callMessage.getType().equals(1)) { + String step = callMessage.getStep(); + switch (step) { + case "joinRoom": + Set<String> userSet = WebSocketUtils.ROOM_USER_SET.getOrDefault(callMessage.getRoomId(), new HashSet<>()); + userSet.add(callMessage.getUserId()); + WebSocketUtils.ROOM_USER_SET.put(callMessage.getRoomId(), userSet); + WebSocketUtils.sendRoomMessage(callMessage.getRoomId(), message); + break; + case "inviteRoom": + List<String> targetIds = callMessage.getTargetIds(); + targetIds.stream().forEach(targetId -> { + WebSocketUtils.sendMessagePrefix(targetId, message); + }); + break; + case "leaveRoom": + userSet = WebSocketUtils.ROOM_USER_SET.getOrDefault(callMessage.getRoomId(), new HashSet<>()); + if (userSet.size() > 0) { + userSet.remove(callMessage.getUserId()); + WebSocketUtils.ROOM_USER_SET.put(callMessage.getRoomId(), userSet); + WebSocketUtils.sendRoomMessage(callMessage.getRoomId(), message); + } + break; + default: + WebSocketUtils.sendMessagePrefix(callMessage.getTargetId(), message); + break; + } + + } } // 鏍规嵁鐢ㄦ埛鏂扮殑棰戠巼閲嶆柊璋冩暣瀹氭椂浠诲姟 AppPositionPushService.messageHandler(userId, message); + } @OnClose public void onClose(@PathParam("userId") String userId, Session session) { //褰撳墠鐨凷ession 绉婚櫎 WebSocketUtils.ONLINE_USER_SESSIONS.remove(userId); - //骞朵笖閫氱煡鍏朵粬浜哄綋鍓嶇敤鎴峰凡缁忕寮�鑱婂ぉ瀹や簡 String message = "鐢ㄦ埛[" + userId + "] 鏂紑杩炴帴锛�"; - //sendMessage(session,message); log.info("娑堟伅锛�" + message); + //浠庢埧闂翠腑绉婚櫎鐢ㄦ埛 + WebSocketUtils.ROOM_USER_SET.values().stream().forEach(userSet -> userSet.remove(userId)); try { session.close(); AppPositionPushService.stopHandler(userId); @@ -88,5 +114,4 @@ } log.info("Throwable msg " + throwable.getMessage()); } - } \ No newline at end of file -- Gitblit v1.9.3