From 2c90f84175b7f9be2a6b80f744d05981066f55f5 Mon Sep 17 00:00:00 2001 From: republicline <1464474399@qq.com> Date: Tue, 15 Oct 2024 18:05:48 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E8=81=8A=E5=A4=A9=E5=AE=A4=E6=97=A0?= =?UTF-8?q?=E6=B3=95=E6=8E=A8=E9=80=81bug,=20fix?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/rax/vital/v1/handler/ChatHandler.java | 37 +++++++++++++++++-- .../v1/medicine/service/ChatService.java | 3 +- .../service/impl/ChatServiceImpl.java | 23 ++++++------ 3 files changed, 47 insertions(+), 16 deletions(-) diff --git a/upms/upms-biz/src/main/java/com/rax/vital/v1/handler/ChatHandler.java b/upms/upms-biz/src/main/java/com/rax/vital/v1/handler/ChatHandler.java index 4450f97..f6b8dca 100644 --- a/upms/upms-biz/src/main/java/com/rax/vital/v1/handler/ChatHandler.java +++ b/upms/upms-biz/src/main/java/com/rax/vital/v1/handler/ChatHandler.java @@ -10,6 +10,8 @@ import org.springframework.security.oauth2.server.authorization.OAuth2TokenType; import org.springframework.web.socket.*; import java.net.URLDecoder; +import java.util.ArrayList; +import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.Executors; @@ -25,6 +27,12 @@ public class ChatHandler implements WebSocketHandler { private Map timerTaskMap = new ConcurrentHashMap(); + // dbName -> sessionList + private Map> dbNameSessionList = new ConcurrentHashMap(); + + // sessionId -> dbName + private Map sessionDbMap = new ConcurrentHashMap(); + @Override public void afterConnectionEstablished(WebSocketSession session) throws Exception { startHeartbeat(session); @@ -34,26 +42,39 @@ public class ChatHandler implements WebSocketHandler { public void handleMessage(WebSocketSession session, WebSocketMessage message) throws Exception { String query = session.getUri().getQuery(); String decode = URLDecoder.decode(query); -// System.out.println("query = " + query); Map params = GetHttpParamUtil.getParams(decode); String token = (String) params.get("token"); - // String token = "azIc_An5dRViceuMN5B5_S-k-1YH8gTCkzc9A6d8mJYguTOEOXWHLaojcpqNNrhYG_9QSUV_y9LpYCN01SqY-GHcXJoMEqCxU-3Qudvkizll3T6mOWK-MJDODMZHETGj"; OAuth2Authorization authorization = authorizationService.findByToken(token, OAuth2TokenType.ACCESS_TOKEN); if (authorization != null) { String username = authorization.getPrincipalName(); -// System.out.println("username = " + username); String payload = (String) message.getPayload(); JSONObject jsonObject = JSONObject.parseObject(payload); if ("heartbeat".equals(jsonObject.getString("msgType"))) { // session.sendMessage(new TextMessage("")); + }else if ("init".equals(jsonObject.getString("msgType"))) { + // 初始化, 将session信息保存起来 + String dbName = jsonObject.getString("idNum"); + if (!dbNameSessionList.containsKey(dbName)) { + ArrayList sessionArrayList = new ArrayList<>(); + dbNameSessionList.put(dbName, sessionArrayList); + sessionDbMap.put(session.getId(), dbName); + } + dbNameSessionList.get(dbName).add(session); } else { + System.out.println("收到消息-start = " + jsonObject.toJSONString()); String patientName = jsonObject.getString("patientName"); String idNum = jsonObject.getString("idNum"); String date = jsonObject.getString("date"); // 消息内容 String msg = jsonObject.getString("msg"); - chatService.sendMessageMysql(username, patientName, idNum, date, session, msg); + // + List webSocketSessions = dbNameSessionList.get(idNum); + for (WebSocketSession webSocketSession : webSocketSessions) { + System.out.println("webSocketSession.size() = " + webSocketSessions.size()); + System.out.println("webSocketSession = " + webSocketSession); + } + chatService.sendMessageMysql(username, patientName, idNum, date, session, msg, webSocketSessions); } } } @@ -61,6 +82,7 @@ public class ChatHandler implements WebSocketHandler { @Override public void handleTransportError(WebSocketSession session, Throwable exception) { System.out.println("Error: " + exception.getMessage()); + stopMap(session); } @Override @@ -68,6 +90,7 @@ public class ChatHandler implements WebSocketHandler { System.out.println("CloseStatus: " + closeStatus.getReason() + closeStatus.getCode()); stopHeartbeat(session); chatService.stopTask(session.getId()); + stopMap(session); } @Override @@ -103,4 +126,10 @@ public class ChatHandler implements WebSocketHandler { heartbeatExecutor.shutdownNow(); } + private void stopMap(WebSocketSession session) { + String dbName = sessionDbMap.get(session.getId()); + dbNameSessionList.remove(dbName); + sessionDbMap.remove(session.getId()); + } + } diff --git a/upms/upms-biz/src/main/java/com/rax/vital/v1/medicine/service/ChatService.java b/upms/upms-biz/src/main/java/com/rax/vital/v1/medicine/service/ChatService.java index 4381475..7f2a2a8 100644 --- a/upms/upms-biz/src/main/java/com/rax/vital/v1/medicine/service/ChatService.java +++ b/upms/upms-biz/src/main/java/com/rax/vital/v1/medicine/service/ChatService.java @@ -3,13 +3,14 @@ package com.rax.vital.v1.medicine.service; import org.springframework.web.socket.WebSocketSession; import java.io.IOException; +import java.util.List; public interface ChatService { void sendMessage(String username, String patientName, String idNum, String date, String simpSessionId, String msg); void sendMessage(String username, String patientName, String idNum, String date, WebSocketSession session, String msg) throws IOException; - void sendMessageMysql(String username, String patientName, String idNum, String date, WebSocketSession session, String msg) throws Exception; + void sendMessageMysql(String username, String patientName, String idNum, String date, WebSocketSession session, String msg, List webSocketSessions) throws Exception; void stopTimerTask(String simpSessionId); diff --git a/upms/upms-biz/src/main/java/com/rax/vital/v1/medicine/service/impl/ChatServiceImpl.java b/upms/upms-biz/src/main/java/com/rax/vital/v1/medicine/service/impl/ChatServiceImpl.java index 2a15b24..6bf97d9 100644 --- a/upms/upms-biz/src/main/java/com/rax/vital/v1/medicine/service/impl/ChatServiceImpl.java +++ b/upms/upms-biz/src/main/java/com/rax/vital/v1/medicine/service/impl/ChatServiceImpl.java @@ -157,9 +157,8 @@ public class ChatServiceImpl implements ChatService { } @Override - public void sendMessageMysql(String username, String patientName, String idNum, String date, WebSocketSession session, String msg) throws SQLException { + public void sendMessageMysql(String username, String patientName, String idNum, String date, WebSocketSession session, String msg, List webSocketSessionList) throws SQLException, IOException { CustomDataSource dataSource = datasourceMap.get(session.getId()); -// String databaseName = patientName + idNum; String databaseName = idNum; ArrayList history = new ArrayList<>(); @@ -230,7 +229,6 @@ public class ChatServiceImpl implements ChatService { DatabaseMetaData metaData = connection.getMetaData(); String tableName = "t_chat"; ResultSet tablesx = metaData.getTables(null, null, tableName, new String[]{"TABLE"}); - System.out.println("tablesx = " + tablesx.next()); if (!tablesx.next()) { try { Statement statement = connection.createStatement(); @@ -272,14 +270,17 @@ public class ChatServiceImpl implements ChatService { e.printStackTrace(); } - Map sessionMap1 = databaseSessionMap.get(databaseName); - for (Map.Entry entry : sessionMap1.entrySet()) { - WebSocketSession value = entry.getValue(); - try { - value.sendMessage(new TextMessage(param.toJSONString().getBytes())); - } catch (IOException e) { - e.printStackTrace(); - } +// Map sessionMap1 = databaseSessionMap.get(databaseName); +// for (Map.Entry entry : sessionMap1.entrySet()) { +// WebSocketSession value = entry.getValue(); +// try { +// value.sendMessage(new TextMessage(param.toJSONString().getBytes())); +// } catch (IOException e) { +// e.printStackTrace(); +// } +// } + for (WebSocketSession webSocketSession : webSocketSessionList) { + webSocketSession.sendMessage(new TextMessage(param.toJSONString().getBytes())); } } }