diff --git a/src/main/java/com/iflytop/nuclear/controller/CheckController.java b/src/main/java/com/iflytop/nuclear/controller/CheckController.java index ad22bd7..5631e16 100644 --- a/src/main/java/com/iflytop/nuclear/controller/CheckController.java +++ b/src/main/java/com/iflytop/nuclear/controller/CheckController.java @@ -37,4 +37,10 @@ public class CheckController { CheckResult checkResult = checkService.autoCheck(order, startIndex, taskId); return ResponseData.success(); } + + @GetMapping("/stop/{id}") + public ResponseData breakOffAutoProcess(@PathVariable(name = "id") int taskId) { + checkService.breakOffByTaskId(taskId); + return ResponseData.success(); + } } diff --git a/src/main/java/com/iflytop/nuclear/handler/MessageHandler.java b/src/main/java/com/iflytop/nuclear/handler/MessageHandler.java index 40c642a..1c3bd9a 100644 --- a/src/main/java/com/iflytop/nuclear/handler/MessageHandler.java +++ b/src/main/java/com/iflytop/nuclear/handler/MessageHandler.java @@ -1,7 +1,10 @@ package com.iflytop.nuclear.handler; import com.alibaba.fastjson.JSONObject; +import com.iflytop.nuclear.service.CheckService; +import com.iflytop.nuclear.service.impl.CheckServiceImpl; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import javax.websocket.Session; @@ -15,6 +18,9 @@ import java.io.IOException; @Slf4j public class MessageHandler { + @Autowired + CheckServiceImpl checkServiceImpl; + /** * dispatcher分发器 * @param command 硬件端传来的commad字段 @@ -25,7 +31,7 @@ public class MessageHandler { switch (command){ case "cmd1": session.getBasicRemote().sendText("123"); - System.out.println(123); + checkServiceImpl.changeMessageReceived(true); break; default: System.out.println("No match!"); diff --git a/src/main/java/com/iflytop/nuclear/service/CheckService.java b/src/main/java/com/iflytop/nuclear/service/CheckService.java index fd86c72..235107b 100644 --- a/src/main/java/com/iflytop/nuclear/service/CheckService.java +++ b/src/main/java/com/iflytop/nuclear/service/CheckService.java @@ -16,4 +16,6 @@ public interface CheckService { CheckInfo getCheckInfoByTaskId(int taskId); CheckResult autoCheck(int order, String startIndex, int taskId) throws IOException; + + void breakOffByTaskId(int taskId); } 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 12cf9a6..5f5a01d 100644 --- a/src/main/java/com/iflytop/nuclear/service/impl/CheckServiceImpl.java +++ b/src/main/java/com/iflytop/nuclear/service/impl/CheckServiceImpl.java @@ -1,10 +1,8 @@ package com.iflytop.nuclear.service.impl; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.iflytop.nuclear.entity.CheckInfo; import com.iflytop.nuclear.entity.CheckResult; -import com.iflytop.nuclear.model.Account; import com.iflytop.nuclear.model.Task; import com.iflytop.nuclear.service.CheckService; import com.iflytop.nuclear.service.TaskService; @@ -24,8 +22,24 @@ public class CheckServiceImpl implements CheckService { @Autowired TaskService taskService; - @Autowired - WebSocketServer webSocketServer; + // @Autowired + // WebSocketServer webSocketServer; + + private static boolean messageReceived = false; + + private static boolean breakOff = false; + + private static int currentTaskId = 0; + + // !!! 记录规则路径上的路过但是不检测的坐标 进行排除即可 + + public void changeMessageReceived(boolean flag) { + messageReceived = flag; + } + + public void changeBreakOff(boolean flag) { + breakOff = flag; + } @Override public CheckInfo getCheckInfoByTaskId(int taskId) { @@ -49,26 +63,43 @@ public class CheckServiceImpl implements CheckService { return update; } + public boolean isMessageReceived() { + return messageReceived; + } + @Override public CheckResult autoCheck(int order, String startIndex, int taskId) throws IOException { + currentTaskId = taskId; if (order == 0) { if (startIndex == null || "".equals(startIndex)) { // 指定初始化index为1-6 this.updateCoordAndStatus(taskId, "1-6", 1); - // 开始检测 - webSocketServer.sendMessage("开始检测 1-6"); String nextCoord = "1-6"; - // 检测完毕后获取下一个坐标 用messagehandler处理检测完毕的消息 从而启动以下流程 - // TODO - // 检测下一个坐标 while + // 开始检测 + // webSocketServer.sendMessage("开始检测 1-6"); // 如果中间终止 则退出返回 与messagehandler 处理逻辑相同 外部控制while的终止 // 下一次进入后则进入其他流程 while (!"finish".equals(nextCoord)) { + // 需要一个中断的接口, 中途暂停本次流程 + if (this.breakOff) { + this.updateCoordAndStatus(taskId, nextCoord, 2); + break; + } + // 用messagehandler处理检测完毕的消息 从而启动以下流程 + while (true) { + if (this.isMessageReceived()) { + messageReceived = false; + break; // 跳出循环 + } + } + // 检测完毕后获取下一个坐标 nextCoord = this.getNextCoord(nextCoord, 0); this.updateCoordAndStatus(taskId, nextCoord, 1); + if ("finish".equals(nextCoord)) { + this.updateCoordAndStatus(taskId, nextCoord, 3); + } System.out.println(nextCoord); } - // !!! 记录规则路径上的路过但是不检测的坐标 进行排除即可 }else { } @@ -83,6 +114,13 @@ public class CheckServiceImpl implements CheckService { return null; } + @Override + public void breakOffByTaskId(int taskId) { + if (taskId == currentTaskId) { + this.changeBreakOff(true); + } + } + /** * 传入当前检查的坐标点 * @return 获取下一个坐标点 diff --git a/src/main/java/com/iflytop/nuclear/websocket/WebSocketServer.java b/src/main/java/com/iflytop/nuclear/websocket/WebSocketServer.java index bd880af..1885ffb 100644 --- a/src/main/java/com/iflytop/nuclear/websocket/WebSocketServer.java +++ b/src/main/java/com/iflytop/nuclear/websocket/WebSocketServer.java @@ -137,7 +137,9 @@ public class WebSocketServer { * 实现服务器主动推送 */ public void sendMessage(String message) throws IOException { - this.session.getBasicRemote().sendText(message); + if(this.session != null) { + this.session.getBasicRemote().sendText(message); + } } public static synchronized AtomicInteger getOnlineCount() {