From cbfd1df513c473dd5550d78740c92fc1677b6e9b Mon Sep 17 00:00:00 2001
From: 826220679@qq.com <826220679@qq.com>
Date: 星期六, 27 十二月 2025 13:40:42 +0800
Subject: [PATCH] 异形有障碍物路径规划没完成
---
src/chuankou/dellmessage.java | 25 +++++++++++++++----------
1 files changed, 15 insertions(+), 10 deletions(-)
diff --git a/src/chuankou/dellmessage.java b/src/chuankou/dellmessage.java
index 0469572..0350928 100644
--- a/src/chuankou/dellmessage.java
+++ b/src/chuankou/dellmessage.java
@@ -5,7 +5,7 @@
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicReference;
-import java.util.function.Consumer;
+// import java.util.function.Consumer;
/**
* 涓插彛瀹炴椂鏁版嵁璋冨害涓績銆�
@@ -15,8 +15,8 @@
* GNGGA 鏁版嵁鐨勫唴缃В鏋愭敮鎸侊紝澶嶇敤 UDP 澶勭悊閫昏緫銆�
*/
public final class dellmessage {
- private static final CopyOnWriteArrayList<Consumer<byte[]>> RAW_CONSUMERS = new CopyOnWriteArrayList<>();
- private static final CopyOnWriteArrayList<Consumer<String>> LINE_CONSUMERS = new CopyOnWriteArrayList<>();
+ private static final CopyOnWriteArrayList<DataListener<byte[]>> RAW_CONSUMERS = new CopyOnWriteArrayList<>();
+ private static final CopyOnWriteArrayList<DataListener<String>> LINE_CONSUMERS = new CopyOnWriteArrayList<>();
private static final StringBuilder LINE_BUFFER = new StringBuilder(512);
private static final AtomicInteger LINE_COUNTER = new AtomicInteger(0);
private static final AtomicReference<String> LAST_LINE = new AtomicReference<>("");
@@ -30,7 +30,7 @@
*
* @param consumer 鎺ユ敹瀹屾暣鏁版嵁甯х殑鐩戝惉鍣�
*/
- public static void registerRawListener(Consumer<byte[]> consumer) {
+ public static void registerRawListener(DataListener<byte[]> consumer) {
// 鐢ㄦ硶锛氬湪闇�瑕佺洿鎺ュ鐞嗗師濮嬩覆鍙e瓧鑺傛祦鐨勬ā鍧楀惎鍔ㄦ椂璋冪敤锛屼紶鍏ュ洖璋冨鐞嗘暟鎹抚銆�
if (consumer != null) {
RAW_CONSUMERS.addIfAbsent(consumer);
@@ -40,7 +40,7 @@
/**
* 娉ㄩ攢鍘熷瀛楄妭鐩戝惉鍣ㄣ��
*/
- public static void unregisterRawListener(Consumer<byte[]> consumer) {
+ public static void unregisterRawListener(DataListener<byte[]> consumer) {
// 鐢ㄦ硶锛氭ā鍧楅攢姣佹垨涓嶅啀闇�瑕佹帴鏀跺師濮嬫暟鎹椂璋冪敤锛岄伩鍏嶅唴瀛樻硠婕忋��
if (consumer != null) {
RAW_CONSUMERS.remove(consumer);
@@ -52,7 +52,7 @@
* <p>
* 姣忎竴鏉$粡鐢辨崲琛岀鎴柇鐨勫畬鏁存枃鏈灏嗚Е鍙戜竴娆″洖璋冦��
*/
- public static void registerLineListener(Consumer<String> consumer) {
+ public static void registerLineListener(DataListener<String> consumer) {
// 鐢ㄦ硶锛氶渶瑕佹寜琛岃鍙栦覆鍙f枃鏈紙濡� NMEA 鎶ユ枃锛夋椂璋冪敤锛屽洖璋冩嬁鍒板畬鏁存枃鏈銆�
if (consumer != null) {
LINE_CONSUMERS.addIfAbsent(consumer);
@@ -62,7 +62,7 @@
/**
* 娉ㄩ攢鏂囨湰琛岀洃鍚櫒銆�
*/
- public static void unregisterLineListener(Consumer<String> consumer) {
+ public static void unregisterLineListener(DataListener<String> consumer) {
// 鐢ㄦ硶锛氬搴� registerLineListener 鐨勫弽娉ㄥ唽鎿嶄綔锛岄�氬父鍦ㄧ獥鍙e叧闂垨鏈嶅姟鍋滄鏃惰皟鐢ㄣ��
if (consumer != null) {
LINE_CONSUMERS.remove(consumer);
@@ -125,7 +125,7 @@
}
private static void notifyRawConsumers(byte[] data) {
- for (Consumer<byte[]> consumer : RAW_CONSUMERS) {
+ for (DataListener<byte[]> consumer : RAW_CONSUMERS) {
try {
consumer.accept(data);
} catch (Exception ex) {
@@ -220,9 +220,14 @@
}
LAST_LINE.set(line);
- LINE_COUNTER.updateAndGet(count -> count >= 10000 ? 1 : count + 1);
+ // LINE_COUNTER.updateAndGet(count -> count >= 10000 ? 1 : count + 1);
+ int current, next;
+ do {
+ current = LINE_COUNTER.get();
+ next = (current >= 10000) ? 1 : current + 1;
+ } while (!LINE_COUNTER.compareAndSet(current, next));
- for (Consumer<String> consumer : LINE_CONSUMERS) {
+ for (DataListener<String> consumer : LINE_CONSUMERS) {
try {
consumer.accept(line);
} catch (Exception ex) {
--
Gitblit v1.10.0