|
@@ -1,33 +1,34 @@
|
|
|
package com.uavps.framework.websocket;
|
|
|
|
|
|
+import com.fasterxml.jackson.databind.ObjectMapper;
|
|
|
+import com.uavps.common.config.RuoYiConfig;
|
|
|
+import com.uavps.common.utils.StringUtils;
|
|
|
import com.uavps.common.utils.spring.SpringUtils;
|
|
|
-import com.uavps.common.utils.uuid.IdUtils;
|
|
|
-import com.uavps.framework.udp.CoordinateSystem;
|
|
|
+import com.uavps.common.utils.uuid.Seq;
|
|
|
+import com.uavps.framework.udp.TaskInfo;
|
|
|
import com.uavps.framework.udp.UdpClientService;
|
|
|
import com.uavps.framework.udp.UdpServerService;
|
|
|
import com.uavps.framework.udp.utils.UdpDataUtils;
|
|
|
-import com.uavps.system.domain.UavpsAircraft;
|
|
|
-import com.uavps.system.domain.UavpsAlgorithmParameter;
|
|
|
+import com.uavps.system.domain.UavpsTask;
|
|
|
import com.uavps.system.service.IUavpsAircraftService;
|
|
|
import com.uavps.system.service.IUavpsAlgorithmParameterService;
|
|
|
+import com.uavps.system.service.IUavpsTaskService;
|
|
|
import org.slf4j.Logger;
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
import org.springframework.stereotype.Component;
|
|
|
-import org.springframework.util.CollectionUtils;
|
|
|
|
|
|
-import javax.websocket.OnClose;
|
|
|
-import javax.websocket.OnError;
|
|
|
-import javax.websocket.OnMessage;
|
|
|
-import javax.websocket.OnOpen;
|
|
|
-import javax.websocket.Session;
|
|
|
+import javax.websocket.*;
|
|
|
import javax.websocket.server.ServerEndpoint;
|
|
|
+import java.io.BufferedReader;
|
|
|
+import java.io.FileReader;
|
|
|
import java.io.IOException;
|
|
|
-import java.math.BigDecimal;
|
|
|
import java.net.DatagramPacket;
|
|
|
import java.net.DatagramSocket;
|
|
|
import java.net.InetAddress;
|
|
|
-import java.util.List;
|
|
|
+import java.time.Instant;
|
|
|
+import java.util.Date;
|
|
|
import java.util.concurrent.CompletableFuture;
|
|
|
+import java.util.concurrent.TimeUnit;
|
|
|
|
|
|
/**
|
|
|
* websocket 消息处理
|
|
@@ -37,6 +38,8 @@ import java.util.concurrent.CompletableFuture;
|
|
|
@Component
|
|
|
@ServerEndpoint("/websocket/message")
|
|
|
public class WebSocketServer {
|
|
|
+
|
|
|
+ protected final Logger logger = LoggerFactory.getLogger(this.getClass());
|
|
|
private static final Logger log = LoggerFactory.getLogger(WebSocketServer.class);
|
|
|
|
|
|
UdpServerService udpServerService = new UdpServerService();
|
|
@@ -47,6 +50,8 @@ public class WebSocketServer {
|
|
|
|
|
|
private IUavpsAlgorithmParameterService algorithmParameterService = SpringUtils.getBean(IUavpsAlgorithmParameterService.class);
|
|
|
|
|
|
+ private IUavpsTaskService uavpsTaskService = SpringUtils.getBean(IUavpsTaskService.class);;
|
|
|
+
|
|
|
/**
|
|
|
* 连接建立成功调用的方法
|
|
|
*/
|
|
@@ -91,49 +96,139 @@ public class WebSocketServer {
|
|
|
if (session != null) {
|
|
|
try {
|
|
|
if (message.startsWith("REPLAY:")) {
|
|
|
+ long baseTime = Instant.now().toEpochMilli();
|
|
|
//重放,获取数据库轨迹数据
|
|
|
String bizId = message.substring(7);
|
|
|
- List<UavpsAircraft> dataList = uavpsAircraftService.selectUavpsAircraftByBizId(bizId);
|
|
|
- if (!CollectionUtils.isEmpty(dataList)) {
|
|
|
- for (UavpsAircraft data : dataList) {
|
|
|
- session.getBasicRemote().sendText(data.getAircraftData());
|
|
|
- Thread.sleep(20);
|
|
|
+ UavpsTask uavpsTask = uavpsTaskService.selectUavpsTaskByBizId(Long.parseLong(bizId));
|
|
|
+ String filePath = uavpsTask.getFilePath();
|
|
|
+ try (BufferedReader reader = new BufferedReader(new FileReader(filePath))) {
|
|
|
+ String line;
|
|
|
+ while ((line = reader.readLine()) != null) {
|
|
|
+ // 解析时间戳和数据
|
|
|
+ if (line.length() > 11 && line.charAt(10) == ':') {
|
|
|
+ long timestamp = Long.parseLong(line.substring(0, 10));
|
|
|
+ String json = line.substring(11);
|
|
|
+ long currentTime = Instant.now().toEpochMilli();
|
|
|
+ long targetTime = baseTime + timestamp;
|
|
|
+ // 计算需要等待的时间
|
|
|
+ long waitTime = targetTime - currentTime;
|
|
|
+ if (waitTime > 0) {
|
|
|
+ TimeUnit.MILLISECONDS.sleep(waitTime);
|
|
|
+ }
|
|
|
+ session.getBasicRemote().sendText(json);
|
|
|
+ } else {
|
|
|
+ System.err.println("Invalid line format: " + line);
|
|
|
+ }
|
|
|
}
|
|
|
+ } catch (IOException e) {
|
|
|
+ log.error("File reading error id : {}", bizId, e);
|
|
|
}
|
|
|
} else if (message.startsWith("RUN:")) {
|
|
|
- // 初始化 坐标转换参数
|
|
|
- CoordinateSystem.INSTANCE.reset();
|
|
|
-
|
|
|
String paramId = message.substring(4);
|
|
|
- UavpsAlgorithmParameter param = algorithmParameterService.selectUavpsAlgorithmParameterById(Long.parseLong(paramId));
|
|
|
- String parameter = UdpDataUtils.initAlgorithmParams(param);
|
|
|
- System.out.println("parameter:====" + parameter);
|
|
|
- System.out.println("param.toString():====" + param);
|
|
|
- udpClientService.send(parameter);
|
|
|
- /*String str = "BB14030101010100B6EA5F459C96C9172B0001000200030015CD5B070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001A01B";
|
|
|
- udpClientService.send(str);*/
|
|
|
- UdpDataUtils.bizId = IdUtils.simpleUUID();
|
|
|
+// UavpsAlgorithmParameter param = algorithmParameterService.selectUavpsAlgorithmParameterById(Long.parseLong(paramId));
|
|
|
+ long bizId = Long.parseLong(paramId);
|
|
|
+
|
|
|
+ UavpsTask uavpsTask = uavpsTaskService.selectUavpsTaskByBizId(bizId);
|
|
|
+ uavpsTask.setBizType(UavpsTask.START);
|
|
|
+ ObjectMapper mapper = new ObjectMapper();
|
|
|
+ String json = null;
|
|
|
+ try {
|
|
|
+ json = mapper.writeValueAsString(uavpsTask);
|
|
|
+ logger.info("json :{}", json);
|
|
|
+ } catch (Exception e) {
|
|
|
+ logger.error("WebSocketServer.onMessage to json error", e);
|
|
|
+ }
|
|
|
+ String filePath = StringUtils.format("{}/{}/{}.{}", RuoYiConfig.getTaskPath(),
|
|
|
+ bizId, Seq.getId(Seq.uploadSeqType), "txt");
|
|
|
+ uavpsTask.setFilePath(filePath);
|
|
|
+ uavpsTask.setStartTime(new Date());
|
|
|
+ uavpsTask.setStatus(UavpsTask.RUNNING);
|
|
|
+ uavpsTaskService.updateUavpsTask(uavpsTask);
|
|
|
+ // 初始化 坐标转换参数
|
|
|
+ TaskInfo.INSTANCE.reset(bizId, filePath);
|
|
|
+ assert json != null;
|
|
|
+ udpClientService.send(json);
|
|
|
+// UdpDataUtils.bizId = IdUtils.simpleUUID();
|
|
|
} else if (message.startsWith("TRANSFORMATION:")) {
|
|
|
- closeUdpServer();
|
|
|
+// closeUdpServer();
|
|
|
|
|
|
String param = message.substring(15);
|
|
|
String[] paramAry = param.split(",");
|
|
|
- UavpsAlgorithmParameter parameter = algorithmParameterService.selectUavpsAlgorithmParameterById(Long.parseLong(paramAry[0]));
|
|
|
- if(!"null".equals(paramAry[1])){
|
|
|
- parameter.setLongitude(new BigDecimal(paramAry[1]));
|
|
|
+ UavpsTask uavpsTask = new UavpsTask();
|
|
|
+ uavpsTask.setBizId(Long.parseLong(paramAry[0]));
|
|
|
+ uavpsTask.setBizType(UavpsTask.CHANGE);
|
|
|
+ ObjectMapper mapper = new ObjectMapper();
|
|
|
+ String json = null;
|
|
|
+ try {
|
|
|
+ json = mapper.writeValueAsString(uavpsTask);
|
|
|
+ logger.info("json :{}", json);
|
|
|
+ } catch (Exception e) {
|
|
|
+ logger.error("WebSocketServer.onMessage to json error", e);
|
|
|
+ }
|
|
|
+ assert json != null;
|
|
|
+ udpClientService.send(json);
|
|
|
+// this.onOpen(session);
|
|
|
+ } else if (message.startsWith("DISAPPEAR:")) {
|
|
|
+ String param = message.substring(10);
|
|
|
+ String[] paramAry = param.split(",");
|
|
|
+ UavpsTask uavpsTask = new UavpsTask();
|
|
|
+ uavpsTask.setBizId(Long.parseLong(paramAry[0]));
|
|
|
+ uavpsTask.setBizType(UavpsTask.DISAPPEAR);
|
|
|
+ for (int i = 0; i <= paramAry.length; i++) {
|
|
|
+ if (i != 0) {
|
|
|
+ uavpsTask.getNumbers().add(Integer.parseInt(paramAry[i]));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ ObjectMapper mapper = new ObjectMapper();
|
|
|
+ String json = null;
|
|
|
+ try {
|
|
|
+ json = mapper.writeValueAsString(uavpsTask);
|
|
|
+ logger.info("json :{}", json);
|
|
|
+ } catch (Exception e) {
|
|
|
+ logger.error("WebSocketServer.onMessage to json error", e);
|
|
|
+ }
|
|
|
+ assert json != null;
|
|
|
+ udpClientService.send(json);
|
|
|
+ } else if (message.startsWith("SHOW:")) {
|
|
|
+ String param = message.substring(5);
|
|
|
+ String[] paramAry = param.split(",");
|
|
|
+ UavpsTask uavpsTask = new UavpsTask();
|
|
|
+ uavpsTask.setBizId(Long.parseLong(paramAry[0]));
|
|
|
+ uavpsTask.setBizType(UavpsTask.SHOW);
|
|
|
+ for (int i = 0; i <= paramAry.length; i++) {
|
|
|
+ if (i != 0) {
|
|
|
+ uavpsTask.getNumbers().add(Integer.parseInt(paramAry[i]));
|
|
|
+ }
|
|
|
}
|
|
|
- if(!"null".equals(paramAry[2])){
|
|
|
- parameter.setLatitude(new BigDecimal(paramAry[2]));
|
|
|
+ ObjectMapper mapper = new ObjectMapper();
|
|
|
+ String json = null;
|
|
|
+ try {
|
|
|
+ json = mapper.writeValueAsString(uavpsTask);
|
|
|
+ logger.info("json :{}", json);
|
|
|
+ } catch (Exception e) {
|
|
|
+ logger.error("WebSocketServer.onMessage to json error", e);
|
|
|
}
|
|
|
- if(!"null".equals(paramAry[3])){
|
|
|
- parameter.setAltitude(Long.parseLong(paramAry[3]));
|
|
|
+ assert json != null;
|
|
|
+ udpClientService.send(json);
|
|
|
+ } else if (message.startsWith("END:")) {
|
|
|
+ Long bizId = Long.parseLong(message.substring(5));
|
|
|
+ UavpsTask uavpsTask = new UavpsTask();
|
|
|
+ uavpsTask.setBizId(bizId);
|
|
|
+ uavpsTask.setBizType(UavpsTask.END);
|
|
|
+ ObjectMapper mapper = new ObjectMapper();
|
|
|
+ String json = null;
|
|
|
+ try {
|
|
|
+ json = mapper.writeValueAsString(uavpsTask);
|
|
|
+ logger.info("json :{}", json);
|
|
|
+ } catch (Exception e) {
|
|
|
+ logger.error("WebSocketServer.onMessage to json error", e);
|
|
|
}
|
|
|
- String transParam = UdpDataUtils.initAlgorithmParams(parameter);
|
|
|
- System.out.println("transParam:====" + transParam);
|
|
|
- System.out.println("param.toString():====" + parameter);
|
|
|
- udpClientService.send(transParam);
|
|
|
- this.onOpen(session);
|
|
|
- //String str = "BB14030101010100B6EA5F459C96C9172B0001000200030015CD5B070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001A01B";
|
|
|
+ assert json != null;
|
|
|
+ udpClientService.send(json);
|
|
|
+ uavpsTask = uavpsTaskService.selectUavpsTaskByBizId(bizId);
|
|
|
+ uavpsTask.setEndTime(new Date());
|
|
|
+ uavpsTask.setStatus(UavpsTask.COMPLETED);
|
|
|
+ uavpsTaskService.updateUavpsTask(uavpsTask);
|
|
|
} else {
|
|
|
session.getBasicRemote().sendText(message);
|
|
|
}
|