diff --git a/casic-server/src/main/java/com/casic/missiles/common/WebSocket.java b/casic-server/src/main/java/com/casic/missiles/common/WebSocket.java index 85cb3d8..51e63a5 100644 --- a/casic-server/src/main/java/com/casic/missiles/common/WebSocket.java +++ b/casic-server/src/main/java/com/casic/missiles/common/WebSocket.java @@ -1,5 +1,6 @@ package com.casic.missiles.common; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; import javax.websocket.OnClose; @@ -13,9 +14,12 @@ import java.util.Map; import java.util.concurrent.CopyOnWriteArraySet; +/** + * 此注解相当于设置访问URL + */ @Component @ServerEndpoint("/websocket/{userId}") -//此注解相当于设置访问URL +@Slf4j public class WebSocket { private Session session; @@ -27,18 +31,18 @@ this.session = session; webSockets.add(this); sessionPool.put(userId, session); - System.out.println(userId + "【websocket消息】有新的连接,总数为:" + webSockets.size()); + log.info(userId + "【websocket消息】有新的连接,总数为:" + webSockets.size()); } @OnClose public void onClose() { webSockets.remove(this); - System.out.println("【websocket消息】连接断开,总数为:" + webSockets.size()); + log.info("【websocket消息】连接断开,总数为:" + webSockets.size()); } @OnMessage public void onMessage(String message) { - System.out.println("【websocket消息】收到客户端消息:" + message); + log.info("【websocket消息】收到客户端消息:" + message); } // 此为广播消息 @@ -65,7 +69,7 @@ * @param message 消息体 */ public void sendListMessage(List userIds, String message) { - System.out.println("【websocket消息】列表消息:" + message); + log.info("【websocket消息】列表消息:" + message); for (String userId : userIds) { Session session = sessionPool.get(userId); if (session != null) { @@ -78,9 +82,15 @@ } } - // 此为单点消息 + + /** + * 单点消息 + * + * @param userId 用户信息 + * @param message 消息体 + */ public void sendOneMessage(String userId, String message) { - System.out.println("【websocket消息】单点消息:" + message); + log.info("【websocket消息】单点消息:" + message); Session session = sessionPool.get(userId); if (session != null) { try { @@ -90,4 +100,5 @@ } } } + } \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/common/WebSocket.java b/casic-server/src/main/java/com/casic/missiles/common/WebSocket.java index 85cb3d8..51e63a5 100644 --- a/casic-server/src/main/java/com/casic/missiles/common/WebSocket.java +++ b/casic-server/src/main/java/com/casic/missiles/common/WebSocket.java @@ -1,5 +1,6 @@ package com.casic.missiles.common; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; import javax.websocket.OnClose; @@ -13,9 +14,12 @@ import java.util.Map; import java.util.concurrent.CopyOnWriteArraySet; +/** + * 此注解相当于设置访问URL + */ @Component @ServerEndpoint("/websocket/{userId}") -//此注解相当于设置访问URL +@Slf4j public class WebSocket { private Session session; @@ -27,18 +31,18 @@ this.session = session; webSockets.add(this); sessionPool.put(userId, session); - System.out.println(userId + "【websocket消息】有新的连接,总数为:" + webSockets.size()); + log.info(userId + "【websocket消息】有新的连接,总数为:" + webSockets.size()); } @OnClose public void onClose() { webSockets.remove(this); - System.out.println("【websocket消息】连接断开,总数为:" + webSockets.size()); + log.info("【websocket消息】连接断开,总数为:" + webSockets.size()); } @OnMessage public void onMessage(String message) { - System.out.println("【websocket消息】收到客户端消息:" + message); + log.info("【websocket消息】收到客户端消息:" + message); } // 此为广播消息 @@ -65,7 +69,7 @@ * @param message 消息体 */ public void sendListMessage(List userIds, String message) { - System.out.println("【websocket消息】列表消息:" + message); + log.info("【websocket消息】列表消息:" + message); for (String userId : userIds) { Session session = sessionPool.get(userId); if (session != null) { @@ -78,9 +82,15 @@ } } - // 此为单点消息 + + /** + * 单点消息 + * + * @param userId 用户信息 + * @param message 消息体 + */ public void sendOneMessage(String userId, String message) { - System.out.println("【websocket消息】单点消息:" + message); + log.info("【websocket消息】单点消息:" + message); Session session = sessionPool.get(userId); if (session != null) { try { @@ -90,4 +100,5 @@ } } } + } \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java new file mode 100644 index 0000000..26b17ab --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java @@ -0,0 +1,44 @@ +package com.casic.missiles.modular.robot.opt.enums; + +/** + * 指令推送消息定义 + */ +public enum InstructStatusMsgEnums { + /** + * 建图进度推送消息 + */ + PROCESS_MESSAGE("process_message", "建图进度推送消息"), + /** + * + */ + POSE_MESSAGE("pose_message", "实时定位推送消息"); + /** + * 请求地址 + */ + private String msgKey; + /** + * 响应地址 + */ + private String remarks; + + InstructStatusMsgEnums(String msgKey, String remarks) { + this.msgKey = msgKey; + this.remarks = remarks; + } + + public String getMsgKey() { + return msgKey; + } + + public void setMsgKey(String msgKey) { + this.msgKey = msgKey; + } + + public String getRemarks() { + return remarks; + } + + public void setRemarks(String remarks) { + this.remarks = remarks; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/common/WebSocket.java b/casic-server/src/main/java/com/casic/missiles/common/WebSocket.java index 85cb3d8..51e63a5 100644 --- a/casic-server/src/main/java/com/casic/missiles/common/WebSocket.java +++ b/casic-server/src/main/java/com/casic/missiles/common/WebSocket.java @@ -1,5 +1,6 @@ package com.casic.missiles.common; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; import javax.websocket.OnClose; @@ -13,9 +14,12 @@ import java.util.Map; import java.util.concurrent.CopyOnWriteArraySet; +/** + * 此注解相当于设置访问URL + */ @Component @ServerEndpoint("/websocket/{userId}") -//此注解相当于设置访问URL +@Slf4j public class WebSocket { private Session session; @@ -27,18 +31,18 @@ this.session = session; webSockets.add(this); sessionPool.put(userId, session); - System.out.println(userId + "【websocket消息】有新的连接,总数为:" + webSockets.size()); + log.info(userId + "【websocket消息】有新的连接,总数为:" + webSockets.size()); } @OnClose public void onClose() { webSockets.remove(this); - System.out.println("【websocket消息】连接断开,总数为:" + webSockets.size()); + log.info("【websocket消息】连接断开,总数为:" + webSockets.size()); } @OnMessage public void onMessage(String message) { - System.out.println("【websocket消息】收到客户端消息:" + message); + log.info("【websocket消息】收到客户端消息:" + message); } // 此为广播消息 @@ -65,7 +69,7 @@ * @param message 消息体 */ public void sendListMessage(List userIds, String message) { - System.out.println("【websocket消息】列表消息:" + message); + log.info("【websocket消息】列表消息:" + message); for (String userId : userIds) { Session session = sessionPool.get(userId); if (session != null) { @@ -78,9 +82,15 @@ } } - // 此为单点消息 + + /** + * 单点消息 + * + * @param userId 用户信息 + * @param message 消息体 + */ public void sendOneMessage(String userId, String message) { - System.out.println("【websocket消息】单点消息:" + message); + log.info("【websocket消息】单点消息:" + message); Session session = sessionPool.get(userId); if (session != null) { try { @@ -90,4 +100,5 @@ } } } + } \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java new file mode 100644 index 0000000..26b17ab --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java @@ -0,0 +1,44 @@ +package com.casic.missiles.modular.robot.opt.enums; + +/** + * 指令推送消息定义 + */ +public enum InstructStatusMsgEnums { + /** + * 建图进度推送消息 + */ + PROCESS_MESSAGE("process_message", "建图进度推送消息"), + /** + * + */ + POSE_MESSAGE("pose_message", "实时定位推送消息"); + /** + * 请求地址 + */ + private String msgKey; + /** + * 响应地址 + */ + private String remarks; + + InstructStatusMsgEnums(String msgKey, String remarks) { + this.msgKey = msgKey; + this.remarks = remarks; + } + + public String getMsgKey() { + return msgKey; + } + + public void setMsgKey(String msgKey) { + this.msgKey = msgKey; + } + + public String getRemarks() { + return remarks; + } + + public void setRemarks(String remarks) { + this.remarks = remarks; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/AbstractSocketHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/AbstractSocketHandler.java new file mode 100644 index 0000000..96ef561 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/AbstractSocketHandler.java @@ -0,0 +1,48 @@ +package com.casic.missiles.modular.robot.opt.handler; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.common.WebSocket; +import com.casic.missiles.modular.robot.opt.enums.InstructStatusMsgEnums; +import com.casic.missiles.modular.robot.opt.instruct.base.WsMsgBaseDTO; +import lombok.extern.slf4j.Slf4j; +import org.eclipse.paho.client.mqttv3.MqttMessage; + +import javax.annotation.Resource; + +/** + * websocket 推送消息 + */ +@Slf4j +public abstract class AbstractSocketHandler implements IBaseMsgHandler { + + /** + * websocket 连接 + */ + @Resource + private WebSocket webSocket; + + /** + * websocket 消息推送 + * + * @param enums 推送消息枚举 + * @param robotId 机器人连接 + * @param message 消息集合 + */ + protected void sendWebSocket(InstructStatusMsgEnums enums, String robotId, MqttMessage message) { + + try { + String json = new String(message.getPayload()); + JSONObject jsonObject = JSON.parseObject(json); + if (jsonObject.containsKey("msg")) { + WsMsgBaseDTO wsMsgBaseDTO = new WsMsgBaseDTO(); + wsMsgBaseDTO.setMsgKey(enums.getMsgKey()); + wsMsgBaseDTO.setData((JSONObject) jsonObject.get("msg")); + webSocket.sendOneMessage(robotId, JSON.toJSONString(wsMsgBaseDTO)); + } + } catch (Exception e) { + log.error(e.getMessage()); + } + + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/common/WebSocket.java b/casic-server/src/main/java/com/casic/missiles/common/WebSocket.java index 85cb3d8..51e63a5 100644 --- a/casic-server/src/main/java/com/casic/missiles/common/WebSocket.java +++ b/casic-server/src/main/java/com/casic/missiles/common/WebSocket.java @@ -1,5 +1,6 @@ package com.casic.missiles.common; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; import javax.websocket.OnClose; @@ -13,9 +14,12 @@ import java.util.Map; import java.util.concurrent.CopyOnWriteArraySet; +/** + * 此注解相当于设置访问URL + */ @Component @ServerEndpoint("/websocket/{userId}") -//此注解相当于设置访问URL +@Slf4j public class WebSocket { private Session session; @@ -27,18 +31,18 @@ this.session = session; webSockets.add(this); sessionPool.put(userId, session); - System.out.println(userId + "【websocket消息】有新的连接,总数为:" + webSockets.size()); + log.info(userId + "【websocket消息】有新的连接,总数为:" + webSockets.size()); } @OnClose public void onClose() { webSockets.remove(this); - System.out.println("【websocket消息】连接断开,总数为:" + webSockets.size()); + log.info("【websocket消息】连接断开,总数为:" + webSockets.size()); } @OnMessage public void onMessage(String message) { - System.out.println("【websocket消息】收到客户端消息:" + message); + log.info("【websocket消息】收到客户端消息:" + message); } // 此为广播消息 @@ -65,7 +69,7 @@ * @param message 消息体 */ public void sendListMessage(List userIds, String message) { - System.out.println("【websocket消息】列表消息:" + message); + log.info("【websocket消息】列表消息:" + message); for (String userId : userIds) { Session session = sessionPool.get(userId); if (session != null) { @@ -78,9 +82,15 @@ } } - // 此为单点消息 + + /** + * 单点消息 + * + * @param userId 用户信息 + * @param message 消息体 + */ public void sendOneMessage(String userId, String message) { - System.out.println("【websocket消息】单点消息:" + message); + log.info("【websocket消息】单点消息:" + message); Session session = sessionPool.get(userId); if (session != null) { try { @@ -90,4 +100,5 @@ } } } + } \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java new file mode 100644 index 0000000..26b17ab --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java @@ -0,0 +1,44 @@ +package com.casic.missiles.modular.robot.opt.enums; + +/** + * 指令推送消息定义 + */ +public enum InstructStatusMsgEnums { + /** + * 建图进度推送消息 + */ + PROCESS_MESSAGE("process_message", "建图进度推送消息"), + /** + * + */ + POSE_MESSAGE("pose_message", "实时定位推送消息"); + /** + * 请求地址 + */ + private String msgKey; + /** + * 响应地址 + */ + private String remarks; + + InstructStatusMsgEnums(String msgKey, String remarks) { + this.msgKey = msgKey; + this.remarks = remarks; + } + + public String getMsgKey() { + return msgKey; + } + + public void setMsgKey(String msgKey) { + this.msgKey = msgKey; + } + + public String getRemarks() { + return remarks; + } + + public void setRemarks(String remarks) { + this.remarks = remarks; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/AbstractSocketHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/AbstractSocketHandler.java new file mode 100644 index 0000000..96ef561 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/AbstractSocketHandler.java @@ -0,0 +1,48 @@ +package com.casic.missiles.modular.robot.opt.handler; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.common.WebSocket; +import com.casic.missiles.modular.robot.opt.enums.InstructStatusMsgEnums; +import com.casic.missiles.modular.robot.opt.instruct.base.WsMsgBaseDTO; +import lombok.extern.slf4j.Slf4j; +import org.eclipse.paho.client.mqttv3.MqttMessage; + +import javax.annotation.Resource; + +/** + * websocket 推送消息 + */ +@Slf4j +public abstract class AbstractSocketHandler implements IBaseMsgHandler { + + /** + * websocket 连接 + */ + @Resource + private WebSocket webSocket; + + /** + * websocket 消息推送 + * + * @param enums 推送消息枚举 + * @param robotId 机器人连接 + * @param message 消息集合 + */ + protected void sendWebSocket(InstructStatusMsgEnums enums, String robotId, MqttMessage message) { + + try { + String json = new String(message.getPayload()); + JSONObject jsonObject = JSON.parseObject(json); + if (jsonObject.containsKey("msg")) { + WsMsgBaseDTO wsMsgBaseDTO = new WsMsgBaseDTO(); + wsMsgBaseDTO.setMsgKey(enums.getMsgKey()); + wsMsgBaseDTO.setData((JSONObject) jsonObject.get("msg")); + webSocket.sendOneMessage(robotId, JSON.toJSONString(wsMsgBaseDTO)); + } + } catch (Exception e) { + log.error(e.getMessage()); + } + + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/PoseMessageMsgHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/PoseMessageMsgHandler.java index b389e01..35c5f37 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/PoseMessageMsgHandler.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/PoseMessageMsgHandler.java @@ -1,6 +1,7 @@ package com.casic.missiles.modular.robot.opt.handler.msg; -import com.casic.missiles.modular.robot.opt.handler.IBaseMsgHandler; +import com.casic.missiles.modular.robot.opt.enums.InstructStatusMsgEnums; +import com.casic.missiles.modular.robot.opt.handler.AbstractSocketHandler; import com.casic.missiles.modular.robot.service.IRobotTrajectoryInfoService; import lombok.extern.slf4j.Slf4j; import org.eclipse.paho.client.mqttv3.MqttMessage; @@ -11,7 +12,7 @@ */ @Slf4j @Component("/pose_message") -public class PoseMessageMsgHandler implements IBaseMsgHandler { +public class PoseMessageMsgHandler extends AbstractSocketHandler { private final IRobotTrajectoryInfoService robotTrajectoryInfoService; @@ -21,8 +22,8 @@ @Override public void process(String robotId, String topic, MqttMessage message) { - // {"msg": {"y": -20.73847741021961, "x": -1.958316040901666, "z": 0.4921659690312511, "theta": -2.494841778370823}} log.info("主键:{},实时位置topic:{},消息内容:{}", robotId, topic, message.toString()); robotTrajectoryInfoService.savePoseMessage(robotId, message); + sendWebSocket(InstructStatusMsgEnums.POSE_MESSAGE, robotId, message); } } diff --git a/casic-server/src/main/java/com/casic/missiles/common/WebSocket.java b/casic-server/src/main/java/com/casic/missiles/common/WebSocket.java index 85cb3d8..51e63a5 100644 --- a/casic-server/src/main/java/com/casic/missiles/common/WebSocket.java +++ b/casic-server/src/main/java/com/casic/missiles/common/WebSocket.java @@ -1,5 +1,6 @@ package com.casic.missiles.common; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; import javax.websocket.OnClose; @@ -13,9 +14,12 @@ import java.util.Map; import java.util.concurrent.CopyOnWriteArraySet; +/** + * 此注解相当于设置访问URL + */ @Component @ServerEndpoint("/websocket/{userId}") -//此注解相当于设置访问URL +@Slf4j public class WebSocket { private Session session; @@ -27,18 +31,18 @@ this.session = session; webSockets.add(this); sessionPool.put(userId, session); - System.out.println(userId + "【websocket消息】有新的连接,总数为:" + webSockets.size()); + log.info(userId + "【websocket消息】有新的连接,总数为:" + webSockets.size()); } @OnClose public void onClose() { webSockets.remove(this); - System.out.println("【websocket消息】连接断开,总数为:" + webSockets.size()); + log.info("【websocket消息】连接断开,总数为:" + webSockets.size()); } @OnMessage public void onMessage(String message) { - System.out.println("【websocket消息】收到客户端消息:" + message); + log.info("【websocket消息】收到客户端消息:" + message); } // 此为广播消息 @@ -65,7 +69,7 @@ * @param message 消息体 */ public void sendListMessage(List userIds, String message) { - System.out.println("【websocket消息】列表消息:" + message); + log.info("【websocket消息】列表消息:" + message); for (String userId : userIds) { Session session = sessionPool.get(userId); if (session != null) { @@ -78,9 +82,15 @@ } } - // 此为单点消息 + + /** + * 单点消息 + * + * @param userId 用户信息 + * @param message 消息体 + */ public void sendOneMessage(String userId, String message) { - System.out.println("【websocket消息】单点消息:" + message); + log.info("【websocket消息】单点消息:" + message); Session session = sessionPool.get(userId); if (session != null) { try { @@ -90,4 +100,5 @@ } } } + } \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java new file mode 100644 index 0000000..26b17ab --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java @@ -0,0 +1,44 @@ +package com.casic.missiles.modular.robot.opt.enums; + +/** + * 指令推送消息定义 + */ +public enum InstructStatusMsgEnums { + /** + * 建图进度推送消息 + */ + PROCESS_MESSAGE("process_message", "建图进度推送消息"), + /** + * + */ + POSE_MESSAGE("pose_message", "实时定位推送消息"); + /** + * 请求地址 + */ + private String msgKey; + /** + * 响应地址 + */ + private String remarks; + + InstructStatusMsgEnums(String msgKey, String remarks) { + this.msgKey = msgKey; + this.remarks = remarks; + } + + public String getMsgKey() { + return msgKey; + } + + public void setMsgKey(String msgKey) { + this.msgKey = msgKey; + } + + public String getRemarks() { + return remarks; + } + + public void setRemarks(String remarks) { + this.remarks = remarks; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/AbstractSocketHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/AbstractSocketHandler.java new file mode 100644 index 0000000..96ef561 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/AbstractSocketHandler.java @@ -0,0 +1,48 @@ +package com.casic.missiles.modular.robot.opt.handler; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.common.WebSocket; +import com.casic.missiles.modular.robot.opt.enums.InstructStatusMsgEnums; +import com.casic.missiles.modular.robot.opt.instruct.base.WsMsgBaseDTO; +import lombok.extern.slf4j.Slf4j; +import org.eclipse.paho.client.mqttv3.MqttMessage; + +import javax.annotation.Resource; + +/** + * websocket 推送消息 + */ +@Slf4j +public abstract class AbstractSocketHandler implements IBaseMsgHandler { + + /** + * websocket 连接 + */ + @Resource + private WebSocket webSocket; + + /** + * websocket 消息推送 + * + * @param enums 推送消息枚举 + * @param robotId 机器人连接 + * @param message 消息集合 + */ + protected void sendWebSocket(InstructStatusMsgEnums enums, String robotId, MqttMessage message) { + + try { + String json = new String(message.getPayload()); + JSONObject jsonObject = JSON.parseObject(json); + if (jsonObject.containsKey("msg")) { + WsMsgBaseDTO wsMsgBaseDTO = new WsMsgBaseDTO(); + wsMsgBaseDTO.setMsgKey(enums.getMsgKey()); + wsMsgBaseDTO.setData((JSONObject) jsonObject.get("msg")); + webSocket.sendOneMessage(robotId, JSON.toJSONString(wsMsgBaseDTO)); + } + } catch (Exception e) { + log.error(e.getMessage()); + } + + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/PoseMessageMsgHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/PoseMessageMsgHandler.java index b389e01..35c5f37 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/PoseMessageMsgHandler.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/PoseMessageMsgHandler.java @@ -1,6 +1,7 @@ package com.casic.missiles.modular.robot.opt.handler.msg; -import com.casic.missiles.modular.robot.opt.handler.IBaseMsgHandler; +import com.casic.missiles.modular.robot.opt.enums.InstructStatusMsgEnums; +import com.casic.missiles.modular.robot.opt.handler.AbstractSocketHandler; import com.casic.missiles.modular.robot.service.IRobotTrajectoryInfoService; import lombok.extern.slf4j.Slf4j; import org.eclipse.paho.client.mqttv3.MqttMessage; @@ -11,7 +12,7 @@ */ @Slf4j @Component("/pose_message") -public class PoseMessageMsgHandler implements IBaseMsgHandler { +public class PoseMessageMsgHandler extends AbstractSocketHandler { private final IRobotTrajectoryInfoService robotTrajectoryInfoService; @@ -21,8 +22,8 @@ @Override public void process(String robotId, String topic, MqttMessage message) { - // {"msg": {"y": -20.73847741021961, "x": -1.958316040901666, "z": 0.4921659690312511, "theta": -2.494841778370823}} log.info("主键:{},实时位置topic:{},消息内容:{}", robotId, topic, message.toString()); robotTrajectoryInfoService.savePoseMessage(robotId, message); + sendWebSocket(InstructStatusMsgEnums.POSE_MESSAGE, robotId, message); } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/ProcessMessageMsgHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/ProcessMessageMsgHandler.java index 702c091..4910f62 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/ProcessMessageMsgHandler.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/ProcessMessageMsgHandler.java @@ -1,6 +1,7 @@ package com.casic.missiles.modular.robot.opt.handler.msg; -import com.casic.missiles.modular.robot.opt.handler.IBaseMsgHandler; +import com.casic.missiles.modular.robot.opt.enums.InstructStatusMsgEnums; +import com.casic.missiles.modular.robot.opt.handler.AbstractSocketHandler; import com.casic.missiles.modular.robot.service.IRobotStatusInfoService; import lombok.extern.slf4j.Slf4j; import org.eclipse.paho.client.mqttv3.MqttMessage; @@ -10,11 +11,11 @@ import java.util.concurrent.ConcurrentHashMap; /** - * 暂停状态实时接收器 + * 发布实时建图进度实时接收器 */ @Slf4j @Component("/process_message") -public class ProcessMessageMsgHandler implements IBaseMsgHandler { +public class ProcessMessageMsgHandler extends AbstractSocketHandler { private final IRobotStatusInfoService statusInfoService; private static Map index = new ConcurrentHashMap<>(); @@ -26,5 +27,6 @@ public void process(String robotId, String topic, MqttMessage message) { log.info("建图进度:{}", message); statusInfoService.saveProcessMessage(robotId, message); + sendWebSocket(InstructStatusMsgEnums.PROCESS_MESSAGE, robotId, message); } } diff --git a/casic-server/src/main/java/com/casic/missiles/common/WebSocket.java b/casic-server/src/main/java/com/casic/missiles/common/WebSocket.java index 85cb3d8..51e63a5 100644 --- a/casic-server/src/main/java/com/casic/missiles/common/WebSocket.java +++ b/casic-server/src/main/java/com/casic/missiles/common/WebSocket.java @@ -1,5 +1,6 @@ package com.casic.missiles.common; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; import javax.websocket.OnClose; @@ -13,9 +14,12 @@ import java.util.Map; import java.util.concurrent.CopyOnWriteArraySet; +/** + * 此注解相当于设置访问URL + */ @Component @ServerEndpoint("/websocket/{userId}") -//此注解相当于设置访问URL +@Slf4j public class WebSocket { private Session session; @@ -27,18 +31,18 @@ this.session = session; webSockets.add(this); sessionPool.put(userId, session); - System.out.println(userId + "【websocket消息】有新的连接,总数为:" + webSockets.size()); + log.info(userId + "【websocket消息】有新的连接,总数为:" + webSockets.size()); } @OnClose public void onClose() { webSockets.remove(this); - System.out.println("【websocket消息】连接断开,总数为:" + webSockets.size()); + log.info("【websocket消息】连接断开,总数为:" + webSockets.size()); } @OnMessage public void onMessage(String message) { - System.out.println("【websocket消息】收到客户端消息:" + message); + log.info("【websocket消息】收到客户端消息:" + message); } // 此为广播消息 @@ -65,7 +69,7 @@ * @param message 消息体 */ public void sendListMessage(List userIds, String message) { - System.out.println("【websocket消息】列表消息:" + message); + log.info("【websocket消息】列表消息:" + message); for (String userId : userIds) { Session session = sessionPool.get(userId); if (session != null) { @@ -78,9 +82,15 @@ } } - // 此为单点消息 + + /** + * 单点消息 + * + * @param userId 用户信息 + * @param message 消息体 + */ public void sendOneMessage(String userId, String message) { - System.out.println("【websocket消息】单点消息:" + message); + log.info("【websocket消息】单点消息:" + message); Session session = sessionPool.get(userId); if (session != null) { try { @@ -90,4 +100,5 @@ } } } + } \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java new file mode 100644 index 0000000..26b17ab --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java @@ -0,0 +1,44 @@ +package com.casic.missiles.modular.robot.opt.enums; + +/** + * 指令推送消息定义 + */ +public enum InstructStatusMsgEnums { + /** + * 建图进度推送消息 + */ + PROCESS_MESSAGE("process_message", "建图进度推送消息"), + /** + * + */ + POSE_MESSAGE("pose_message", "实时定位推送消息"); + /** + * 请求地址 + */ + private String msgKey; + /** + * 响应地址 + */ + private String remarks; + + InstructStatusMsgEnums(String msgKey, String remarks) { + this.msgKey = msgKey; + this.remarks = remarks; + } + + public String getMsgKey() { + return msgKey; + } + + public void setMsgKey(String msgKey) { + this.msgKey = msgKey; + } + + public String getRemarks() { + return remarks; + } + + public void setRemarks(String remarks) { + this.remarks = remarks; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/AbstractSocketHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/AbstractSocketHandler.java new file mode 100644 index 0000000..96ef561 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/AbstractSocketHandler.java @@ -0,0 +1,48 @@ +package com.casic.missiles.modular.robot.opt.handler; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.common.WebSocket; +import com.casic.missiles.modular.robot.opt.enums.InstructStatusMsgEnums; +import com.casic.missiles.modular.robot.opt.instruct.base.WsMsgBaseDTO; +import lombok.extern.slf4j.Slf4j; +import org.eclipse.paho.client.mqttv3.MqttMessage; + +import javax.annotation.Resource; + +/** + * websocket 推送消息 + */ +@Slf4j +public abstract class AbstractSocketHandler implements IBaseMsgHandler { + + /** + * websocket 连接 + */ + @Resource + private WebSocket webSocket; + + /** + * websocket 消息推送 + * + * @param enums 推送消息枚举 + * @param robotId 机器人连接 + * @param message 消息集合 + */ + protected void sendWebSocket(InstructStatusMsgEnums enums, String robotId, MqttMessage message) { + + try { + String json = new String(message.getPayload()); + JSONObject jsonObject = JSON.parseObject(json); + if (jsonObject.containsKey("msg")) { + WsMsgBaseDTO wsMsgBaseDTO = new WsMsgBaseDTO(); + wsMsgBaseDTO.setMsgKey(enums.getMsgKey()); + wsMsgBaseDTO.setData((JSONObject) jsonObject.get("msg")); + webSocket.sendOneMessage(robotId, JSON.toJSONString(wsMsgBaseDTO)); + } + } catch (Exception e) { + log.error(e.getMessage()); + } + + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/PoseMessageMsgHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/PoseMessageMsgHandler.java index b389e01..35c5f37 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/PoseMessageMsgHandler.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/PoseMessageMsgHandler.java @@ -1,6 +1,7 @@ package com.casic.missiles.modular.robot.opt.handler.msg; -import com.casic.missiles.modular.robot.opt.handler.IBaseMsgHandler; +import com.casic.missiles.modular.robot.opt.enums.InstructStatusMsgEnums; +import com.casic.missiles.modular.robot.opt.handler.AbstractSocketHandler; import com.casic.missiles.modular.robot.service.IRobotTrajectoryInfoService; import lombok.extern.slf4j.Slf4j; import org.eclipse.paho.client.mqttv3.MqttMessage; @@ -11,7 +12,7 @@ */ @Slf4j @Component("/pose_message") -public class PoseMessageMsgHandler implements IBaseMsgHandler { +public class PoseMessageMsgHandler extends AbstractSocketHandler { private final IRobotTrajectoryInfoService robotTrajectoryInfoService; @@ -21,8 +22,8 @@ @Override public void process(String robotId, String topic, MqttMessage message) { - // {"msg": {"y": -20.73847741021961, "x": -1.958316040901666, "z": 0.4921659690312511, "theta": -2.494841778370823}} log.info("主键:{},实时位置topic:{},消息内容:{}", robotId, topic, message.toString()); robotTrajectoryInfoService.savePoseMessage(robotId, message); + sendWebSocket(InstructStatusMsgEnums.POSE_MESSAGE, robotId, message); } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/ProcessMessageMsgHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/ProcessMessageMsgHandler.java index 702c091..4910f62 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/ProcessMessageMsgHandler.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/ProcessMessageMsgHandler.java @@ -1,6 +1,7 @@ package com.casic.missiles.modular.robot.opt.handler.msg; -import com.casic.missiles.modular.robot.opt.handler.IBaseMsgHandler; +import com.casic.missiles.modular.robot.opt.enums.InstructStatusMsgEnums; +import com.casic.missiles.modular.robot.opt.handler.AbstractSocketHandler; import com.casic.missiles.modular.robot.service.IRobotStatusInfoService; import lombok.extern.slf4j.Slf4j; import org.eclipse.paho.client.mqttv3.MqttMessage; @@ -10,11 +11,11 @@ import java.util.concurrent.ConcurrentHashMap; /** - * 暂停状态实时接收器 + * 发布实时建图进度实时接收器 */ @Slf4j @Component("/process_message") -public class ProcessMessageMsgHandler implements IBaseMsgHandler { +public class ProcessMessageMsgHandler extends AbstractSocketHandler { private final IRobotStatusInfoService statusInfoService; private static Map index = new ConcurrentHashMap<>(); @@ -26,5 +27,6 @@ public void process(String robotId, String topic, MqttMessage message) { log.info("建图进度:{}", message); statusInfoService.saveProcessMessage(robotId, message); + sendWebSocket(InstructStatusMsgEnums.PROCESS_MESSAGE, robotId, message); } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/base/WsMsgBaseDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/base/WsMsgBaseDTO.java new file mode 100644 index 0000000..608af82 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/base/WsMsgBaseDTO.java @@ -0,0 +1,13 @@ +package com.casic.missiles.modular.robot.opt.instruct.base; + +import com.alibaba.fastjson.JSONObject; +import lombok.Data; + +/** + * 消息推送指令传输对象 + */ +@Data +public class WsMsgBaseDTO { + private String msgKey; + private JSONObject data; +}