|
@@ -25,10 +25,12 @@ 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.net.InetSocketAddress;
|
|
|
import java.time.LocalDateTime;
|
|
import java.time.LocalDateTime;
|
|
|
import java.util.Date;
|
|
import java.util.Date;
|
|
|
import java.util.HashMap;
|
|
import java.util.HashMap;
|
|
|
import java.util.Map;
|
|
import java.util.Map;
|
|
|
|
|
+import java.util.Optional;
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
* @author gaoxiong
|
|
* @author gaoxiong
|
|
@@ -74,6 +76,8 @@ public class SocWebSocketHandler extends AbstractWebSocketHandler {
|
|
|
String token = (String) session.getAttributes().get("token");
|
|
String token = (String) session.getAttributes().get("token");
|
|
|
if (StringUtils.isNotEmpty(token)) {
|
|
if (StringUtils.isNotEmpty(token)) {
|
|
|
IotServerInfo serverInfo = iotServerInfoService.selectByToken(token);
|
|
IotServerInfo serverInfo = iotServerInfoService.selectByToken(token);
|
|
|
|
|
+ InetSocketAddress remoteAddress = session.getRemoteAddress();
|
|
|
|
|
+ Optional.ofNullable(remoteAddress).ifPresent(address -> serverInfo.setIotIp(address.getAddress().getHostAddress()));
|
|
|
serverInfo.setRegisterCodeStatus(1);
|
|
serverInfo.setRegisterCodeStatus(1);
|
|
|
serverInfo.setLastConnectTime(LocalDateTime.now());
|
|
serverInfo.setLastConnectTime(LocalDateTime.now());
|
|
|
serverInfo.setIotStatus(IotServerConnectStatus.CONNECTED.getIdx());
|
|
serverInfo.setIotStatus(IotServerConnectStatus.CONNECTED.getIdx());
|
|
@@ -107,42 +111,6 @@ public class SocWebSocketHandler extends AbstractWebSocketHandler {
|
|
|
* @throws Exception 处理消息过程中可能抛出的异常
|
|
* @throws Exception 处理消息过程中可能抛出的异常
|
|
|
*/
|
|
*/
|
|
|
@Override
|
|
@Override
|
|
|
- /* protected void handleTextMessage(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();
|
|
|
|
|
- if (ObjectUtil.isNotEmpty(obj)){
|
|
|
|
|
- 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;
|
|
|
|
|
- }
|
|
|
|
|
- RouterService routeService = RouterServiceHandler.getRouteService(routingKey);
|
|
|
|
|
- routeService.execute(new WebsocketExecuteReq(event, args,token));
|
|
|
|
|
- //todo 返回iot消息
|
|
|
|
|
- }
|
|
|
|
|
- } catch (Exception e) {
|
|
|
|
|
- log.error("转换消息内容时出错:{}",e);
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
- }*/
|
|
|
|
|
-
|
|
|
|
|
protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
|
|
protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
|
|
|
// 从WebSocket会话中获取登录用户信息
|
|
// 从WebSocket会话中获取登录用户信息
|
|
|
String token = WebSocketSessionHolder.updateToken(session);
|
|
String token = WebSocketSessionHolder.updateToken(session);
|
|
@@ -165,7 +133,7 @@ public class SocWebSocketHandler extends AbstractWebSocketHandler {
|
|
|
LogUtils.WEBSOCKET_MSG.error("消息topic错误,topic:{}", topic);
|
|
LogUtils.WEBSOCKET_MSG.error("消息topic错误,topic:{}", topic);
|
|
|
return;
|
|
return;
|
|
|
}
|
|
}
|
|
|
- WebsocketPayloadResolve payloadResolve = new WebsocketPayloadResolve(websocketResult, typeEnums);
|
|
|
|
|
|
|
+ WebsocketPayloadResolve payloadResolve = new WebsocketPayloadResolve(websocketResult);
|
|
|
//上报消息内容
|
|
//上报消息内容
|
|
|
final Object args = payloadResolve.getData();
|
|
final Object args = payloadResolve.getData();
|
|
|
WebsocketExecuteReq executeReq = new WebsocketExecuteReq(payloadResolve.getRoutingKey(), args, token, websocketResult.getId(), topic, payloadResolve.getHeader(), typeEnums.getProductName(), typeEnums.getDeviceName());
|
|
WebsocketExecuteReq executeReq = new WebsocketExecuteReq(payloadResolve.getRoutingKey(), args, token, websocketResult.getId(), topic, payloadResolve.getHeader(), typeEnums.getProductName(), typeEnums.getDeviceName());
|