|
|
@@ -11,6 +11,7 @@ import com.xunmei.mediator.api.server.service.IotServerInfoService;
|
|
|
import com.xunmei.mediator.websocket.constant.WebSocketConstants;
|
|
|
import com.xunmei.mediator.websocket.dto.WebsocketExecuteReq;
|
|
|
import com.xunmei.mediator.websocket.dto.WebsocketResult;
|
|
|
+import com.xunmei.mediator.websocket.enums.TopicTypeEnums;
|
|
|
import com.xunmei.mediator.websocket.enums.WebsocketStatus;
|
|
|
import com.xunmei.mediator.websocket.holder.WebSocketSessionHolder;
|
|
|
import com.xunmei.mediator.websocket.service.RouterService;
|
|
|
@@ -138,6 +139,64 @@ public class SocWebSocketHandler extends AbstractWebSocketHandler {
|
|
|
|
|
|
}
|
|
|
|
|
|
+ public void handleTextMessage1(WebSocketSession session, TextMessage message) throws Exception {
|
|
|
+ // 从WebSocket会话中获取登录用户信息
|
|
|
+ WebSocketSessionHolder.updateToken(session);
|
|
|
+ String payload = message.getPayload();
|
|
|
+ log.info("接收到消息:{}",message.getPayload());
|
|
|
+
|
|
|
+ if (payload.isEmpty()){
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ try {
|
|
|
+ WebsocketResult websocketResult = JSON.parseObject(payload, WebsocketResult.class);
|
|
|
+ Object obj = websocketResult.getPayload();
|
|
|
+ String topic = websocketResult.getTopic();
|
|
|
+ if (ObjectUtil.isNotEmpty(obj)){
|
|
|
+ if (ObjectUtil.isNotEmpty(obj)){
|
|
|
+
|
|
|
+ TopicTypeEnums typeEnums = TopicTypeEnums.matcherTopicTypeEnums(topic);
|
|
|
+ if (typeEnums == null){
|
|
|
+ log.error("消息topic错误:{}",topic);
|
|
|
+ }
|
|
|
+ Map map = JSON.parseObject(obj.toString(), Map.class);
|
|
|
+ //上报事件
|
|
|
+ String event = (String) map.get(WebSocketConstants.EVENT);
|
|
|
+ String service = (String) map.get(WebSocketConstants.SERVICE);
|
|
|
+ String trigger = (String) map.get(WebSocketConstants.TRIGGER);
|
|
|
+ String token = WebSocketSessionHolder.getSessionKey(session);
|
|
|
+ String routingKey=ObjectUtil.isNotEmpty(event) ? event : service;
|
|
|
+ //上报消息内容
|
|
|
+ JSONObject args = (JSONObject) map.get(WebSocketConstants.ARGS);
|
|
|
+ if (ObjectUtil.isEmpty(event)||args.isEmpty()){
|
|
|
+ log.error("消息内容为空:{}",message.getPayload());
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ switch (typeEnums) {
|
|
|
+ case SYS_NOTICE:
|
|
|
+ break;
|
|
|
+ case DEVICE_STATUS:
|
|
|
+ break;
|
|
|
+ case PRODUCT_EVENT_NOTICE:
|
|
|
+ break;
|
|
|
+ case PRODUCT_SERVICE_REPLY:
|
|
|
+ break;
|
|
|
+ case PRODUCT_PROPERTY_REPLY:
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ RouterService routeService = RouterServiceHandler.getRouteService(typeEnums.getProductName(),routingKey);
|
|
|
+ routeService.execute(new WebsocketExecuteReq(event, args,token));
|
|
|
+ //todo 返回iot消息
|
|
|
+ }}
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("转换消息内容时出错:{}",e);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 处理接收到的二进制消息
|
|
|
*
|