From a8a90fd2d5040e66cc66b3da122a7f82561ff6f6 Mon Sep 17 00:00:00 2001
From: 826220679@qq.com <826220679@qq.com>
Date: 星期六, 09 八月 2025 23:32:29 +0800
Subject: [PATCH] 优化了欢迎页面

---
 src/udptcp/PacketProcessingSystem.java |  104 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 104 insertions(+), 0 deletions(-)

diff --git a/src/udptcp/PacketProcessingSystem.java b/src/udptcp/PacketProcessingSystem.java
new file mode 100644
index 0000000..9ab4b4d
--- /dev/null
+++ b/src/udptcp/PacketProcessingSystem.java
@@ -0,0 +1,104 @@
+package udptcp;
+import java.util.List;
+import java.util.concurrent.ConcurrentLinkedQueue;
+import java.util.concurrent.atomic.AtomicBoolean;
+import dell55AAData.Dell55AA01Parser;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+
+public class PacketProcessingSystem {
+    // 线程安全的报文存储队列(集合A)
+    private static final ConcurrentLinkedQueue<HexPacket> packetQueue = new ConcurrentLinkedQueue<>();
+    private static final AtomicBoolean isRunning = new AtomicBoolean(false);
+    private static final ExecutorService parserExecutor = Executors.newSingleThreadExecutor();
+    private static Thread parserThread;
+
+    // 报文存储结构
+    public static class HexPacket {
+        public final String ip;
+        public final int port;
+        public final String hexData;
+        public final long timestamp;
+
+        public HexPacket(String ip, int port, String hexData, long timestamp) {
+            this.ip = ip;
+            this.port = port;
+            this.hexData = hexData;
+            this.timestamp = timestamp;
+        }
+    }
+
+    // 接收端存储报文(UDPPortAReceiver中调用)
+    public static void storePacket(String ip, int port, String hexData) {
+        if (packetQueue.size() < 100000) { // 限制队列大小防止OOM
+            packetQueue.offer(new HexPacket(ip, port, hexData, System.currentTimeMillis()));
+        }
+    }
+
+    // 启动解析系统
+    public static void startProcessing() {
+        if (isRunning.get()) return;
+        
+        isRunning.set(true);
+        parserThread = new Thread(() -> {
+            PacketParser bufferManager = new PacketParser();
+            
+            while (isRunning.get()) {
+                HexPacket packet = packetQueue.poll();
+                if (packet == null) {
+                    Thread.yield(); // 队列为空时让出CPU
+                    continue;
+                }
+                
+                try {
+                    // 转换HEX为字节数据
+                    byte[] rawData = PacketParser.hexStringToBytes(packet.hexData);                    
+                    // 追加到缓冲区并解析
+                    bufferManager.appendData(rawData, rawData.length);
+                    List<PacketParser.DataPacket> parsedPackets = bufferManager.parsePackets();
+                    
+                    // 处理解析后的数据包
+                    for (PacketParser.DataPacket p : parsedPackets) {
+                        // 根据包头类型路由到不同解析器
+                        switch (p.getPacketType()) {
+                            case 0x01:
+                                processType01(p);break;
+                            case 0x02:
+                                processType02(p);break;
+                            
+                            default:
+                                System.err.println("未知包类型: " + p.getPacketType());
+                        }
+                    }
+                } catch (Exception e) {
+                    System.err.println("解析错误: " + e.getMessage());
+                }
+            }
+        });
+        
+        parserThread.setDaemon(true);
+        parserThread.start();
+    }
+
+    // 停止解析系统
+    public static void stopProcessing() {
+        isRunning.set(false);
+        parserExecutor.shutdownNow();
+        if (parserThread != null) {
+            parserThread.interrupt();
+        }
+    }
+
+    // 示例解析方法(需根据实际协议实现)
+    private static void processType01(PacketParser.DataPacket packet) {
+    	String hexData = PacketParser.bytesToHexString(packet.getPacket());
+        Dell55AA01Parser.parse(hexData);
+    }
+
+    private static void processType02(PacketParser.DataPacket packet) {
+        System.out.println("处理55AA02包: " + packet);
+        // 实际业务逻辑
+    }
+    
+    // 其他类型处理方法...
+}

--
Gitblit v1.9.3