|
|
@@ -0,0 +1,86 @@
|
|
|
+package cn.reghao.bnt.web.ws.handler;
|
|
|
+
|
|
|
+import cn.reghao.bnt.web.ws.WsSender;
|
|
|
+import cn.reghao.jutil.jdk.serializer.JdkSerializer;
|
|
|
+import cn.reghao.jutil.jdk.serializer.JsonConverter;
|
|
|
+import com.google.gson.JsonObject;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
+import org.springframework.stereotype.Component;
|
|
|
+import org.springframework.web.socket.*;
|
|
|
+
|
|
|
+import java.io.IOException;
|
|
|
+import java.util.*;
|
|
|
+
|
|
|
+/**
|
|
|
+ * @author reghao
|
|
|
+ * @date 2025-12-16 17:08:19
|
|
|
+ */
|
|
|
+@Slf4j
|
|
|
+@Component("frontendHander")
|
|
|
+public class FrontendHandler implements WebSocketHandler {
|
|
|
+ private WsSender wsSender;
|
|
|
+
|
|
|
+ public FrontendHandler(WsSender wsSender) {
|
|
|
+ this.wsSender = wsSender;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void afterConnectionEstablished(WebSocketSession webSocketSession) throws IOException {
|
|
|
+ String sessionId = webSocketSession.getId();
|
|
|
+ String query = webSocketSession.getUri().getQuery();
|
|
|
+ log.info("WebSocket 建立连接");
|
|
|
+ }
|
|
|
+
|
|
|
+ private void removeSession(WebSocketSession webSocketSession) {
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void handleMessage(WebSocketSession webSocketSession, WebSocketMessage<?> webSocketMessage)
|
|
|
+ throws IOException {
|
|
|
+ try {
|
|
|
+ if (webSocketMessage instanceof TextMessage) {
|
|
|
+ log.info("接收到 WebSocket 文本消息");
|
|
|
+ String jsonPayload = (String) webSocketMessage.getPayload();
|
|
|
+ JsonObject jsonObject = JsonConverter.jsonToJsonElement(jsonPayload).getAsJsonObject();
|
|
|
+ String machineId = jsonObject.get("machineId").getAsString();
|
|
|
+
|
|
|
+ wsSender.send(machineId, new Object());
|
|
|
+ List<String> list = new ArrayList<>();
|
|
|
+ list.add("aaa");
|
|
|
+ list.add("bbb");
|
|
|
+ Map<String, Object> map = new HashMap<>();
|
|
|
+ map.put("type", "1");
|
|
|
+ map.put("result", list);
|
|
|
+ TextMessage textMessage = new TextMessage(JsonConverter.objectToJson(map));
|
|
|
+ webSocketSession.sendMessage(textMessage);
|
|
|
+ } else if (webSocketMessage instanceof BinaryMessage) {
|
|
|
+ log.info("接收到 WebSocket 二进制消息");
|
|
|
+ } else if (webSocketMessage instanceof PingMessage) {
|
|
|
+ log.info("接收到 WebSocket PingMessage");
|
|
|
+ } else if (webSocketMessage instanceof PongMessage) {
|
|
|
+ log.info("接收到 WebSocket PongMessage");
|
|
|
+ } else {
|
|
|
+ log.error("接收到未知类型的 WebSocket 消息");
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void handleTransportError(WebSocketSession webSocketSession, Throwable throwable) {
|
|
|
+ log.error("WebSocket 数据传输错误");
|
|
|
+ removeSession(webSocketSession);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void afterConnectionClosed(WebSocketSession webSocketSession, CloseStatus closeStatus) {
|
|
|
+ log.info("WebSocket 断开连接");
|
|
|
+ removeSession(webSocketSession);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public boolean supportsPartialMessages() {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+}
|