From aa88ed7c95b707cdd33a2eb949a6d1fce66cc827 Mon Sep 17 00:00:00 2001 From: maochaoying <925670706@qq.com> Date: Thu, 6 Jul 2023 16:31:20 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B5=8B=E8=AF=95=E8=B7=AF=E5=BE=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../iflytop/nuclear/config/WebSocketConfig.java | 25 ++++++++++++ .../nuclear/controller/CheckController.java | 2 +- .../iflytop/nuclear/controller/TaskController.java | 2 +- .../iflytop/nuclear/controller/TestController.java | 24 ----------- .../iflytop/nuclear/handler/MessageHandler.java | 3 +- .../com/iflytop/nuclear/service/CheckService.java | 2 +- .../nuclear/service/impl/CheckServiceImpl.java | 47 +++++++++++----------- .../iflytop/nuclear/websocket/SocketClient.java | 5 ++- .../iflytop/nuclear/websocket/WebSocketServer.java | 20 +-------- 9 files changed, 57 insertions(+), 73 deletions(-) delete mode 100644 src/main/java/com/iflytop/nuclear/controller/TestController.java diff --git a/src/main/java/com/iflytop/nuclear/config/WebSocketConfig.java b/src/main/java/com/iflytop/nuclear/config/WebSocketConfig.java index 47bf140..817e725 100644 --- a/src/main/java/com/iflytop/nuclear/config/WebSocketConfig.java +++ b/src/main/java/com/iflytop/nuclear/config/WebSocketConfig.java @@ -1,17 +1,26 @@ package com.iflytop.nuclear.config; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.iflytop.nuclear.handler.MessageHandler; import lombok.extern.slf4j.Slf4j; import org.java_websocket.client.WebSocketClient; import org.java_websocket.drafts.Draft_6455; import org.java_websocket.handshake.ServerHandshake; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.stereotype.Component; +import org.springframework.util.StringUtils; import java.net.URI; +import java.nio.channels.NotYetConnectedException; @Component @Slf4j public class WebSocketConfig { + @Autowired + MessageHandler messageHandler; + @Bean public WebSocketClient webSocketClient() { try { @@ -25,6 +34,21 @@ public class WebSocketConfig { public void onMessage(String message) { log.info("[websocket] 收到消息={}", message); // 在这里重写对消息的处理分发 + if (!StringUtils.isEmpty(message)) { + try { + JSONObject jsonObject = JSON.parseObject(message); + String command = jsonObject.getString("command"); + // 根据command类型,分发给不同的handler和detection + if (!command.isEmpty()) { + messageHandler.dispatcher(command, jsonObject); + } + } catch (Exception e) { + JSONObject msg = new JSONObject(); + msg.put("message", "传输数据必须为包含command字段的JSON格式"); + this.send(msg.toString()); + e.printStackTrace(); + } + } } @Override @@ -36,6 +60,7 @@ public class WebSocketConfig { public void onError(Exception ex) { log.info("[websocket] 连接错误={}", ex.getMessage()); } + }; webSocketClient.connect(); return webSocketClient; diff --git a/src/main/java/com/iflytop/nuclear/controller/CheckController.java b/src/main/java/com/iflytop/nuclear/controller/CheckController.java index 3bf8d00..ddcae26 100644 --- a/src/main/java/com/iflytop/nuclear/controller/CheckController.java +++ b/src/main/java/com/iflytop/nuclear/controller/CheckController.java @@ -39,7 +39,7 @@ public class CheckController { } @GetMapping("/stop/{id}") - public ResponseData breakOffAutoProcess(@PathVariable(name = "id") int taskId) { + public ResponseData breakOffAutoProcess(@PathVariable(name = "id") int taskId) throws IOException { checkService.breakOffByTaskId(taskId); return ResponseData.success(); } diff --git a/src/main/java/com/iflytop/nuclear/controller/TaskController.java b/src/main/java/com/iflytop/nuclear/controller/TaskController.java index 9b09cc4..3fc25c8 100644 --- a/src/main/java/com/iflytop/nuclear/controller/TaskController.java +++ b/src/main/java/com/iflytop/nuclear/controller/TaskController.java @@ -87,7 +87,7 @@ public class TaskController { nuclearCoreConfigQueryWrapper.eq("task_id", id); boolean remove = nuclearCoreConfigService.remove(nuclearCoreConfigQueryWrapper); // 将当前任务状态修改为0 - checkServiceImpl.updateCoordAndStatus(id, null, 0, false, false); + checkServiceImpl.updateCoordAndStatus(id, null, 0, false, false, null); JSONObject jo = new JSONObject(); jo.put("result", remove); return ResponseData.success(jo); diff --git a/src/main/java/com/iflytop/nuclear/controller/TestController.java b/src/main/java/com/iflytop/nuclear/controller/TestController.java deleted file mode 100644 index 645328c..0000000 --- a/src/main/java/com/iflytop/nuclear/controller/TestController.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.iflytop.nuclear.controller; - -/** - * @author cool - * @date 2023/7/6 15:31 - */ - -import com.iflytop.nuclear.websocket.SocketClient; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; -@RestController -@RequestMapping("/websocket") -public class TestController { - - @Autowired - private SocketClient webScoketClient; - - @GetMapping("/sendMessage") - public void sendMessage(){ - webScoketClient.groupSending("123"); - } -} \ No newline at end of file diff --git a/src/main/java/com/iflytop/nuclear/handler/MessageHandler.java b/src/main/java/com/iflytop/nuclear/handler/MessageHandler.java index 679077e..5923723 100644 --- a/src/main/java/com/iflytop/nuclear/handler/MessageHandler.java +++ b/src/main/java/com/iflytop/nuclear/handler/MessageHandler.java @@ -30,9 +30,8 @@ public class MessageHandler { * dispatcher分发器 * @param command 硬件端传来的commad字段 * @param data 整体包数据 - * @param session websocket 连接会话 */ - public void dispatcher(String command, JSONObject data, Session session) throws IOException { + public void dispatcher(String command, JSONObject data) throws IOException { switch (command){ case "detection_completed": // 需要把当前的检测结果进行保存 diff --git a/src/main/java/com/iflytop/nuclear/service/CheckService.java b/src/main/java/com/iflytop/nuclear/service/CheckService.java index 6e750f8..a21c6ab 100644 --- a/src/main/java/com/iflytop/nuclear/service/CheckService.java +++ b/src/main/java/com/iflytop/nuclear/service/CheckService.java @@ -16,5 +16,5 @@ public interface CheckService { CheckResult autoCheck(int order, String startIndex, int taskId) throws IOException; - void breakOffByTaskId(int taskId); + void breakOffByTaskId(int taskId) throws IOException; } diff --git a/src/main/java/com/iflytop/nuclear/service/impl/CheckServiceImpl.java b/src/main/java/com/iflytop/nuclear/service/impl/CheckServiceImpl.java index 46a7fd2..265e036 100644 --- a/src/main/java/com/iflytop/nuclear/service/impl/CheckServiceImpl.java +++ b/src/main/java/com/iflytop/nuclear/service/impl/CheckServiceImpl.java @@ -1,7 +1,6 @@ package com.iflytop.nuclear.service.impl; import cn.hutool.core.util.IdUtil; -import com.alibaba.fastjson2.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.iflytop.nuclear.entity.CheckInfo; @@ -10,6 +9,7 @@ import com.iflytop.nuclear.entity.DetectionMessage; import com.iflytop.nuclear.model.Task; import com.iflytop.nuclear.service.CheckService; import com.iflytop.nuclear.service.TaskService; +import com.iflytop.nuclear.websocket.SocketClient; import com.iflytop.nuclear.websocket.WebSocketServer; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -28,13 +28,13 @@ public class CheckServiceImpl implements CheckService { TaskService taskService; @Autowired WebSocketServer webSocketServer; + @Autowired + SocketClient socketClient; private static boolean messageReceived = false; private static boolean breakOff = false; - private static int currentTaskId = 0; - // !!! 记录规则路径上的路过但是不检测的坐标 进行排除即可 public void changeMessageReceived(boolean flag) { @@ -56,7 +56,7 @@ public class CheckServiceImpl implements CheckService { return checkInfo; } - public boolean updateCoordAndStatus(int taskId, String currentCoord, int status, boolean updateStartTime, boolean updateEndTime) throws IOException { + public boolean updateCoordAndStatus(int taskId, String currentCoord, int status, boolean updateStartTime, boolean updateEndTime, Integer order) throws IOException { UpdateWrapper taskUpdateWrapper = new UpdateWrapper<>(); taskUpdateWrapper.eq("id",taskId); Task task = new Task(); @@ -73,6 +73,9 @@ public class CheckServiceImpl implements CheckService { task.setEndTime(new Date()); } task.setStatus(status); + if (order != null){ + task.setCheckOrder(order); + } boolean update = taskService.update(task, taskUpdateWrapper); this.sendMessageToPage(); return update; @@ -83,12 +86,12 @@ public class CheckServiceImpl implements CheckService { } public void sendMessageToDevice(String nextCoord, int taskId) throws IOException { - // DetectionMessage startMessage = DetectionMessage.builder() - // .messageId(IdUtil.randomUUID()) - // .coord(nextCoord) - // .taskId(taskId) - // .build(); - // webSocketServer.sendMessage(startMessage.toString()); + DetectionMessage startMessage = DetectionMessage.builder() + .messageId(IdUtil.randomUUID()) + .coord(nextCoord) + .taskId(taskId) + .build(); + socketClient.sendMessage(startMessage.toString()); } public void sendMessageToPage() throws IOException { @@ -98,7 +101,7 @@ public class CheckServiceImpl implements CheckService { public String initCheck(String initNextCoord,int order, int taskId) throws IOException { // 指定初始化index为1-6 String nextCoord = initNextCoord; - this.updateCoordAndStatus(taskId, nextCoord, 1, true, false); + this.updateCoordAndStatus(taskId, nextCoord, 1, true, false, order); // 开始检测 this.sendMessageToDevice(nextCoord, taskId); // 如果中间终止 则退出返回 与messagehandler 处理逻辑相同 外部控制while的终止 @@ -110,7 +113,7 @@ public class CheckServiceImpl implements CheckService { while (true) { if (this.breakOff) { breakFirst = true; - this.updateCoordAndStatus(taskId, nextCoord, 2, false, false); + this.updateCoordAndStatus(taskId, nextCoord, 2, false, false, order); break; } if (this.isMessageReceived()) { @@ -123,10 +126,10 @@ public class CheckServiceImpl implements CheckService { } // 检测完毕后获取下一个坐标 nextCoord = this.getNextCoord(nextCoord, order); - this.updateCoordAndStatus(taskId, nextCoord, 1, false, false); + this.updateCoordAndStatus(taskId, nextCoord, 1, false, false, order); this.sendMessageToDevice(nextCoord, taskId); if ("finish".equals(nextCoord)) { - this.updateCoordAndStatus(taskId, nextCoord, 3, false, true); + this.updateCoordAndStatus(taskId, nextCoord, 3, false, true, order); } } return nextCoord; @@ -146,7 +149,7 @@ public class CheckServiceImpl implements CheckService { while (true) { if (this.breakOff) { breakFirst = true; - this.updateCoordAndStatus(taskId, nextCoord, 2, false, false); + this.updateCoordAndStatus(taskId, nextCoord, 2, false, false, order); break; } if (this.isMessageReceived()) { @@ -159,10 +162,10 @@ public class CheckServiceImpl implements CheckService { } // 检测完毕后获取下一个坐标 nextCoord = this.getNextCoord(nextCoord, order); - this.updateCoordAndStatus(taskId, nextCoord, 1, false, false); + this.updateCoordAndStatus(taskId, nextCoord, 1, false, false, order); this.sendMessageToDevice(nextCoord, taskId); if ("finish".equals(nextCoord)) { - this.updateCoordAndStatus(taskId, nextCoord, 3, false, true); + this.updateCoordAndStatus(taskId, nextCoord, 3, false, true, order); } } return nextCoord; @@ -180,8 +183,7 @@ public class CheckServiceImpl implements CheckService { return checkResult; } this.changeBreakOff(false); - this.updateCoordAndStatus(taskId, null, 1, false, false); - currentTaskId = taskId; + this.updateCoordAndStatus(taskId, null, 1, false, false, order); String nextCoord = ""; if (order == 0) { if (startIndex == null || "".equals(startIndex)) { @@ -202,10 +204,9 @@ public class CheckServiceImpl implements CheckService { } @Override - public void breakOffByTaskId(int taskId) { - if (taskId == currentTaskId) { - this.changeBreakOff(true); - } + public void breakOffByTaskId(int taskId) throws IOException { + this.updateCoordAndStatus(taskId, null, 2,false, false, null); + this.changeBreakOff(true); } /** diff --git a/src/main/java/com/iflytop/nuclear/websocket/SocketClient.java b/src/main/java/com/iflytop/nuclear/websocket/SocketClient.java index 7998db1..3c87a0d 100644 --- a/src/main/java/com/iflytop/nuclear/websocket/SocketClient.java +++ b/src/main/java/com/iflytop/nuclear/websocket/SocketClient.java @@ -9,7 +9,8 @@ public class SocketClient { @Autowired private WebSocketClient webSocketClient; - public void groupSending(String message) { - webSocketClient.send(message+"---6666"); + public void sendMessage(String message) { + webSocketClient.send(message); } + } \ No newline at end of file diff --git a/src/main/java/com/iflytop/nuclear/websocket/WebSocketServer.java b/src/main/java/com/iflytop/nuclear/websocket/WebSocketServer.java index 38f866a..880c73d 100644 --- a/src/main/java/com/iflytop/nuclear/websocket/WebSocketServer.java +++ b/src/main/java/com/iflytop/nuclear/websocket/WebSocketServer.java @@ -30,9 +30,6 @@ import java.util.concurrent.atomic.AtomicInteger; @Slf4j public class WebSocketServer { - @Autowired - MessageHandler messageHandler; - /** * 仅允许某个userid进行连接, 指定该机器的macid */ @@ -103,22 +100,7 @@ public class WebSocketServer { */ @OnMessage public void onMessage(String message, Session session) throws IOException { - log.info("用户消息:" + userId + ",报文:" + message); - if (!StringUtils.isEmpty(message)) { - try { - // JSONObject jsonObject = JSON.parseObject(message); - // String command = jsonObject.getString("command"); - // 根据command类型,分发给不同的handler和detection - // if (!command.isEmpty()) { - // messageHandler.dispatcher(command, jsonObject, session); - // } - } catch (Exception e) { - JSONObject msg = new JSONObject(); - msg.put("message", "传输数据必须为包含command字段的JSON格式"); - session.getBasicRemote().sendText(msg.toString()); - e.printStackTrace(); - } - } + // 不对用户消息做处理,仅仅用来推送消息给客户端 } /**