修正BUG -- 添加"init".equals(msgType)

This commit is contained in:
republicline 2024-07-25 13:30:53 +08:00
parent 7a1e31517b
commit 48a763cf10
6 changed files with 53 additions and 40 deletions

View File

@ -56,9 +56,12 @@ public class MySQLSource extends CustomDataSource {
}
public Connection getConnection() {
if (druidPooledConnection != null) {
connection = druidPooledConnection.getConnection();
return connection;
}
return null;
}
public void close() {
try {

View File

@ -47,7 +47,6 @@ public class AddMedicineHandler implements WebSocketHandler {
// String username = authorization.getPrincipalName();
JSONObject jsonObject = JSONObject.parseObject((String) message.getPayload());
String msgType = jsonObject.getString("msgType");
if (!"heartbeat".equals(msgType)) {
// 病人名
@ -56,13 +55,12 @@ public class AddMedicineHandler implements WebSocketHandler {
String idNum = jsonObject.getString("idNum");
// yyyyMMdd
String date = jsonObject.getString("date");
System.out.println("addMedicineHandler-json = " + jsonObject.toJSONString());
String databaseName = DatabaseNameUtil.encrypt(patientName) + "_" + DatabaseNameUtil.encrypt(idNum) + "_" + date;
System.out.println("addMedicineHandler-databaseName = " + databaseName);
// 将网站端的dbName作为key session作为Value存入Map 以便后续判断状态
aiMedicineTimer.initWeb(databaseName, session, false);
if ("init".equals(msgType)) {
aiMedicineTimer.initWeb(databaseName, session);
vitalSignTimerWS.initWeb(databaseName, session);
}
if (aiMedicineTimer.getUnitySession(databaseName) != null) {
JSONObject result = new JSONObject();
result.put("msg", "unity端已登录");
@ -95,14 +93,15 @@ public class AddMedicineHandler implements WebSocketHandler {
// 处理web端请求或断开连接
if ("webRequestConnection".equals(msgType)) {
String webRequestFlag = jsonObject.getString("webRequestFlag");
String webRequestFlag = jsonObject.getString("webConnectionFlag");
aiMedicineTimer.sendWebRequestConnectionMsg(databaseName, webRequestFlag);
}
// 处理发送给药相关
if (aiMedicineTimer.getWebSession(databaseName) != null && aiMedicineTimer.getUnitySession(databaseName) != null
if ("addMedicine".equals(msgType) && aiMedicineTimer.getWebSession(databaseName) != null && aiMedicineTimer.getUnitySession(databaseName) != null
&& aiMedicineTimer.isReady(databaseName)) {
// todo 注意修改
// flag 1 代表人工给药, 0代表AI给药
vitalSignTimerWS.changeWSAIFlag(databaseName, "admin", session, jsonObject.getString("flag"),
jsonObject.getString("medicine"), jsonObject.getString("value"));

View File

@ -50,8 +50,21 @@ public class MachineFeedbackHandler implements WebSocketHandler {
String databaseName = DatabaseNameUtil.encrypt(patientName) + "_" + DatabaseNameUtil.encrypt(idNum) + "_" + date;
String code = jsonObject.getString("code");
if ("init".equals(msgType)) {
aiMedicineTimer.initUnity(databaseName, session);
vitalSignTimerWS.initUnity(databaseName, session);
}
aiMedicineTimer.initUnity(databaseName, session, session);
// Unity获取到给药信息后回复
if ("getMedicine".equals(msgType)) {
JSONObject msg = new JSONObject();
msg.put("msgType", msgType);
msg.put("patientName", patientName);
msg.put("idNum", idNum);
msg.put("date", date);
WebSocketSession webSession = aiMedicineTimer.getWebSession(databaseName);
webSession.sendMessage(new TextMessage(msg.toJSONString().getBytes()));
}
// u3d发送表示请求与网页端的连接

View File

@ -21,7 +21,7 @@ public class AIMedicineTimer {
private static final Map<String, WebSocketSession> webDbSessionMap = new ConcurrentHashMap();
// 存放sessionId的状态
private static final Map<WebSocketSession, Boolean> webSessionStatusMap = new ConcurrentHashMap();
private static final Map<WebSocketSession, Boolean> webStatusMap = new ConcurrentHashMap();
// unity 端的dbname sessionId 映射
private static final Map<String, WebSocketSession> u3DDbSessionMap = new ConcurrentHashMap<>();
@ -42,14 +42,13 @@ public class AIMedicineTimer {
webSession.sendMessage(new TextMessage(unityMsg.toJSONString().getBytes()));
}
if ("0".equals(flag)) {
// 网页端拒绝连接
// unity拒绝连接
setU3DStatus(databaseName, false);
setWebStatus(databaseName, false);
unityMsg = new JSONObject();
unityMsg.put("msgType", "unityResponseConnection");
unityMsg.put("unityConnectionFlag", "0");
webSession.sendMessage(new TextMessage(unityMsg.toJSONString().getBytes()));
// 把网页端的sessionStatus置为false
setWebStatus(databaseName, false);
}
} else {
// 告知u3d网页端
@ -62,6 +61,7 @@ public class AIMedicineTimer {
// unity端请求网页端连接或断开连接
public void sendUnityRequestConnectionMsg(String databaseName, String flag) throws IOException {
WebSocketSession webSession = getWebSession(databaseName);
System.out.println("webSession = " + webSession);
JSONObject jsonObject = new JSONObject();
if ("1".equals(flag)) {
jsonObject.put("msgType", "unityRequestConnection");
@ -94,18 +94,20 @@ public class AIMedicineTimer {
// web端请求unity端连接或断开连接
public void sendWebRequestConnectionMsg(String databaseName, String flag) throws IOException {
WebSocketSession webSession = getWebSession(databaseName);
WebSocketSession unitySession = getUnitySession(databaseName);
System.out.println("unitySession = " + unitySession);
JSONObject jsonObject = new JSONObject();
if ("1".equals(flag)) {
System.out.println("网站端请求连接");
jsonObject.put("msgType", "webRequestConnection");
jsonObject.put("webConnectionFlag", "1");
webSession.sendMessage(new TextMessage(jsonObject.toJSONString().getBytes()));
unitySession.sendMessage(new TextMessage(jsonObject.toJSONString().getBytes()));
setWebStatus(databaseName,true);
}
if ("0".equals(flag)) {
jsonObject.put("msgType", "webRequestConnection");
jsonObject.put("webConnectionFlag", "0");
webSession.sendMessage(new TextMessage(jsonObject.toJSONString().getBytes()));
unitySession.sendMessage(new TextMessage(jsonObject.toJSONString().getBytes()));
setU3DStatus(databaseName, false);
// 把网页端的sessionStatus置为false
setWebStatus(databaseName, false);
@ -135,7 +137,6 @@ public class AIMedicineTimer {
}
} else {
// 告知网页端U3d尚未初始化
System.out.println("U3d尚未初始化无法发送连接响应消息");
WebSocketSession webSocketSession = webDbSessionMap.get(databaseName);
webSocketSession.sendMessage(new TextMessage("U3d尚未初始化无法发送连接响应消息".getBytes()));
}
@ -143,26 +144,23 @@ public class AIMedicineTimer {
public void setWebStatus(String dbName, Boolean status) {
WebSocketSession webSocketSession = webDbSessionMap.get(dbName);
webSessionStatusMap.put(webSocketSession, status);
webStatusMap.put(webSocketSession, status);
}
public boolean getWebConnectionStatus(String dbName) {
return webSessionStatusMap.getOrDefault(webDbSessionMap.get(dbName),false);
return webStatusMap.getOrDefault(webDbSessionMap.get(dbName),false);
}
public WebSocketSession getWebSession(String databaseName) {
webDbSessionMap.forEach((key, value) -> {
System.out.println("key = " + key + ", value = " + value);
});
return webDbSessionMap.getOrDefault(databaseName, null);
}
public void initWeb(String databaseName, WebSocketSession session, boolean b) {
public void initWeb(String databaseName, WebSocketSession session) {
webDbSessionMap.put(databaseName, session);
webSessionStatusMap.put(session, false);
webStatusMap.put(session, false);
}
public void initUnity(String databaseName, WebSocketSession session, WebSocketSession session1) {
public void initUnity(String databaseName, WebSocketSession session) {
u3DDbSessionMap.put(databaseName, session);
u3DStatusMap.put(session, false);
}
@ -173,7 +171,7 @@ public class AIMedicineTimer {
public void closeConnection(WebSocketSession session) {
webDbSessionMap.values().remove(session);
webSessionStatusMap.remove(session);
webStatusMap.remove(session);
u3DDbSessionMap.values().remove(session);
u3DStatusMap.remove(session);
}

View File

@ -83,16 +83,9 @@ public class VitalSignTimerWS {
private final RevulsionService revulsionService;
public void createAndSendWSMessageMongo(String database, String username, WebSocketSession session) {
for (String s : masterControlMap.keySet()) {
System.out.println("s = " + s + " masterControlMap.get(s) = " + masterControlMap.get(s));
}
// synchronized (this) {
if (!masterControlMap.containsKey(database)) {
masterControlMap.put(database, username);
}
// }
String sessionId = session.getId();
TimerTask task = timerTaskMap.get(sessionId);
@ -232,13 +225,14 @@ public class VitalSignTimerWS {
if (!userDatabaseSessionMap.containsKey(database)) {
userDatabaseSessionMap.put(database, session.getId());
}
// machineDatabaseSessionMap.containsKey(database)
if (machineDatabaseSessionMap.containsKey(database)) {
String sessionId = machineDatabaseSessionMap.get(database);
WebSocketSession machineSession = machineSessionMap.get(sessionId);
if (machineSession != null) {
result.put(medicine, value);
result.put("flag", flag);
result.put("msgType", "msg");
result.put("msgType", "addMedicine");
machineSession.sendMessage(new TextMessage(result.toJSONString().getBytes()));
} else {
result.put("flag", flag);
@ -267,7 +261,7 @@ public class VitalSignTimerWS {
}
public synchronized void setMachineSessionMap(WebSocketSession session) {
machineSessionMap.put(session.getId(), session);
// machineSessionMap.put(session.getId(), session);
}
public void removeMachineSessionMap(WebSocketSession session) {
@ -331,4 +325,13 @@ public class VitalSignTimerWS {
}
}
public void initUnity(String databaseName, WebSocketSession session) {
machineDatabaseSessionMap.put(databaseName, session.getId());
machineSessionMap.put(session.getId(), session);
}
public void initWeb(String databaseName, WebSocketSession session) {
userDatabaseSessionMap.put(databaseName, session.getId());
userSessionMap.put(session.getId(), session);
}
}

View File

@ -2,9 +2,6 @@ package com.rax.vital.util;
import org.springframework.util.StringUtils;
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
public class DatabaseNameUtil {