|
@@ -1,25 +1,26 @@
|
|
|
package com.xunmei.mediator.websocket.handler;
|
|
package com.xunmei.mediator.websocket.handler;
|
|
|
|
|
|
|
|
-import cn.hutool.core.date.DateUtil;
|
|
|
|
|
-import com.alibaba.fastjson.JSON;
|
|
|
|
|
|
|
+import cn.hutool.core.util.ObjectUtil;
|
|
|
|
|
+import com.alibaba.fastjson2.JSON;
|
|
|
import com.xunmei.common.core.domain.iot.domain.IotServerInfo;
|
|
import com.xunmei.common.core.domain.iot.domain.IotServerInfo;
|
|
|
import com.xunmei.common.core.enums.iot.IotServerConnectStatus;
|
|
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.common.core.utils.StringUtils;
|
|
|
-import com.xunmei.common.redis.utils.RedisUtils;
|
|
|
|
|
import com.xunmei.mediator.api.server.service.IotServerInfoService;
|
|
import com.xunmei.mediator.api.server.service.IotServerInfoService;
|
|
|
|
|
+import com.xunmei.mediator.websocket.constant.WebSocketConstants;
|
|
|
import com.xunmei.mediator.websocket.dto.WebsocketResult;
|
|
import com.xunmei.mediator.websocket.dto.WebsocketResult;
|
|
|
import com.xunmei.mediator.websocket.enums.WebsocketStatus;
|
|
import com.xunmei.mediator.websocket.enums.WebsocketStatus;
|
|
|
import com.xunmei.mediator.websocket.holder.WebSocketSessionHolder;
|
|
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.mediator.websocket.utils.WebSocketUtils;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
-import org.redisson.api.RedissonClient;
|
|
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Component;
|
|
import org.springframework.stereotype.Component;
|
|
|
import org.springframework.web.socket.*;
|
|
import org.springframework.web.socket.*;
|
|
|
import org.springframework.web.socket.handler.AbstractWebSocketHandler;
|
|
import org.springframework.web.socket.handler.AbstractWebSocketHandler;
|
|
|
|
|
|
|
|
import java.io.IOException;
|
|
import java.io.IOException;
|
|
|
-import java.time.Duration;
|
|
|
|
|
import java.time.LocalDateTime;
|
|
import java.time.LocalDateTime;
|
|
|
import java.util.Date;
|
|
import java.util.Date;
|
|
|
import java.util.HashMap;
|
|
import java.util.HashMap;
|
|
@@ -57,7 +58,7 @@ public class SocWebSocketHandler extends AbstractWebSocketHandler {
|
|
|
map.put("statusCode",WebsocketStatus.SUCCESS.getStatusCode());
|
|
map.put("statusCode",WebsocketStatus.SUCCESS.getStatusCode());
|
|
|
}
|
|
}
|
|
|
WebsocketResult register = createWebsocketResult(null, "register" , map);
|
|
WebsocketResult register = createWebsocketResult(null, "register" , map);
|
|
|
- WebSocketUtils.sendMessage(session, JSON.toJSONString(register));
|
|
|
|
|
|
|
+ WebSocketUtils.sendMessage(session, JacksonUtils.toJSONString(register));
|
|
|
log.info("[建立注册连接] sessionId: {},registerCode:{}", session.getId(), registerCode);
|
|
log.info("[建立注册连接] sessionId: {},registerCode:{}", session.getId(), registerCode);
|
|
|
session.close();
|
|
session.close();
|
|
|
return;
|
|
return;
|
|
@@ -74,7 +75,7 @@ public class SocWebSocketHandler extends AbstractWebSocketHandler {
|
|
|
Map<String,Object> map = new HashMap<>();
|
|
Map<String,Object> map = new HashMap<>();
|
|
|
map.put("statusCode",WebsocketStatus.SUCCESS.getStatusCode());
|
|
map.put("statusCode",WebsocketStatus.SUCCESS.getStatusCode());
|
|
|
WebsocketResult result = createWebsocketResult(null, "login" , map);
|
|
WebsocketResult result = createWebsocketResult(null, "login" , map);
|
|
|
- WebSocketUtils.sendMessage(session, JSON.toJSONString(result));
|
|
|
|
|
|
|
+ WebSocketUtils.sendMessage(session, JacksonUtils.toJSONString(result));
|
|
|
log.info("[建立连接] sessionId: {},token:{}", session.getId(), token);
|
|
log.info("[建立连接] sessionId: {},token:{}", session.getId(), token);
|
|
|
return;
|
|
return;
|
|
|
}
|
|
}
|
|
@@ -86,7 +87,7 @@ public class SocWebSocketHandler extends AbstractWebSocketHandler {
|
|
|
result.setId(id);
|
|
result.setId(id);
|
|
|
result.setTopic(topic);
|
|
result.setTopic(topic);
|
|
|
//当前时间转换为 格式:2024-07-02T14:17:32
|
|
//当前时间转换为 格式:2024-07-02T14:17:32
|
|
|
- result.setTimestamp(DateUtil.format(new Date(),"yyyy-MM-dd'T'HH:mm:ss"));
|
|
|
|
|
|
|
+ result.setTimestamp(new Date());
|
|
|
result.setPayload(object);
|
|
result.setPayload(object);
|
|
|
return result;
|
|
return result;
|
|
|
}
|
|
}
|
|
@@ -102,7 +103,31 @@ public class SocWebSocketHandler extends AbstractWebSocketHandler {
|
|
|
protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
|
|
protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
|
|
|
// 从WebSocket会话中获取登录用户信息
|
|
// 从WebSocket会话中获取登录用户信息
|
|
|
WebSocketSessionHolder.updateToken(session);
|
|
WebSocketSessionHolder.updateToken(session);
|
|
|
|
|
+ String payload = message.getPayload();
|
|
|
log.info("接收到消息:{}",message.getPayload());
|
|
log.info("接收到消息:{}",message.getPayload());
|
|
|
|
|
+ if (payload.isEmpty()){
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+ try {
|
|
|
|
|
+ WebsocketResult websocketResult = JSON.parseObject(payload, WebsocketResult.class);
|
|
|
|
|
+ Object obj = websocketResult.getPayload();
|
|
|
|
|
+ if (ObjectUtil.isNotEmpty(obj)){
|
|
|
|
|
+ Map map = JSON.parseObject(obj.toString(), Map.class);
|
|
|
|
|
+ String key = (String) map.get(WebSocketConstants.EVENT);
|
|
|
|
|
+ String args = (String) map.get(WebSocketConstants.ARGS);
|
|
|
|
|
+ if (ObjectUtil.hasEmpty(key,args)){
|
|
|
|
|
+ log.error("消息内容格式错误:{}",message.getPayload());
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+ RouterService routeService = RouterServiceHandler.getRouteService(key);
|
|
|
|
|
+ routeService.execute(args);
|
|
|
|
|
+
|
|
|
|
|
+ }
|
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
|
+ log.error("转换消息内容时出错:{}",e);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
/**
|