From 91b70d5ad2ada85cf00b25f7b9ecd9cf980bf138 Mon Sep 17 00:00:00 2001 From: liusuyi <1951119284@qq.com> Date: 星期一, 12 八月 2024 16:42:44 +0800 Subject: [PATCH] 优化:websocket接收消息 --- ard-work/src/main/java/com/ruoyi/utils/websocket/service/ChatServerEndpoint.java | 72 +++++++++++++++-------------------- 1 files changed, 31 insertions(+), 41 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 ca6b465..d796d94 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 @@ -1,8 +1,12 @@ package com.ruoyi.utils.websocket.service; +import com.alibaba.fastjson2.JSON; +import com.alibaba.fastjson2.JSONArray; +import com.alibaba.fastjson2.JSONException; import com.alibaba.fastjson2.JSONObject; import com.ruoyi.app.position.service.impl.AppPositionPushService; import com.ruoyi.call.dto.CallMessage; +import com.ruoyi.call.listener.WebsocketHandler; import com.ruoyi.common.exception.ServiceException; import com.ruoyi.utils.websocket.util.WebSocketUtils; import lombok.extern.slf4j.Slf4j; @@ -44,49 +48,19 @@ @OnMessage public void onMessage(@PathParam("userId") String userId, String message) { log.debug("鏀跺埌娑堟伅锛�" + message); - Map<String, Object> messageMap = JSONObject.parseObject(message, Map.class); - 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)) { - WebSocketUtils.sendMessagePrefix(callMessage.getTargetId(), message); + try { + if(isValidJson(message)) { + // 澶勭悊瑙嗛閫氳瘽娑堟伅 + WebsocketHandler.handleMessage(userId, message); + // 鏍规嵁鐢ㄦ埛鏂扮殑棰戠巼閲嶆柊璋冩暣瀹氭椂浠诲姟 + AppPositionPushService.messageHandler(userId, message); + } else { + // 澶勭悊鍏朵粬娑堟伅 + WebSocketUtils.sendMessage(userId,"Received an invalid JSON message锛�"+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; - } - - - } + } catch (Exception ex) { + WebSocketUtils.sendMessage(userId, "鏃犳硶瑙f瀽娑堟伅銆�" + message + "銆�:" + ex.getMessage()); } - // 鏍规嵁鐢ㄦ埛鏂扮殑棰戠巼閲嶆柊璋冩暣瀹氭椂浠诲姟 - AppPositionPushService.messageHandler(userId, message); - } @OnClose @@ -114,4 +88,20 @@ } log.info("Throwable msg " + throwable.getMessage()); } + + /** + * 妫�鏌ョ粰瀹氱殑瀛楃涓叉槸鍚︿负鏈夋晥鐨凧SON鏍煎紡銆� + * + * @param message 瑕佹鏌ョ殑瀛楃涓� + * @return 濡傛灉鏄湁鏁堢殑JSON瀛楃涓诧紝杩斿洖true锛涘惁鍒欒繑鍥瀎alse銆� + */ + public static boolean isValidJson(String message) { + try { + Object json = JSON.parse(message); + // 纭繚瑙f瀽缁撴灉鏄疛SONObject鎴朖SONArray绫诲瀷 + return (json instanceof JSONObject || json instanceof JSONArray); + } catch (JSONException e) { + return false; // 瑙f瀽澶辫触锛岃鏄庝笉鏄悎娉曠殑JSON + } + } } \ No newline at end of file -- Gitblit v1.9.3