From 64b7890b6f1408d6a76e49d67afd2b725ce1e959 Mon Sep 17 00:00:00 2001 From: sige Date: Tue, 19 Dec 2023 14:04:32 +0800 Subject: [PATCH] ~~~ --- pom.xml | 2 +- .../dreamworks/boditech/BoditechApplication.java | 4 -- .../com/dreamworks/boditech/driver/Device.java | 9 ++++ .../boditech/driver/actuator/ActuatorBase.java | 14 +++-- .../driver/connection/ComWebsocketClient.java | 3 +- .../entity/WebsocketServerMessageErrorEvent.java | 6 +++ .../boditech/service/WebsocketServerService.java | 44 ++++++++++++++++ .../boditech/utils/BoditechDeviceCmd.java | 61 ---------------------- .../boditech/utils/MyWebsocketServer.java | 35 ------------- src/main/resources/application-dev.yml | 17 ++++++ src/main/resources/application-test.yml | 17 ++++++ src/main/resources/application.yml | 15 +----- 12 files changed, 104 insertions(+), 123 deletions(-) create mode 100644 src/main/java/com/dreamworks/boditech/entity/WebsocketServerMessageErrorEvent.java create mode 100644 src/main/java/com/dreamworks/boditech/service/WebsocketServerService.java delete mode 100644 src/main/java/com/dreamworks/boditech/utils/BoditechDeviceCmd.java delete mode 100644 src/main/java/com/dreamworks/boditech/utils/MyWebsocketServer.java create mode 100644 src/main/resources/application-dev.yml create mode 100644 src/main/resources/application-test.yml diff --git a/pom.xml b/pom.xml index 8bb22f0..5e09bc4 100644 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ 4.0.0 com.dreamworks boditech - 0.0.12 + 0.0.13 boditech boditech diff --git a/src/main/java/com/dreamworks/boditech/BoditechApplication.java b/src/main/java/com/dreamworks/boditech/BoditechApplication.java index e501cc1..58777fd 100644 --- a/src/main/java/com/dreamworks/boditech/BoditechApplication.java +++ b/src/main/java/com/dreamworks/boditech/BoditechApplication.java @@ -1,12 +1,8 @@ package com.dreamworks.boditech; -import com.dreamworks.boditech.driver.connection.ComWebsocketClient; -import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.Bean; import org.springframework.web.socket.server.standard.ServerEndpointExporter; -import java.net.URI; -import java.net.URISyntaxException; @SpringBootApplication public class BoditechApplication { diff --git a/src/main/java/com/dreamworks/boditech/driver/Device.java b/src/main/java/com/dreamworks/boditech/driver/Device.java index 579be7d..34e3b17 100644 --- a/src/main/java/com/dreamworks/boditech/driver/Device.java +++ b/src/main/java/com/dreamworks/boditech/driver/Device.java @@ -6,6 +6,7 @@ import com.dreamworks.boditech.driver.connection.ComWebsocket; import com.dreamworks.boditech.driver.connection.ComLisClient; import com.dreamworks.boditech.driver.consumable.*; import com.dreamworks.boditech.driver.entity.DeviceLogEntry; +import com.dreamworks.boditech.entity.WebsocketServerMessageErrorEvent; import com.dreamworks.boditech.mapper.DeviceLogMapper; import com.dreamworks.boditech.service.*; import com.dreamworks.boditech.utils.MyByteBuffer; @@ -44,6 +45,8 @@ public class Device { public TestService testService; @Resource public ComLisClient lis; + @Resource + public WebsocketServerService websocketServerService; // consumable : test cards public final CsmTestCardManager testCards = new CsmTestCardManager(this); @@ -177,4 +180,10 @@ public class Device { entry.createdAt = now.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); this.deviceLogMapper.insert(entry); } + + public void errorAlert(String code) { + WebsocketServerMessageErrorEvent event = new WebsocketServerMessageErrorEvent(); + event.code = code; + this.websocketServerService.send(event); + } } diff --git a/src/main/java/com/dreamworks/boditech/driver/actuator/ActuatorBase.java b/src/main/java/com/dreamworks/boditech/driver/actuator/ActuatorBase.java index b26bb66..d9e9d8d 100644 --- a/src/main/java/com/dreamworks/boditech/driver/actuator/ActuatorBase.java +++ b/src/main/java/com/dreamworks/boditech/driver/actuator/ActuatorBase.java @@ -2,6 +2,7 @@ package com.dreamworks.boditech.driver.actuator; import com.dreamworks.boditech.driver.DeviceCommand; import com.dreamworks.boditech.driver.Device; import com.dreamworks.boditech.service.RuntimeVariableService; +import com.dreamworks.boditech.utils.MyCommon; import java.nio.ByteBuffer; import java.nio.ByteOrder; @@ -42,16 +43,13 @@ public class ActuatorBase implements Actuator { protected void waitForFinish() { Integer status = ActuatorModule.MODULE_STATUS_BUSY; do { - ByteBuffer response = this.call(DeviceCommand.CMD_MODULE_GET_STATUS); - if ( null == response ) { - continue ; - } - status = this.getIntegerFromResponse(response, 0); try { - Thread.sleep(100); - } catch (InterruptedException e) { - e.printStackTrace(); + ByteBuffer response = this.call(DeviceCommand.CMD_MODULE_GET_STATUS); + status = this.getIntegerFromResponse(response, 0); + } catch ( RuntimeException e ) { + continue; } + MyCommon.easySleep(100); } while (!Objects.equals(status, ActuatorModule.MODULE_STATUS_IDLE)); } diff --git a/src/main/java/com/dreamworks/boditech/driver/connection/ComWebsocketClient.java b/src/main/java/com/dreamworks/boditech/driver/connection/ComWebsocketClient.java index 5974cd0..870784b 100644 --- a/src/main/java/com/dreamworks/boditech/driver/connection/ComWebsocketClient.java +++ b/src/main/java/com/dreamworks/boditech/driver/connection/ComWebsocketClient.java @@ -44,6 +44,7 @@ public class ComWebsocketClient extends WebSocketClient { if ( requestItem.isResponseReceived ) { return ; } + LOG.info("device -- timeout"); requestItem.response = null; requestItem.errorCode = ClientRequest.ERROR_CODE_TIMEOUT; requestItem.notify(); @@ -51,7 +52,7 @@ public class ComWebsocketClient extends WebSocketClient { } }; Timer timer = new Timer(); - timer.schedule(timerTask, 1000); + timer.schedule(timerTask, 3000); synchronized (requestItem) { String cmd = MyByteBuffer.toHex(request.parameter); diff --git a/src/main/java/com/dreamworks/boditech/entity/WebsocketServerMessageErrorEvent.java b/src/main/java/com/dreamworks/boditech/entity/WebsocketServerMessageErrorEvent.java new file mode 100644 index 0000000..6e085af --- /dev/null +++ b/src/main/java/com/dreamworks/boditech/entity/WebsocketServerMessageErrorEvent.java @@ -0,0 +1,6 @@ +package com.dreamworks.boditech.entity; +public class WebsocketServerMessageErrorEvent { + public String type = "error"; + public String code; + public String message; +} diff --git a/src/main/java/com/dreamworks/boditech/service/WebsocketServerService.java b/src/main/java/com/dreamworks/boditech/service/WebsocketServerService.java new file mode 100644 index 0000000..72223eb --- /dev/null +++ b/src/main/java/com/dreamworks/boditech/service/WebsocketServerService.java @@ -0,0 +1,44 @@ +package com.dreamworks.boditech.service; +import jakarta.websocket.*; +import jakarta.websocket.server.ServerEndpoint; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +@Service +@ServerEndpoint("/ws") +public class WebsocketServerService { + private static final Logger LOG = LoggerFactory.getLogger(WebsocketServerService.class); + + // only one session is all we need + private Session session; + + @OnOpen + public void onOpen(Session session) { + this.session = session; + LOG.info("ws server : on open"); + } + + @OnClose + public void onClose() { + LOG.info("ws server : on close"); + } + + @OnMessage + public void onMessage(String message) { + LOG.info("ws server : on message > " + message); + } + + @OnError + public void onError(Session session, Throwable error) { + LOG.info("ws server : on error"); + } + + // send message to client + public void send(Object message) { + try { + this.session.getBasicRemote().sendObject(message); + } catch (Exception e) { + LOG.error("ws server : send error", e); + } + } +} diff --git a/src/main/java/com/dreamworks/boditech/utils/BoditechDeviceCmd.java b/src/main/java/com/dreamworks/boditech/utils/BoditechDeviceCmd.java deleted file mode 100644 index 70c8359..0000000 --- a/src/main/java/com/dreamworks/boditech/utils/BoditechDeviceCmd.java +++ /dev/null @@ -1,61 +0,0 @@ -package com.dreamworks.boditech.utils; -public class BoditechDeviceCmd { - public static final short[] MODULE_PING = {1, 0}; - public static final short[] MODULE_STOP = {1, 1}; - public static final short[] MODULE_BREAK = {1, 2}; - public static final short[] MODULE_GET_LAST_EXEC_STATUS = {1, 3}; - public static final short[] MODULE_GET_STATUS = {1, 4}; - public static final short[] MODULE_SET_REG = {1, 5}; - public static final short[] MODULE_GET_REG = {1, 6}; - public static final short[] MODULE_READIO = {1, 7}; - public static final short[] MODULE_WRITEIO = {1, 8}; - public static final short[] MODULE_READ_ADC = {1, 9}; - public static final short[] MODULE_GET_ERROR = {1, 10}; - public static final short[] MODULE_CLEAR_ERROR = {1, 11}; - public static final short[] MODULE_SET_INITED_FLAG = {1, 12}; - public static final short[] MODULE_GET_INITED_FLAG = {1, 13}; - public static final short[] MODULE_FACTORY_RESET = {1, 14}; - public static final short[] MODULE_FLUSH_CFG = {1, 15}; - public static final short[] MODULE_ACTIVE_CFG = {1, 16}; - public static final short[] MODULE_READ_RAW = {1, 19}; - public static final short[] MODULE_ENABLE = {1, 20}; - public static final short[] MODULE_START = {1, 21}; - - public static final short[] MOTOR_ENABLE = {2, 1}; - public static final short[] MOTOR_ROTATE = {2, 2}; - public static final short[] MOTOR_MOVE_BY = {2, 3}; - public static final short[] MOTOR_MOVE_TO = {2, 4}; - public static final short[] MOTOR_ROTATE_ACCTIME = {2, 5}; - public static final short[] MOTOR_MOVE_BY_ACCTIME = {2, 6}; - public static final short[] MOTOR_MOVE_TO_ACCTIME = {2, 7}; - public static final short[] MOTOR_ROTATE_WITH_TORQUE = {2, 8}; - public static final short[] MOTOR_MOVE_TO_ZERO_FORWARD = {2, 9}; - public static final short[] MOTOR_MOVE_TO_ZERO_BACKWARD = {2, 10}; - public static final short[] MOTOR_READ_POS = {2, 11}; - public static final short[] MOTOR_SET_CURRENT_POS_BY_CHANGE_SHIFT = {2, 12}; - public static final short[] MOTOR_MOVE_TO_ZERO_FORWARD_AND_CALCULATED_SHIFT = {2, 13}; - public static final short[] MOTOR_MOVE_TO_ZERO_BACKWARD_AND_CALCULATED_SHIFT = {2, 14}; - public static final short[] MOTOR_MOVE_TO_TORQUE = {2, 15}; - public static final short[] MOTOR_CALCULATED_POS_BY_MOVE_TO_ZERO = {2, 16}; - public static final short[] MOTOR_EASY_ROTATE = {2, 17}; - public static final short[] MOTOR_EASY_MOVE_BY = {2, 18}; - public static final short[] MOTOR_EASY_MOVE_TO = {2, 19}; - public static final short[] MOTOR_EASY_MOVE_TO_ZERO = {2, 20}; - public static final short[] MOTOR_EASY_SET_CURRENT_POS = {2, 21}; - - public static final short[] XYMOTOR_ENABLE = {3, 1}; - public static final short[] XYMOTOR_MOVE_BY = {3, 2}; - public static final short[] XYMOTOR_MOVE_TO = {3, 3}; - public static final short[] XYMOTOR_MOVE_TO_ZERO = {3, 4}; - public static final short[] XYMOTOR_MOVE_TO_ZERO_AND_CALCULATED_SHIFT = {3, 5}; - public static final short[] XYMOTOR_READ_POS = {3, 6}; - public static final short[] XYMOTOR_CALCULATED_POS_BY_MOVE_TO_ZERO = {3, 7}; - - public static final short[] CODE_SCANER_START_SCAN = {4, 1}; - public static final short[] CODE_SCANER_STOP_SCAN = {4, 2}; - public static final short[] CODE_SCANER_READ_SCANER_RESULT = {4, 3}; - - public static final short[] PIPETTE_CTRL_INIT_DEVICE = {5, 1}; - public static final short[] PIPETTE_CTRL_PUT_TIP = {5, 2}; - public static final short[] PIPETTE_CTRL_MOVE_TO_UL = {5, 3}; -} diff --git a/src/main/java/com/dreamworks/boditech/utils/MyWebsocketServer.java b/src/main/java/com/dreamworks/boditech/utils/MyWebsocketServer.java deleted file mode 100644 index 13722fe..0000000 --- a/src/main/java/com/dreamworks/boditech/utils/MyWebsocketServer.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.dreamworks.boditech.utils; -import jakarta.websocket.*; -import jakarta.websocket.server.ServerEndpoint; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.stereotype.Component; - -@Component -@ServerEndpoint("/ws") -public class MyWebsocketServer { - private static final Logger LOG = LoggerFactory.getLogger(MyWebsocketServer.class); - - private Session session; - - @OnOpen - public void onOpen(Session session) { - this.session = session; - LOG.info("ws server : on open"); - } - - @OnClose - public void onClose() { - LOG.info("ws server : on close"); - } - - @OnMessage - public void onMessage(String message) { - LOG.info("ws server : on message > " + message); - } - - @OnError - public void onError(Session session, Throwable error) { - LOG.info("ws server : on error"); - } -} diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml new file mode 100644 index 0000000..3d77433 --- /dev/null +++ b/src/main/resources/application-dev.yml @@ -0,0 +1,17 @@ +spring: + datasource: + url: jdbc:mysql://localhost:3306/boditech + username : root + password: 123456 + driver-class-name: com.mysql.cj.jdbc.Driver + +app: + device: + debug : true + connectionType : WebSocket # SerialPort, WebSocket + path : COM3 + baudrate : 921600 + wsuri : ws://192.168.8.10:19005 + + websocket: + port : 19006 \ No newline at end of file diff --git a/src/main/resources/application-test.yml b/src/main/resources/application-test.yml new file mode 100644 index 0000000..69fc4fb --- /dev/null +++ b/src/main/resources/application-test.yml @@ -0,0 +1,17 @@ +spring: + datasource: + url: jdbc:mysql://localhost:3306/boditech + username : root + password: o0SXPBiWbtIGXOb3lfpJ9sVcG8ELNcha + driver-class-name: com.mysql.cj.jdbc.Driver + +app: + device: + debug : true + connectionType : WebSocket # SerialPort, WebSocket + path : COM3 + baudrate : 921600 + wsuri : ws://192.168.8.10:19005 + + websocket: + port : 19006 \ No newline at end of file diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 704d706..caf4dfc 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -1,14 +1,3 @@ spring: - datasource: - url: jdbc:mysql://localhost:3306/boditech - username : root - password: 123456 - driver-class-name: com.mysql.cj.jdbc.Driver - -app: - device: - debug : true - connectionType : WebSocket # SerialPort, WebSocket - path : COM3 - baudrate : 921600 - wsuri : ws://192.168.8.10:19005 \ No newline at end of file + profiles: + active: dev \ No newline at end of file