|
|
@@ -8,8 +8,9 @@ import com.xunmei.common.core.enums.iot.IotServerConnectStatus;
|
|
|
import com.xunmei.common.core.utils.JacksonUtils;
|
|
|
import com.xunmei.common.core.utils.StringUtils;
|
|
|
import com.xunmei.mediator.api.server.service.IotServerInfoService;
|
|
|
-import com.xunmei.mediator.websocket.constant.WebSocketConstants;
|
|
|
+import com.xunmei.mediator.iot.service.IotDeviceStatusService;
|
|
|
import com.xunmei.mediator.websocket.dto.WebsocketExecuteReq;
|
|
|
+import com.xunmei.mediator.websocket.dto.WebsocketPayloadResolve;
|
|
|
import com.xunmei.mediator.websocket.dto.WebsocketResult;
|
|
|
import com.xunmei.mediator.websocket.enums.TopicTypeEnums;
|
|
|
import com.xunmei.mediator.websocket.enums.WebsocketStatus;
|
|
|
@@ -17,7 +18,6 @@ import com.xunmei.mediator.websocket.holder.WebSocketSessionHolder;
|
|
|
import com.xunmei.mediator.websocket.service.RouterService;
|
|
|
import com.xunmei.mediator.websocket.service.RouterServiceHandler;
|
|
|
import com.xunmei.mediator.websocket.utils.WebSocketUtils;
|
|
|
-import com.xunmei.system.api.dto.protection.ReceiveErrorDto;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Component;
|
|
|
@@ -44,6 +44,8 @@ public class SocWebSocketHandler extends AbstractWebSocketHandler {
|
|
|
|
|
|
@Autowired
|
|
|
private IotServerInfoService iotServerInfoService;
|
|
|
+ @Autowired
|
|
|
+ private IotDeviceStatusService iotDeviceStatusService;
|
|
|
|
|
|
/**
|
|
|
* 连接成功后
|
|
|
@@ -146,58 +148,50 @@ public class SocWebSocketHandler extends AbstractWebSocketHandler {
|
|
|
String token = WebSocketSessionHolder.updateToken(session);
|
|
|
String payload = message.getPayload();
|
|
|
log.info("接收到消息:{}", message.getPayload());
|
|
|
-
|
|
|
if (payload.isEmpty()) {
|
|
|
+ log.error("消息内容为空,token:{}", token);
|
|
|
return;
|
|
|
}
|
|
|
try {
|
|
|
WebsocketResult websocketResult = JSON.parseObject(payload, WebsocketResult.class);
|
|
|
Object obj = websocketResult.getPayload();
|
|
|
String topic = websocketResult.getTopic();
|
|
|
- if (ObjectUtil.isNotEmpty(obj)) {
|
|
|
-
|
|
|
- TopicTypeEnums typeEnums = TopicTypeEnums.matcherTopicTypeEnums(topic);
|
|
|
- if (typeEnums == null) {
|
|
|
- log.error("消息topic错误:{}", topic);
|
|
|
- return;
|
|
|
- }
|
|
|
- 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 routingKey = ObjectUtil.isNotEmpty(event) ? event : service;
|
|
|
-
|
|
|
- //上报消息内容
|
|
|
- JSONObject args = (JSONObject) (ObjectUtil.isNotEmpty(map.get(WebSocketConstants.DATA)) ? map.get(WebSocketConstants.DATA) : map.get(WebSocketConstants.ARGS));
|
|
|
- if (ObjectUtil.isEmpty(event) || args == null) {
|
|
|
- log.error("消息内容为空:{}", message.getPayload());
|
|
|
- return;
|
|
|
- }
|
|
|
- switch (typeEnums) {
|
|
|
- //系统通知
|
|
|
- case SYS_NOTICE:
|
|
|
- break;
|
|
|
- //设备状态通知
|
|
|
- case DEVICE_STATUS:
|
|
|
- break;
|
|
|
- //产品事件通知消息
|
|
|
- case PRODUCT_EVENT_NOTICE:
|
|
|
- //IoT返回服务调用消息
|
|
|
- case PRODUCT_SERVICE_REPLY:
|
|
|
- RouterService routeService = RouterServiceHandler.getRouteService(typeEnums.getProductName(), routingKey);
|
|
|
- WebsocketResult result = (WebsocketResult) routeService.execute(new WebsocketExecuteReq(event, args, token, websocketResult.getId(),topic, typeEnums.getProductName(), typeEnums.getDeviceName()));
|
|
|
- WebSocketUtils.sendMessage(session,result);
|
|
|
- /* DvsBaseInfo javaObject = JSON.toJavaObject(args, DvsBaseInfo.class);
|
|
|
- websocketService.dealDvsBaseInfo(javaObject, token);*/
|
|
|
- break;
|
|
|
- //IoT返回属性
|
|
|
- case PRODUCT_PROPERTY_GET_REPLY:
|
|
|
- break;
|
|
|
- default:
|
|
|
- break;
|
|
|
- }
|
|
|
+ if (ObjectUtil.isEmpty(obj)) {
|
|
|
+ log.error("消息内容为空,topic:{}", topic);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ TopicTypeEnums typeEnums = TopicTypeEnums.matcherTopicTypeEnums(topic);
|
|
|
+ if (typeEnums == null) {
|
|
|
+ log.error("消息topic错误,topic:{}", topic);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ WebsocketPayloadResolve payloadResolve = new WebsocketPayloadResolve(websocketResult);
|
|
|
+ //上报消息内容
|
|
|
+ final Object args = payloadResolve.getData();
|
|
|
+ WebsocketExecuteReq executeReq = new WebsocketExecuteReq(payloadResolve.getRoutingKey(), args, token, websocketResult.getId(), topic, payloadResolve.getHeader(), typeEnums.getProductName(), typeEnums.getDeviceName());
|
|
|
+ WebsocketResult result = null;
|
|
|
+ switch (typeEnums) {
|
|
|
+ //系统通知
|
|
|
+ case SYS_NOTICE:
|
|
|
+ break;
|
|
|
+ //设备状态通知
|
|
|
+ case DEVICE_STATUS:
|
|
|
+ break;
|
|
|
+ //产品事件通知消息
|
|
|
+ case PRODUCT_EVENT_NOTICE:
|
|
|
+ //IoT返回服务调用消息
|
|
|
+ case PRODUCT_SERVICE_REPLY:
|
|
|
+ RouterService routeService = RouterServiceHandler.getRouteService(typeEnums.getProductName(), payloadResolve.getRoutingKey());
|
|
|
+ result = (WebsocketResult) routeService.execute(executeReq);
|
|
|
+ break;
|
|
|
+ //IoT上报属性变化
|
|
|
+ case PRODUCT_PROPERTY_POST:
|
|
|
+ result = iotDeviceStatusService.dealDeviceStatusChange(executeReq);
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ break;
|
|
|
}
|
|
|
+ WebSocketUtils.sendMessage(session, result);
|
|
|
} catch (Exception e) {
|
|
|
log.error("转换消息内容时出错:{}", e);
|
|
|
}
|