From 3ad76f98fa8b4a9d3d95207cfb4ae4706087c964 Mon Sep 17 00:00:00 2001
From: 张世豪 <979909237@qq.com>
Date: 星期四, 04 十二月 2025 19:14:15 +0800
Subject: [PATCH] 新增20251204

---
 src/udpdell/UDPServer.java |  110 ++++++++++++++++++++++++++++++++----------------------
 1 files changed, 65 insertions(+), 45 deletions(-)

diff --git a/src/udpdell/UDPServer.java b/src/udpdell/UDPServer.java
index ee7b975..7243090 100644
--- a/src/udpdell/UDPServer.java
+++ b/src/udpdell/UDPServer.java
@@ -5,6 +5,7 @@
 import java.net.SocketException;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
+import java.util.concurrent.atomic.AtomicInteger;
 
 import gecaoji.Device;
 import zhuye.Coordinate;
@@ -14,6 +15,8 @@
 	private static final int BUFFER_SIZE = 65507; // UDP鏈�澶у寘澶у皬
 	private static final int THREAD_POOL_SIZE = 100; // 绾跨▼姹犲ぇ灏�
 
+	private static final AtomicInteger RECEIVED_PACKET_COUNTER = new AtomicInteger(0);
+
 	private static volatile Thread serverThread;
 
 	/**
@@ -69,7 +72,64 @@
 		}
 	}
 
+	public static void processIncomingMessage(String message) {
+		String[] fields = message.split(",");
+		// 妫�鏌ュ瓧娈垫暟閲忔槸鍚﹀畬鏁�
+		if (fields.length != 21) {
+			System.err.println("Invalid message format, expected 21 fields but got " + fields.length);
+			return;
+		}
 
+		// 妫�鏌ュ寘澶存槸鍚︽纭�
+		if (!fields[0].equals("$GNGGA")) {
+			System.err.println("Invalid message header: " + fields[0]);
+			return;
+		}
+		int sequence = incrementReceivedPacketCounter();
+		System.out.println("鏀跺埌浜嗗樊鍒嗘暟鎹�(" + sequence + ")锛�" + message);
+		Coordinate.parseGNGGAToCoordinateList(message);
+		int count = Coordinate.coordinates.size();
+		System.out.println("savenum:" + count);
+
+		Device.updateFromGNGGA(message, fields[15]);
+	}
+	
+	/**澶勭悊涓插彛鎺ユ敹鍒扮殑鏁版嵁*/
+	public static void processSerialData(String message) {
+		String[] fields = message.split(",");
+		// 妫�鏌ュ瓧娈垫暟閲忔槸鍚﹀畬鏁�
+		if (fields.length < 15) {
+			System.err.println("Invalid serial GNGGA format, expected at least 15 fields but got " + fields.length);
+			return;
+		}
+
+		// 妫�鏌ュ寘澶存槸鍚︽纭�
+		if (!fields[0].equals("$GNGGA")) {
+			System.err.println("Invalid message header: " + fields[0]);
+			return;
+		}
+		int sequence = incrementReceivedPacketCounter();
+		System.out.println("鏀跺埌浜嗕覆鍙f暟鎹�(" + sequence + ")锛�" + message);
+		Coordinate.dellchuankougngga(message);
+		int count = Coordinate.coordinates.size();
+		System.out.println("savenum:" + count);
+
+		Device.updateFromSerialGNGGA(message);
+	}
+
+	private static int incrementReceivedPacketCounter() {
+		return RECEIVED_PACKET_COUNTER.updateAndGet(current -> {
+			int next = current + 1;
+			if (next > 10000 || next <= 0) {
+				next = 1;
+			}
+			return next;
+		});
+	}
+
+	public static int getReceivedPacketCount() {
+		return RECEIVED_PACKET_COUNTER.get();
+	}
 
 	private static class PacketProcessor implements Runnable {
 		private final DatagramPacket packet;
@@ -78,60 +138,20 @@
 			this.packet = packet;
 		}
 
+		@Override
 		public void run() {
 			String receivedData = new String(packet.getData(), 0, packet.getLength());
 			// 澶勭悊鍙兘鐨勮繛鍖呮儏鍐�
 			String[] messages = receivedData.split("\\$");
 
 			for (String message : messages) {
-				if (message.isEmpty()) continue;
+				if (message.isEmpty()) {
+					continue;
+				}
 				// 閲嶆柊娣诲姞$绗﹀彿浠ヤ究缁熶竴澶勭悊
 				String fullMessage = "$" + message;
-				processMessage(fullMessage);
+				processIncomingMessage(fullMessage);
 			}
 		}
-
-		private void processMessage(String message) {
-			String[] fields = message.split(",");
-			// 妫�鏌ュ瓧娈垫暟閲忔槸鍚﹀畬鏁�
-			if (fields.length != 21) {
-				System.err.println("Invalid message format, expected 21 fields but got " + fields.length);
-				return;
-			}
-
-			// 妫�鏌ュ寘澶存槸鍚︽纭�
-			if (!fields[0].equals("$GNGGA")) {
-				System.err.println("Invalid message header: " + fields[0]);
-				return;
-			}
-			System.out.println("鏀跺埌浜嗗樊鍒嗘暟鎹細"+message);
-			Coordinate.parseGNGGAToCoordinateList(message);
-			int count= Coordinate.coordinates.size();
-			System.out.println("savenum:"+count);
-
-			Device.updateFromGNGGA(message, fields[15]);            
-			//            // 鎵撳嵃瑙f瀽鍚庣殑鏁版嵁
-			//            System.out.println("UTC鏃堕棿: " + fields[1].toUpperCase());
-			//            System.out.println("绾害: " + fields[2].toUpperCase());
-			//            System.out.println("绾害鍗婄悆: " + fields[3].toUpperCase());
-			//            System.out.println("缁忓害: " + fields[4].toUpperCase());
-			//            System.out.println("缁忓害鍗婄悆: " + fields[5].toUpperCase());
-			//            System.out.println("瀹氫綅璐ㄩ噺鎸囩ず: " + fields[6].toUpperCase());
-			//            System.out.println("鍗槦鏁伴噺: " + fields[7].toUpperCase());
-			//            System.out.println("姘村钩绮惧害鍥犲瓙: " + fields[8].toUpperCase());
-			//            System.out.println("娴锋嫈楂樺害: " + fields[9].toUpperCase());
-			//            System.out.println("娴锋嫈楂樺害鍗曚綅: " + fields[10].toUpperCase());
-			//            System.out.println("澶у湴姘村噯闈㈤珮搴�: " + fields[11].toUpperCase());
-			//            System.out.println("澶у湴姘村噯闈㈤珮搴﹀崟浣�: " + fields[12].toUpperCase());
-			//            System.out.println("宸垎鏃堕棿: " + fields[13].toUpperCase());
-			//            System.out.println("鏍¢獙鍜�: " + fields[14].toUpperCase());
-			//            System.out.println("璁惧缂栧彿: " + fields[15].toUpperCase());
-			//            System.out.println("璁惧鐢甸噺: " + fields[16].toUpperCase());
-			//            System.out.println("鍗槦淇″彿寮哄害: " + fields[17].toUpperCase());
-			//            System.out.println("淇濈暀浣�1: " + fields[18].toUpperCase());
-			//            System.out.println("淇濈暀浣�2: " + fields[19].toUpperCase());
-			//            System.out.println("淇濈暀浣�3: " + fields[20].toUpperCase());
-			//            System.out.println("----------------------------------------");
-		}
 	}
 }
\ No newline at end of file

--
Gitblit v1.10.0