From cb62242107c8bcfb9e41d2226c1878d83a67cc88 Mon Sep 17 00:00:00 2001 From: guoapeng Date: Thu, 13 Feb 2025 11:54:03 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E6=9B=B4=E6=94=B9socket=E6=8E=A8?= =?UTF-8?q?=E9=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/qyft/gd/common/result/CMDResultCode.java | 2 +- .../java/com/qyft/gd/config/WebSocketServer.java | 51 ++++++++++++++++++++++ .../controller/directive/DirectiveController.java | 36 --------------- .../qyft/gd/model/dto/directive/DirectiveDto.java | 16 ------- .../java/com/qyft/gd/model/vo/WebsocketResult.java | 15 +++++++ src/main/java/com/qyft/gd/service/CMDService.java | 9 +++- .../java/com/qyft/gd/service/DirectiveService.java | 9 ---- .../java/com/qyft/gd/service/WebSocketServer.java | 51 ---------------------- .../qyft/gd/service/impl/DirectiveServiceImpl.java | 18 -------- 9 files changed, 75 insertions(+), 132 deletions(-) create mode 100644 src/main/java/com/qyft/gd/config/WebSocketServer.java delete mode 100644 src/main/java/com/qyft/gd/controller/directive/DirectiveController.java delete mode 100644 src/main/java/com/qyft/gd/model/dto/directive/DirectiveDto.java create mode 100644 src/main/java/com/qyft/gd/model/vo/WebsocketResult.java delete mode 100644 src/main/java/com/qyft/gd/service/DirectiveService.java delete mode 100644 src/main/java/com/qyft/gd/service/WebSocketServer.java delete mode 100644 src/main/java/com/qyft/gd/service/impl/DirectiveServiceImpl.java diff --git a/src/main/java/com/qyft/gd/common/result/CMDResultCode.java b/src/main/java/com/qyft/gd/common/result/CMDResultCode.java index b2294f8..624d224 100644 --- a/src/main/java/com/qyft/gd/common/result/CMDResultCode.java +++ b/src/main/java/com/qyft/gd/common/result/CMDResultCode.java @@ -10,7 +10,7 @@ import java.io.Serializable; @NoArgsConstructor public enum CMDResultCode implements IResultCode, Serializable { SUCCESS("D0000", "执行完毕"), - FAILURE("D0000", "执行失败"); + FAILURE("D1111", "执行失败"); @Override public String getCode() { diff --git a/src/main/java/com/qyft/gd/config/WebSocketServer.java b/src/main/java/com/qyft/gd/config/WebSocketServer.java new file mode 100644 index 0000000..83626b8 --- /dev/null +++ b/src/main/java/com/qyft/gd/config/WebSocketServer.java @@ -0,0 +1,51 @@ +package com.qyft.gd.config; + + +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(); + } + } + } + } +} diff --git a/src/main/java/com/qyft/gd/controller/directive/DirectiveController.java b/src/main/java/com/qyft/gd/controller/directive/DirectiveController.java deleted file mode 100644 index 61ba590..0000000 --- a/src/main/java/com/qyft/gd/controller/directive/DirectiveController.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.qyft.gd.controller.directive; - -import com.qyft.gd.model.dto.directive.DirectiveDto; -import com.qyft.gd.service.DirectiveService; -import com.qyft.gd.system.common.result.Result; -import com.qyft.gd.system.service.UserService; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.tags.Tag; -import jakarta.annotation.Resource; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -/** - * 指令控制器 - */ -@Tag(name = "指令") -@RestController -@RequestMapping("/api/directive") -@RequiredArgsConstructor -@Slf4j -public class DirectiveController { - - @Resource - private DirectiveService directiveService; - - @Operation(summary = "发送指令") - @PostMapping("/sendDirective") - public Result sendDirective(@RequestBody DirectiveDto dto) { - directiveService.sendDirective(dto); - return Result.success(); - } -} \ No newline at end of file diff --git a/src/main/java/com/qyft/gd/model/dto/directive/DirectiveDto.java b/src/main/java/com/qyft/gd/model/dto/directive/DirectiveDto.java deleted file mode 100644 index 6ed7642..0000000 --- a/src/main/java/com/qyft/gd/model/dto/directive/DirectiveDto.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.qyft.gd.model.dto.directive; - -import com.qyft.gd.enums.DirectiveTypeEnum; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; - -@Schema(name = "指令数据") -@Data -public class DirectiveDto { - - @Schema(description = "指令类型") - private DirectiveTypeEnum type; - - @Schema(description = "指令配置") - private String option; -} diff --git a/src/main/java/com/qyft/gd/model/vo/WebsocketResult.java b/src/main/java/com/qyft/gd/model/vo/WebsocketResult.java new file mode 100644 index 0000000..6c125c4 --- /dev/null +++ b/src/main/java/com/qyft/gd/model/vo/WebsocketResult.java @@ -0,0 +1,15 @@ +package com.qyft.gd.model.vo; + +import lombok.Data; + +@Data +public class WebsocketResult { + /** + * 推送类型(指令 cmd,报警 warn ,状态 status) + */ + private String type; + /** + * 执行结果 + */ + private ExecutionResult data; +} \ No newline at end of file diff --git a/src/main/java/com/qyft/gd/service/CMDService.java b/src/main/java/com/qyft/gd/service/CMDService.java index 9722ad4..4c38a5c 100644 --- a/src/main/java/com/qyft/gd/service/CMDService.java +++ b/src/main/java/com/qyft/gd/service/CMDService.java @@ -3,9 +3,11 @@ 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.config.WebSocketServer; import com.qyft.gd.device.service.DeviceService; import com.qyft.gd.model.form.CMDForm; import com.qyft.gd.model.vo.ExecutionResult; +import com.qyft.gd.model.vo.WebsocketResult; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; @@ -29,11 +31,16 @@ public class CMDService { } private void upTray(CMDForm cmdForm) { + WebsocketResult websocketResult = new WebsocketResult(); + websocketResult.setType("cmd"); + // TODO 执行指令 ExecutionResult executionResult = new ExecutionResult(); executionResult.setCommandId(cmdForm.getCommandId()); executionResult.setStatus(CMDResultCode.SUCCESS.getCode()); executionResult.setMessage(CMDResultCode.SUCCESS.getMsg()); - WebSocketServer.sendMessageToClients(JSONUtil.toJsonStr(executionResult)); + websocketResult.setData(executionResult); + // 发送消息给客户端 + WebSocketServer.sendMessageToClients(JSONUtil.toJsonStr(websocketResult)); } } diff --git a/src/main/java/com/qyft/gd/service/DirectiveService.java b/src/main/java/com/qyft/gd/service/DirectiveService.java deleted file mode 100644 index 5af682b..0000000 --- a/src/main/java/com/qyft/gd/service/DirectiveService.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.qyft.gd.service; - - -import com.qyft.gd.model.dto.directive.DirectiveDto; - -public interface DirectiveService { - - void sendDirective(DirectiveDto dto); -} diff --git a/src/main/java/com/qyft/gd/service/WebSocketServer.java b/src/main/java/com/qyft/gd/service/WebSocketServer.java deleted file mode 100644 index 264d63d..0000000 --- a/src/main/java/com/qyft/gd/service/WebSocketServer.java +++ /dev/null @@ -1,51 +0,0 @@ -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(); - } - } - } - } -} diff --git a/src/main/java/com/qyft/gd/service/impl/DirectiveServiceImpl.java b/src/main/java/com/qyft/gd/service/impl/DirectiveServiceImpl.java deleted file mode 100644 index 114734a..0000000 --- a/src/main/java/com/qyft/gd/service/impl/DirectiveServiceImpl.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.qyft.gd.service.impl; - -import com.qyft.gd.model.dto.directive.DirectiveDto; -import com.qyft.gd.service.DirectiveService; -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Service; - -/** - * 指令实现类 - */ -@Service -@RequiredArgsConstructor -public class DirectiveServiceImpl implements DirectiveService { - @Override - public void sendDirective(DirectiveDto dto) { - // 发送指令 - } -}