From 6a03569f3cef075bea8cf148f9fa505c1e13ea63 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=99=BD=E5=87=A4=E5=90=89?= Date: Wed, 12 Feb 2025 21:00:53 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BD=BF=E7=94=A8=E5=8E=9F=E7=94=9Fws?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 1 + .../java/com/qyft/gd/config/WebSocketConfig.java | 14 ++++++ src/main/java/com/qyft/gd/service/CMDService.java | 2 + .../java/com/qyft/gd/service/WebSocketServer.java | 51 ++++++++++++++++++++++ 4 files changed, 68 insertions(+) create mode 100644 src/main/java/com/qyft/gd/config/WebSocketConfig.java create mode 100644 src/main/java/com/qyft/gd/service/WebSocketServer.java diff --git a/build.gradle b/build.gradle index 7d93c8b..6a061e2 100644 --- a/build.gradle +++ b/build.gradle @@ -38,6 +38,7 @@ dependencies { runtimeOnly group: 'io.jsonwebtoken', name: 'jjwt-impl', version: '0.12.6' runtimeOnly group: 'io.jsonwebtoken', name: 'jjwt-jackson', version: '0.12.6' implementation group: 'com.alibaba', name: 'fastjson', version: '2.0.54' + implementation group: 'org.springframework.boot', name: 'spring-boot-starter-websocket', version: '3.4.2' implementation group: 'io.netty', name: 'netty-all', version: '4.1.117.Final' //++++++++项目级别的放到下面++++++++ diff --git a/src/main/java/com/qyft/gd/config/WebSocketConfig.java b/src/main/java/com/qyft/gd/config/WebSocketConfig.java new file mode 100644 index 0000000..f3ea3b3 --- /dev/null +++ b/src/main/java/com/qyft/gd/config/WebSocketConfig.java @@ -0,0 +1,14 @@ +package com.qyft.gd.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.socket.server.standard.ServerEndpointExporter; + +@Configuration +public class WebSocketConfig { + + @Bean + public ServerEndpointExporter serverEndpointExporter() { + return new ServerEndpointExporter(); + } +} diff --git a/src/main/java/com/qyft/gd/service/CMDService.java b/src/main/java/com/qyft/gd/service/CMDService.java index ac06908..9722ad4 100644 --- a/src/main/java/com/qyft/gd/service/CMDService.java +++ b/src/main/java/com/qyft/gd/service/CMDService.java @@ -1,5 +1,6 @@ package com.qyft.gd.service; +import cn.hutool.json.JSONUtil; import com.qyft.gd.common.constant.Commands; import com.qyft.gd.common.result.CMDResultCode; import com.qyft.gd.device.service.DeviceService; @@ -32,6 +33,7 @@ public class CMDService { executionResult.setCommandId(cmdForm.getCommandId()); executionResult.setStatus(CMDResultCode.SUCCESS.getCode()); executionResult.setMessage(CMDResultCode.SUCCESS.getMsg()); + WebSocketServer.sendMessageToClients(JSONUtil.toJsonStr(executionResult)); } } diff --git a/src/main/java/com/qyft/gd/service/WebSocketServer.java b/src/main/java/com/qyft/gd/service/WebSocketServer.java new file mode 100644 index 0000000..264d63d --- /dev/null +++ b/src/main/java/com/qyft/gd/service/WebSocketServer.java @@ -0,0 +1,51 @@ +package com.qyft.gd.service; + + +import jakarta.websocket.*; +import jakarta.websocket.server.ServerEndpoint; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +import java.util.Collections; +import java.util.HashSet; +import java.util.Set; + +@ServerEndpoint("/ws") +@Component +public class WebSocketServer { + + private static final Logger log = LoggerFactory.getLogger(WebSocketServer.class); + + private static final Set sessions = Collections.synchronizedSet(new HashSet<>()); + + @OnOpen + public void onOpen(Session session) { + sessions.add(session); + } + + @OnMessage + public void onMessage(String message, Session session) { + } + + @OnClose + public void onClose(Session session) { + sessions.remove(session); // 移除关闭连接的 Session + } + + @OnError + public void onError(Throwable error) { + } + + public static void sendMessageToClients(String message) { + synchronized (sessions) { + for (Session session : sessions) { + try { + session.getBasicRemote().sendText(message); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + } +}