From 48ee74129bb09a817a0bbbabe860c4007b74c66b Mon Sep 17 00:00:00 2001
From: 826220679@qq.com <826220679@qq.com>
Date: 星期日, 21 十二月 2025 12:37:44 +0800
Subject: [PATCH] 新增了往返路径

---
 src/udpdell/UDPServer.java |   61 ++++++++++++++++++++++++++++++
 1 files changed, 60 insertions(+), 1 deletions(-)

diff --git a/src/udpdell/UDPServer.java b/src/udpdell/UDPServer.java
index 1ee1bde..b59526f 100644
--- a/src/udpdell/UDPServer.java
+++ b/src/udpdell/UDPServer.java
@@ -5,15 +5,20 @@
 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;
 
+import publicway.Gpstoxuzuobiao;
+
 public class UDPServer {
 	private static final int PORT = 7000; // 榛樿UDP鐩戝惉绔彛
 	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;
 
 	/**
@@ -82,13 +87,67 @@
 			System.err.println("Invalid message header: " + fields[0]);
 			return;
 		}
-		System.out.println("鏀跺埌浜嗗樊鍒嗘暟鎹細" + message);
+		int sequence = incrementReceivedPacketCounter();
+		System.out.println("鏀跺埌浜嗗樊鍒嗘暟鎹�(" + sequence + ")锛�" + message);
+		
+		// 浣跨敤Gpstoxuzuobiao澶勭悊骞惰幏鍙朮Y鍧愭爣
+		double[] xy = Gpstoxuzuobiao.processGNGGAToXY(message);
+		if (xy != null) {
+			// 杩欓噷鍙互灏哫Y鍧愭爣浼犻�掔粰鍏朵粬鏂规硶浣跨敤
+			// System.out.println("UDP GNGGA -> XY: " + xy[0] + ", " + xy[1]);
+		}
+		
 		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);
+		
+		// 浣跨敤Gpstoxuzuobiao澶勭悊骞惰幏鍙朮Y鍧愭爣
+		double[] xy = Gpstoxuzuobiao.processGNGGAToXY(message);
+		if (xy != null) {
+			// 杩欓噷鍙互灏哫Y鍧愭爣浼犻�掔粰鍏朵粬鏂规硶浣跨敤
+			// System.out.println("Serial GNGGA -> XY: " + xy[0] + ", " + xy[1]);
+		}
+		
+		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;

--
Gitblit v1.10.0