From 1bda9524add969e315d870f284046ecf1097f956 Mon Sep 17 00:00:00 2001
From: 826220679@qq.com <826220679@qq.com>
Date: 星期日, 24 八月 2025 18:01:25 +0800
Subject: [PATCH] 修改

---
 src/dell55AAData/Dell55AA02Parser.java |   85 ++++++++++++++++++++++++------------------
 1 files changed, 48 insertions(+), 37 deletions(-)

diff --git a/src/dell55AAData/Dell55AA02Parser.java b/src/dell55AAData/Dell55AA02Parser.java
index 741ae5e..6ad5b14 100644
--- a/src/dell55AAData/Dell55AA02Parser.java
+++ b/src/dell55AAData/Dell55AA02Parser.java
@@ -1,44 +1,42 @@
 package dell55AAData;
 
+import dell_system.MessageViewPanel;
 import dell_targets.Dell_BaseStation;
+import publicsWay.EfficientTimeFormatter;
 
 public class Dell55AA02Parser {
-	private static final String EXPECTED_HEADER = "55AA02";
-	private static final int MIN_LENGTH = 36; // 18字节 * 2字符/字节
-	private static final int BASE_ID_START = 8;   // 基站ID起始位置(第4字节)
-	private static final int SYNC_STATUS_START = 12; // 同步状态起始位置(第5字节)
-	private static final int PRESSURE_START = 14; // 气压值起始位置(第6字节)
+	private static final int SYNC_STATUS_START = 12;  // 同步状态起始位置(第5字节)
+	private static final int PRESSURE_START = 14;     // 气压值起始位置(第6字节)
+	private static final int MIN_MESSAGE_LENGTH = 22; // 最小有效数据长度
+
+	// 重用StringBuilder减少内存分配
+	private static final ThreadLocal<StringBuilder> hexDataBuilder = 
+			ThreadLocal.withInitial(() -> new StringBuilder(64));
 
 	/**
-	 * 解析55AA02格式的基站数据
+	 * 高效解析55AA02格式的基站数据
 	 * @param message 接收到的数据(十六进制字符串)
 	 */
-	public static void parseAndUpdate(String message) {
+	public static void parse(String message, String ip, int port) {
 		// 1. 基础校验
-		if (message == null || message.length() < MIN_LENGTH) {
+		if (message == null || message.length() < MIN_MESSAGE_LENGTH) {
 			return;
 		}
 
-		// 2. 头部校验(固定开头字符串)
-		for (int i = 0; i < EXPECTED_HEADER.length(); i++) {
-			if (message.charAt(i) != EXPECTED_HEADER.charAt(i)) {
-				return;
-			}
-		}
+		// 2. 解析标签ID (位置8-11, 小端序)
+		char c8 = message.charAt(8);
+		char c9 = message.charAt(9);
+		char c10 = message.charAt(10);
+		char c11 = message.charAt(11);
 
-		// 3. 解析基站ID(原始数据字符串)
-		String baseId = new String(new char[]{
-				message.charAt(BASE_ID_START),
-				message.charAt(BASE_ID_START + 1),
-				message.charAt(BASE_ID_START + 2),
-				message.charAt(BASE_ID_START + 3)
-		});
+		// 直接构建baseId字符串
+		String baseId = new String(new char[]{c10, c11, c8, c9});
 
-		// 4. 解析同步状态(1字节)
-		char syncChar = message.charAt(SYNC_STATUS_START + 1); // 取状态字符
-		String syncStatus = (syncChar == '0') ? "0" : "1";
+		// 3. 解析同步状态(1字节)
+		char syncStatusChar = message.charAt(SYNC_STATUS_START + 1);
+		String syncStatus = (syncStatusChar == '0') ? "0" : "1";
 
-		// 5. 解析气压值(4字节小端序)
+		// 4. 高效解析气压值(4字节小端序)
 		int pressure = 0;
 		for (int i = 0; i < 8; i += 2) {
 			int idx = PRESSURE_START + i;
@@ -46,21 +44,34 @@
 			int byteValue = HexUtils.fastHexToByte(message.charAt(idx), message.charAt(idx + 1));
 			pressure |= (byteValue << (i * 4)); // 小端合并
 		}
-		String pressureStr = String.valueOf(pressure);
 
-		// 6. 更新基站数据		
-		updateBaseStationData(baseId, syncStatus ,pressureStr);
-	}
 
-	/**
-	 * 更新基站数据
-	 * @param baseId 基站ID
-	 * @param syncStatus 同步状态
-	 * @param pressure 气压值字符串
-	 */
-	private static void updateBaseStationData(String baseId, String syncStatus, String pressure) {
+		// 5. 更新基站数据
+		if (MessageViewPanel.isWindowVisible) {
+			StringBuilder sb = hexDataBuilder.get();
+			sb.setLength(0);
+			sb.append("55AA02 AnchorHeart,Anchorid:")
+			.append(baseId)
+			.append(",SyncStatus:")
+			.append(syncStatus)
+			.append(",Pressure:")
+			.append(pressure);
+			MessageViewPanel.showData(sb.toString(), ip, port, 0, "UDPA", "55AA02", baseId);
+		}
+
+		// 延迟创建时间字符串直到必要时刻
+		String time = EfficientTimeFormatter.getCurrentTimeFormatted();
+
+		// 使用预分配字符串常量减少内存分配
+		Dell_BaseStation.updateBaseStationProperty(baseId, "ipAddress", ip);
+		Dell_BaseStation.updateBaseStationProperty(baseId, "port", Integer.toString(port));
+		Dell_BaseStation.updateBaseStationProperty(baseId, "status", "1");
+		Dell_BaseStation.updateBaseStationProperty(baseId, "onlineTime", time);
 		Dell_BaseStation.updateBaseStationProperty(baseId, "syncStatus", syncStatus);
-		Dell_BaseStation.updateBaseStationProperty(baseId, "barometerReading", pressure);
+		Dell_BaseStation.updateBaseStationProperty(baseId, "barometerReading", Integer.toString(pressure));
 	}
 
+
+
+
 }
\ No newline at end of file

--
Gitblit v1.9.3