diff --git a/pom.xml b/pom.xml
index 9f4d69f..2562722 100644
--- a/pom.xml
+++ b/pom.xml
@@ -39,6 +39,12 @@
1.0
+
+ org.springframework.boot
+ spring-boot-starter-websocket
+ 2.4.5
+
+
com.gg.reader
diff --git a/pom.xml b/pom.xml
index 9f4d69f..2562722 100644
--- a/pom.xml
+++ b/pom.xml
@@ -39,6 +39,12 @@
1.0
+
+ org.springframework.boot
+ spring-boot-starter-websocket
+ 2.4.5
+
+
com.gg.reader
diff --git a/src/main/java/com/casic/missiles/config/WebSocketConfig.java b/src/main/java/com/casic/missiles/config/WebSocketConfig.java
new file mode 100644
index 0000000..9c9c4b5
--- /dev/null
+++ b/src/main/java/com/casic/missiles/config/WebSocketConfig.java
@@ -0,0 +1,18 @@
+package com.casic.missiles.config;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.socket.server.standard.ServerEndpointExporter;
+
+// tomcat启动无需配置
+@Configuration
+public class WebSocketConfig {
+ /**
+ * 注入ServerEndpointExporter,
+ * 这个bean会自动注册使用了@ServerEndpoint注解声明的Websocket endpoint
+ */
+ @Bean
+ public ServerEndpointExporter serverEndpointExporter() {
+ return new ServerEndpointExporter();
+ }
+}
diff --git a/pom.xml b/pom.xml
index 9f4d69f..2562722 100644
--- a/pom.xml
+++ b/pom.xml
@@ -39,6 +39,12 @@
1.0
+
+ org.springframework.boot
+ spring-boot-starter-websocket
+ 2.4.5
+
+
com.gg.reader
diff --git a/src/main/java/com/casic/missiles/config/WebSocketConfig.java b/src/main/java/com/casic/missiles/config/WebSocketConfig.java
new file mode 100644
index 0000000..9c9c4b5
--- /dev/null
+++ b/src/main/java/com/casic/missiles/config/WebSocketConfig.java
@@ -0,0 +1,18 @@
+package com.casic.missiles.config;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.socket.server.standard.ServerEndpointExporter;
+
+// tomcat启动无需配置
+@Configuration
+public class WebSocketConfig {
+ /**
+ * 注入ServerEndpointExporter,
+ * 这个bean会自动注册使用了@ServerEndpoint注解声明的Websocket endpoint
+ */
+ @Bean
+ public ServerEndpointExporter serverEndpointExporter() {
+ return new ServerEndpointExporter();
+ }
+}
diff --git a/src/main/java/com/casic/missiles/cotroller/BusinessReadWriterController.java b/src/main/java/com/casic/missiles/cotroller/BusinessReadWriterController.java
index 8617f24..8a5724f 100644
--- a/src/main/java/com/casic/missiles/cotroller/BusinessReadWriterController.java
+++ b/src/main/java/com/casic/missiles/cotroller/BusinessReadWriterController.java
@@ -142,35 +142,20 @@
param.antenna = 0x01;
param.isLoop = true;
param.tidParameter = new byte[]{0,8};
- boolean b = reader.reader_Inventory(param, (byte) 0x01);
-// System.out.println("开始盘点:" + b);
-// boolean b1 = reader.ScanUserData(0x01,true,2);
-
-// boolean b = reader.ScanEPC(0x01,true);
- boolean b2 = reader.ScanTID(0x01,true,8);
-// System.out.println("开始盘点:" + b1);
-// reader.OnRxdGpiTriggerState
-
+ boolean b = reader.reader_Inventory(param, (byte) 0x00);
reader.OnTagDataReceivedHandle = (gateName, tagData) -> {
if (tagData != null && tagData.getEPC() != null) {
-
String s = Util.convertByteArrayToHexString(tagData.getTID());
-// String s1 = Util.convertByteArrayToHexString(tagData.getUserData());
-// String s2 = Util.convertByteArrayToHexString(tagData.getTID());
- System.out.println("1读取到EPC:" + s);
-// System.out.println("用户区:"+s1);
-// System.out.println("TID:"+s2);
+ System.out.println("1读取到TID:" + s);
}
};
new Timer().schedule(new TimerTask() {
@Override
public void run() {
boolean stop = reader.reader_StopInventory();
-
System.out.println("停止盘点:" + stop);
-
}
- }, 2000);
+ }, 5000);
} else if (bh == 4) {
diff --git a/pom.xml b/pom.xml
index 9f4d69f..2562722 100644
--- a/pom.xml
+++ b/pom.xml
@@ -39,6 +39,12 @@
1.0
+
+ org.springframework.boot
+ spring-boot-starter-websocket
+ 2.4.5
+
+
com.gg.reader
diff --git a/src/main/java/com/casic/missiles/config/WebSocketConfig.java b/src/main/java/com/casic/missiles/config/WebSocketConfig.java
new file mode 100644
index 0000000..9c9c4b5
--- /dev/null
+++ b/src/main/java/com/casic/missiles/config/WebSocketConfig.java
@@ -0,0 +1,18 @@
+package com.casic.missiles.config;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.socket.server.standard.ServerEndpointExporter;
+
+// tomcat启动无需配置
+@Configuration
+public class WebSocketConfig {
+ /**
+ * 注入ServerEndpointExporter,
+ * 这个bean会自动注册使用了@ServerEndpoint注解声明的Websocket endpoint
+ */
+ @Bean
+ public ServerEndpointExporter serverEndpointExporter() {
+ return new ServerEndpointExporter();
+ }
+}
diff --git a/src/main/java/com/casic/missiles/cotroller/BusinessReadWriterController.java b/src/main/java/com/casic/missiles/cotroller/BusinessReadWriterController.java
index 8617f24..8a5724f 100644
--- a/src/main/java/com/casic/missiles/cotroller/BusinessReadWriterController.java
+++ b/src/main/java/com/casic/missiles/cotroller/BusinessReadWriterController.java
@@ -142,35 +142,20 @@
param.antenna = 0x01;
param.isLoop = true;
param.tidParameter = new byte[]{0,8};
- boolean b = reader.reader_Inventory(param, (byte) 0x01);
-// System.out.println("开始盘点:" + b);
-// boolean b1 = reader.ScanUserData(0x01,true,2);
-
-// boolean b = reader.ScanEPC(0x01,true);
- boolean b2 = reader.ScanTID(0x01,true,8);
-// System.out.println("开始盘点:" + b1);
-// reader.OnRxdGpiTriggerState
-
+ boolean b = reader.reader_Inventory(param, (byte) 0x00);
reader.OnTagDataReceivedHandle = (gateName, tagData) -> {
if (tagData != null && tagData.getEPC() != null) {
-
String s = Util.convertByteArrayToHexString(tagData.getTID());
-// String s1 = Util.convertByteArrayToHexString(tagData.getUserData());
-// String s2 = Util.convertByteArrayToHexString(tagData.getTID());
- System.out.println("1读取到EPC:" + s);
-// System.out.println("用户区:"+s1);
-// System.out.println("TID:"+s2);
+ System.out.println("1读取到TID:" + s);
}
};
new Timer().schedule(new TimerTask() {
@Override
public void run() {
boolean stop = reader.reader_StopInventory();
-
System.out.println("停止盘点:" + stop);
-
}
- }, 2000);
+ }, 5000);
} else if (bh == 4) {
diff --git a/src/main/java/com/casic/missiles/service/impl/BusinessReadWriterServiceImpl.java b/src/main/java/com/casic/missiles/service/impl/BusinessReadWriterServiceImpl.java
index 41807cb..172becf 100644
--- a/src/main/java/com/casic/missiles/service/impl/BusinessReadWriterServiceImpl.java
+++ b/src/main/java/com/casic/missiles/service/impl/BusinessReadWriterServiceImpl.java
@@ -7,6 +7,7 @@
import com.casic.missiles.model.ReturnUtil;
import com.casic.missiles.service.IBusinessReadWriterService;
import com.casic.missiles.utils.SerialPortUtil;
+import com.casic.missiles.utils.WebSocket;
import com.gg.reader.api.dal.GClient;
import com.gg.reader.api.dal.HandlerTagEpcLog;
import com.gg.reader.api.dal.HandlerTagEpcOver;
@@ -34,12 +35,14 @@
* @Date: 2023/6/15 16:03
*/
@Slf4j
-@Service
+@Service("readWriterServiceBean")
public class BusinessReadWriterServiceImpl implements IBusinessReadWriterService {
@Autowired
private ForkJoinPool forkJoinPool;
@Autowired
private ReadWriterConfig readWriterConfig;
+ @Autowired
+ private WebSocket webSocket;
public static SerialPort serialPort = null;
@@ -267,12 +270,13 @@
param.tidParameter = new byte[]{0, 8};
param.writePower = readWriterConfig.getWritePower();
param.readPower = readWriterConfig.getReadPower();
- boolean b = reader.reader_Inventory(param, (byte) 0x01);
+ boolean b = reader.reader_Inventory(param, (byte) 0x00);
log.info("大读写器开始盘点:" + b);
reader.OnTagDataReceivedHandle = (gateName, tagData) -> {
if (tagData != null && tagData.getTID() != null) {
String tid = Util.convertByteArrayToHexString(tagData.getTID());
log.info("大读写器TID标签读取成功");
+ webSocket.sendAllMessage(tid);
tIds.add(tid);
}
};
diff --git a/pom.xml b/pom.xml
index 9f4d69f..2562722 100644
--- a/pom.xml
+++ b/pom.xml
@@ -39,6 +39,12 @@
1.0
+
+ org.springframework.boot
+ spring-boot-starter-websocket
+ 2.4.5
+
+
com.gg.reader
diff --git a/src/main/java/com/casic/missiles/config/WebSocketConfig.java b/src/main/java/com/casic/missiles/config/WebSocketConfig.java
new file mode 100644
index 0000000..9c9c4b5
--- /dev/null
+++ b/src/main/java/com/casic/missiles/config/WebSocketConfig.java
@@ -0,0 +1,18 @@
+package com.casic.missiles.config;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.socket.server.standard.ServerEndpointExporter;
+
+// tomcat启动无需配置
+@Configuration
+public class WebSocketConfig {
+ /**
+ * 注入ServerEndpointExporter,
+ * 这个bean会自动注册使用了@ServerEndpoint注解声明的Websocket endpoint
+ */
+ @Bean
+ public ServerEndpointExporter serverEndpointExporter() {
+ return new ServerEndpointExporter();
+ }
+}
diff --git a/src/main/java/com/casic/missiles/cotroller/BusinessReadWriterController.java b/src/main/java/com/casic/missiles/cotroller/BusinessReadWriterController.java
index 8617f24..8a5724f 100644
--- a/src/main/java/com/casic/missiles/cotroller/BusinessReadWriterController.java
+++ b/src/main/java/com/casic/missiles/cotroller/BusinessReadWriterController.java
@@ -142,35 +142,20 @@
param.antenna = 0x01;
param.isLoop = true;
param.tidParameter = new byte[]{0,8};
- boolean b = reader.reader_Inventory(param, (byte) 0x01);
-// System.out.println("开始盘点:" + b);
-// boolean b1 = reader.ScanUserData(0x01,true,2);
-
-// boolean b = reader.ScanEPC(0x01,true);
- boolean b2 = reader.ScanTID(0x01,true,8);
-// System.out.println("开始盘点:" + b1);
-// reader.OnRxdGpiTriggerState
-
+ boolean b = reader.reader_Inventory(param, (byte) 0x00);
reader.OnTagDataReceivedHandle = (gateName, tagData) -> {
if (tagData != null && tagData.getEPC() != null) {
-
String s = Util.convertByteArrayToHexString(tagData.getTID());
-// String s1 = Util.convertByteArrayToHexString(tagData.getUserData());
-// String s2 = Util.convertByteArrayToHexString(tagData.getTID());
- System.out.println("1读取到EPC:" + s);
-// System.out.println("用户区:"+s1);
-// System.out.println("TID:"+s2);
+ System.out.println("1读取到TID:" + s);
}
};
new Timer().schedule(new TimerTask() {
@Override
public void run() {
boolean stop = reader.reader_StopInventory();
-
System.out.println("停止盘点:" + stop);
-
}
- }, 2000);
+ }, 5000);
} else if (bh == 4) {
diff --git a/src/main/java/com/casic/missiles/service/impl/BusinessReadWriterServiceImpl.java b/src/main/java/com/casic/missiles/service/impl/BusinessReadWriterServiceImpl.java
index 41807cb..172becf 100644
--- a/src/main/java/com/casic/missiles/service/impl/BusinessReadWriterServiceImpl.java
+++ b/src/main/java/com/casic/missiles/service/impl/BusinessReadWriterServiceImpl.java
@@ -7,6 +7,7 @@
import com.casic.missiles.model.ReturnUtil;
import com.casic.missiles.service.IBusinessReadWriterService;
import com.casic.missiles.utils.SerialPortUtil;
+import com.casic.missiles.utils.WebSocket;
import com.gg.reader.api.dal.GClient;
import com.gg.reader.api.dal.HandlerTagEpcLog;
import com.gg.reader.api.dal.HandlerTagEpcOver;
@@ -34,12 +35,14 @@
* @Date: 2023/6/15 16:03
*/
@Slf4j
-@Service
+@Service("readWriterServiceBean")
public class BusinessReadWriterServiceImpl implements IBusinessReadWriterService {
@Autowired
private ForkJoinPool forkJoinPool;
@Autowired
private ReadWriterConfig readWriterConfig;
+ @Autowired
+ private WebSocket webSocket;
public static SerialPort serialPort = null;
@@ -267,12 +270,13 @@
param.tidParameter = new byte[]{0, 8};
param.writePower = readWriterConfig.getWritePower();
param.readPower = readWriterConfig.getReadPower();
- boolean b = reader.reader_Inventory(param, (byte) 0x01);
+ boolean b = reader.reader_Inventory(param, (byte) 0x00);
log.info("大读写器开始盘点:" + b);
reader.OnTagDataReceivedHandle = (gateName, tagData) -> {
if (tagData != null && tagData.getTID() != null) {
String tid = Util.convertByteArrayToHexString(tagData.getTID());
log.info("大读写器TID标签读取成功");
+ webSocket.sendAllMessage(tid);
tIds.add(tid);
}
};
diff --git a/src/main/java/com/casic/missiles/utils/WebSocket.java b/src/main/java/com/casic/missiles/utils/WebSocket.java
new file mode 100644
index 0000000..7a4fef0
--- /dev/null
+++ b/src/main/java/com/casic/missiles/utils/WebSocket.java
@@ -0,0 +1,104 @@
+package com.casic.missiles.utils;
+
+import com.casic.missiles.service.IBusinessReadWriterService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+
+import javax.websocket.OnClose;
+import javax.websocket.OnMessage;
+import javax.websocket.OnOpen;
+import javax.websocket.Session;
+import javax.websocket.server.PathParam;
+import javax.websocket.server.ServerEndpoint;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.CopyOnWriteArraySet;
+import java.util.concurrent.ExecutionException;
+
+/**
+ * @Description: Websocket ServerEndpoint
+ * @Author: wangpeng
+ * @Date: 2023/2/23 11:48
+ */
+@Slf4j
+@Component
+@ServerEndpoint("/websocket/{userId}")
+public class WebSocket {
+ private Session session;
+
+ private static CopyOnWriteArraySet webSockets = new CopyOnWriteArraySet<>();
+ private static Map sessionPool = new HashMap<>();
+
+ @OnOpen
+ public void onOpen(Session session, @PathParam(value = "userId") String userId) throws ExecutionException, InterruptedException {
+ this.session = session;
+ webSockets.add(this);
+ sessionPool.put(userId, session);
+ log.info(userId + "【websocket消息】有新的连接,总数为:" + webSockets.size());
+ log.info("websocket receive connect size:" + webSockets.size());
+ IBusinessReadWriterService readWriterService = SpringContextUtil.getBean("readWriterServiceBean");
+ readWriterService.tIdAndMiniAndGunReadList();
+// System.out.println(userId + "【websocket消息】有新的连接,总数为:" + webSockets.size());
+ }
+
+ @OnClose
+ public void onClose() {
+ webSockets.remove(this);
+ log.info("【websocket消息】连接断开,总数为:" + webSockets.size());
+// System.out.println("【websocket消息】连接断开,总数为:" + webSockets.size());
+ }
+
+ @OnMessage
+ public void onMessage(String message) {
+ log.info("【websocket消息】收到客户端消息:" + message);
+// System.out.println("【websocket消息】收到客户端消息:" + message);
+ }
+
+ // 此为广播消息
+ public void sendAllMessage(String message) {
+ for (WebSocket webSocket : webSockets) {
+ log.info("【websocket消息】广播消息:" + message);
+// System.out.println("【websocket消息】广播消息:" + message);
+ try {
+ webSocket.session.getAsyncRemote().sendText(message);
+ } catch (Exception e) {
+ log.error("【websocket消息】广播消息发送异常");
+ e.printStackTrace();
+ }
+ }
+ }
+
+ // 发送列表消息
+ public void sendListMessage(List userIds, String message) {
+ log.info("【websocket消息】列表消息:" + message);
+// System.out.println("【websocket消息】列表消息:" + message);
+ for (String userId : userIds) {
+ Session session = sessionPool.get(userId);
+ if (session != null) {
+ try {
+ session.getAsyncRemote().sendText(message);
+ } catch (Exception e) {
+ log.error("【websocket消息】列表消息发送异常");
+ e.printStackTrace();
+ }
+ }
+ }
+ }
+
+ // 此为单点消息
+ public void sendOneMessage(String userId, String message) {
+ log.info("【websocket消息】单点消息:" + message);
+// System.out.println("【websocket消息】单点消息:" + message);
+ Session session = sessionPool.get(userId);
+ if (session != null) {
+ try {
+ session.getAsyncRemote().sendText(message);
+ } catch (Exception e) {
+ log.error("【websocket消息】单点消息发送异常");
+ e.printStackTrace();
+ }
+ }
+ }
+
+}