优化轮播图 发送完成信号

This commit is contained in:
mmc
2026-03-12 20:04:18 +08:00
parent a0df048cb5
commit 00c5e736bd
7 changed files with 74 additions and 75 deletions

View File

@@ -18,14 +18,11 @@ class NetMessageDispatcher {
// 🔥 修改:使用回调函数获取 AppState
final Function? getAppState;
NetMessageDispatcher(this.tcpClient, this.routePlanningRepository, this._pathPlanningService, {this.getAppState});
/// 过滤特定指令的流
Stream<RawPacket> onCommand(int commandCode) {
return tcpClient.packetStream.where((p) => p.command == commandCode);
}
/// 示例解析方法:将 0x02 指令解析为 String
@@ -42,7 +39,7 @@ class NetMessageDispatcher {
return ''; // 返回空字符串,避免流中断
}
});
/* ///return onCommand(0x02).map((p) => utf8.decode(p.payload));*/
/* ///return onCommand(0x02).map((p) => utf8.decode(p.payload));*/
}
/// 示例解析方法:将 0x12 指令解析为 JSON 并转为模型
@@ -52,13 +49,13 @@ class NetMessageDispatcher {
//监听路径规划的开始作业的指令的应答
// if (data[0] == (byte) 0xAB && data[1] == (byte) 0xAA && data[2] == (byte) 0x01) {
// System.out.println("=====下位机回复成功=====" + data[0] + " " + data[1] + " " + data[2] + " " + data[3] + " " +
// data[4] + " " + data[5] + " " + data[6] + " " + data[7] + " " + data[8] + " " + data[9]);
// if (data[5] == (byte) 0x01) {
// Point point = new Point();
// //发送下一个指令
// }
// if (data[0] == (byte) 0xAB && data[1] == (byte) 0xAA && data[2] == (byte) 0x01) {
// System.out.println("=====下位机回复成功=====" + data[0] + " " + data[1] + " " + data[2] + " " + data[3] + " " +
// data[4] + " " + data[5] + " " + data[6] + " " + data[7] + " " + data[8] + " " + data[9]);
// if (data[5] == (byte) 0x01) {
// Point point = new Point();
// //发送下一个指令
// }
/// 监听路径规划的开始作业指令的应答 (0x01 指令)
/// 协议格式:AB AA 01 [DATA] CRC(2) AA AB
@@ -83,39 +80,39 @@ class NetMessageDispatcher {
0xAB, 0xAA, 0x01,
...packet.payload,
0x00, 0x00, // CRC 占位
0xAA, 0xAB
0xAA, 0xAB,
];
// 验证头部协议
if (fullData[0] == 0xAB &&
fullData[1] == 0xAA &&
fullData[2] == 0x01) {
if (fullData[0] == 0xAB && fullData[1] == 0xAA && fullData[2] == 0x01) {
debugPrint('[Dispatcher] 下位机回复成功 - 完整数据包:${fullData.join(" ")}');
// 检查状态位 (索引 5 对应 payload 的第 2 个字节)
if (fullData.length > 5 && fullData[5] == 0x01) {
debugPrint('✅ [Dispatcher] 状态位验证通过:0x01 - 可以发送下一个指令');
///取全局的路径规划发送实体 queue
/// 发送下一个指令 移除上一条数据
var queue = _pathPlanningService.getQueue();
var queue = _pathPlanningService.getQueue();
///更新完成jwd
var deviceAddPathPointModel = queue.first;
devicesCubit.setArrivedLocation(
deviceAddPathPointModel.latitude,
deviceAddPathPointModel.longitude
);
devicesCubit.setArrivedLocation(deviceAddPathPointModel.latitude, deviceAddPathPointModel.longitude);
//去除上一条数据
queue.removeFirst();
/// _pathPlanningService.updateQueue(queue as List<DeviceAddPathPointModel>);
_pathPlanningService.updateQueue(queue.toList());
debugPrint('📡 [Dispatcher] 准备触发下一个路径点发送,队列剩余:${queue.length}');
///如果还剩0个数据 就停止发送
if (queue.length==0) {
if (queue.length == 0) {
debugPrint('⚠️ [Dispatcher] 队列已空,停止发送');
// final devicesCubit = sl<DevicesCubit>();
// final devicesCubit = sl<DevicesCubit>();
devicesCubit.finishWork();
Future.delayed(Duration(seconds: 1), () {
devicesCubit.resetWorkStatus();
});
return false;
}
routePlanningRepository.startRoutePlanning(queue);
@@ -135,11 +132,7 @@ class NetMessageDispatcher {
/// [commandCode] 指令码
/// [statusIndex] 状态字节在 payload 中的索引
/// [expectedStatus] 期望的状态值
Stream<RawPacket> onStatusResponse({
required int commandCode,
required int statusIndex,
required int expectedStatus,
}) {
Stream<RawPacket> onStatusResponse({required int commandCode, required int statusIndex, required int expectedStatus}) {
debugPrint('🔍 [Dispatcher] 监听指令应答 CMD: 0x${commandCode.toRadixString(16)}, 期望状态:0x${expectedStatus.toRadixString(16)}');
return onCommand(commandCode).where((packet) {