|
@@ -2,19 +2,25 @@ package com.xunmei.mediator.websocket.handler;
|
|
|
|
|
|
|
|
import cn.hutool.core.date.DateUtil;
|
|
import cn.hutool.core.date.DateUtil;
|
|
|
import com.alibaba.fastjson.JSON;
|
|
import com.alibaba.fastjson.JSON;
|
|
|
|
|
+import com.xunmei.common.core.domain.iot.domain.IotServerInfo;
|
|
|
|
|
+import com.xunmei.common.core.enums.iot.IotServerConnectStatus;
|
|
|
import com.xunmei.common.core.utils.StringUtils;
|
|
import com.xunmei.common.core.utils.StringUtils;
|
|
|
import com.xunmei.common.redis.utils.RedisUtils;
|
|
import com.xunmei.common.redis.utils.RedisUtils;
|
|
|
|
|
+import com.xunmei.mediator.api.server.service.IotServerInfoService;
|
|
|
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.holder.WebSocketSessionHolder;
|
|
import com.xunmei.mediator.websocket.holder.WebSocketSessionHolder;
|
|
|
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.redisson.api.RedissonClient;
|
|
|
|
|
+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.Duration;
|
|
|
|
|
+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;
|
|
@@ -29,6 +35,10 @@ import java.util.Map;
|
|
|
@Slf4j
|
|
@Slf4j
|
|
|
@Component
|
|
@Component
|
|
|
public class SocWebSocketHandler extends AbstractWebSocketHandler {
|
|
public class SocWebSocketHandler extends AbstractWebSocketHandler {
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ @Autowired
|
|
|
|
|
+ private IotServerInfoService iotServerInfoService;
|
|
|
/**
|
|
/**
|
|
|
* 连接成功后
|
|
* 连接成功后
|
|
|
*/
|
|
*/
|
|
@@ -38,8 +48,14 @@ public class SocWebSocketHandler extends AbstractWebSocketHandler {
|
|
|
String registerCode = (String) session.getAttributes().get("registerCode");
|
|
String registerCode = (String) session.getAttributes().get("registerCode");
|
|
|
if (registerCode != null) {
|
|
if (registerCode != null) {
|
|
|
Map<String,Object> map = new HashMap<>();
|
|
Map<String,Object> map = new HashMap<>();
|
|
|
- map.put("token","kkjkkjjiikkjkjkj");
|
|
|
|
|
- map.put("statusCode",200);
|
|
|
|
|
|
|
+ IotServerInfo serverInfo = iotServerInfoService.getToken(registerCode);
|
|
|
|
|
+ if(serverInfo == null){
|
|
|
|
|
+ map.put("statusDescription", WebsocketStatus.CLOSED.getStatusDescription());
|
|
|
|
|
+ map.put("statusCode", WebsocketStatus.CLOSED.getStatusCode());
|
|
|
|
|
+ }else{
|
|
|
|
|
+ map.put("statusDescription",serverInfo.getIotCode());
|
|
|
|
|
+ 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, JSON.toJSONString(register));
|
|
|
log.info("[建立注册连接] sessionId: {},registerCode:{}", session.getId(), registerCode);
|
|
log.info("[建立注册连接] sessionId: {},registerCode:{}", session.getId(), registerCode);
|
|
@@ -49,9 +65,14 @@ 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);
|
|
|
|
|
+ serverInfo.setRegisterCodeStatus(1);
|
|
|
|
|
+ serverInfo.setLastConnectTime(LocalDateTime.now());
|
|
|
|
|
+ serverInfo.setIotStatus(IotServerConnectStatus.CONNECTED.getIdx());
|
|
|
|
|
+ iotServerInfoService.updateByToken(serverInfo);
|
|
|
WebSocketSessionHolder.addSession(token, session);
|
|
WebSocketSessionHolder.addSession(token, session);
|
|
|
Map<String,Object> map = new HashMap<>();
|
|
Map<String,Object> map = new HashMap<>();
|
|
|
- map.put("statusCode",200);
|
|
|
|
|
|
|
+ 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, JSON.toJSONString(result));
|
|
|
log.info("[建立连接] sessionId: {},token:{}", session.getId(), token);
|
|
log.info("[建立连接] sessionId: {},token:{}", session.getId(), token);
|
|
@@ -65,7 +86,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 HH:mm:ss"));
|
|
|
|
|
|
|
+ result.setTimestamp(DateUtil.format(new Date(),"yyyy-MM-dd'T'HH:mm:ss"));
|
|
|
result.setPayload(object);
|
|
result.setPayload(object);
|
|
|
return result;
|
|
return result;
|
|
|
}
|
|
}
|
|
@@ -93,8 +114,7 @@ public class SocWebSocketHandler extends AbstractWebSocketHandler {
|
|
|
*/
|
|
*/
|
|
|
@Override
|
|
@Override
|
|
|
protected void handleBinaryMessage(WebSocketSession session, BinaryMessage message) throws Exception {
|
|
protected void handleBinaryMessage(WebSocketSession session, BinaryMessage message) throws Exception {
|
|
|
- WebSocketSessionHolder.updateToken(session);
|
|
|
|
|
-
|
|
|
|
|
|
|
+ String token = WebSocketSessionHolder.updateToken(session);
|
|
|
super.handleBinaryMessage(session, message);
|
|
super.handleBinaryMessage(session, message);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -107,8 +127,7 @@ public class SocWebSocketHandler extends AbstractWebSocketHandler {
|
|
|
*/
|
|
*/
|
|
|
@Override
|
|
@Override
|
|
|
protected void handlePongMessage(WebSocketSession session, PongMessage message) throws Exception {
|
|
protected void handlePongMessage(WebSocketSession session, PongMessage message) throws Exception {
|
|
|
- WebSocketSessionHolder.updateToken(session);
|
|
|
|
|
-
|
|
|
|
|
|
|
+ String token = WebSocketSessionHolder.updateToken(session);
|
|
|
WebSocketUtils.sendPongMessage(session);
|
|
WebSocketUtils.sendPongMessage(session);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -122,7 +141,6 @@ public class SocWebSocketHandler extends AbstractWebSocketHandler {
|
|
|
@Override
|
|
@Override
|
|
|
public void handleTransportError(WebSocketSession session, Throwable exception) throws Exception {
|
|
public void handleTransportError(WebSocketSession session, Throwable exception) throws Exception {
|
|
|
WebSocketSessionHolder.updateToken(session);
|
|
WebSocketSessionHolder.updateToken(session);
|
|
|
-
|
|
|
|
|
log.error("[传输错误] sessionId: {} , exception:{}", session.getId(), exception.getMessage());
|
|
log.error("[传输错误] sessionId: {} , exception:{}", session.getId(), exception.getMessage());
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -136,6 +154,11 @@ public class SocWebSocketHandler extends AbstractWebSocketHandler {
|
|
|
public void afterConnectionClosed(WebSocketSession session, CloseStatus status) {
|
|
public void afterConnectionClosed(WebSocketSession session, CloseStatus status) {
|
|
|
String token = (String) session.getAttributes().get("token");
|
|
String token = (String) session.getAttributes().get("token");
|
|
|
WebSocketSessionHolder.removeSession(token);
|
|
WebSocketSessionHolder.removeSession(token);
|
|
|
|
|
+ if(StringUtils.isNotEmpty(token)){
|
|
|
|
|
+ IotServerInfo serverInfo = iotServerInfoService.selectByToken(token);
|
|
|
|
|
+ serverInfo.setIotStatus(IotServerConnectStatus.OFFLINE.getIdx());
|
|
|
|
|
+ iotServerInfoService.updateByToken(serverInfo);
|
|
|
|
|
+ }
|
|
|
log.info("[断开连接] sessionId: {},token:{}",session.getId(),token);
|
|
log.info("[断开连接] sessionId: {},token:{}",session.getId(),token);
|
|
|
}
|
|
}
|
|
|
|
|
|