Browse Source

终止

main
maochaoying 2 years ago
parent
commit
a5b25a94db
  1. 6
      src/main/java/com/iflytop/nuclear/controller/CheckController.java
  2. 8
      src/main/java/com/iflytop/nuclear/handler/MessageHandler.java
  3. 2
      src/main/java/com/iflytop/nuclear/service/CheckService.java
  4. 58
      src/main/java/com/iflytop/nuclear/service/impl/CheckServiceImpl.java
  5. 4
      src/main/java/com/iflytop/nuclear/websocket/WebSocketServer.java

6
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();
}
}

8
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!");

2
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);
}

58
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 获取下一个坐标点

4
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() {

Loading…
Cancel
Save