优化轮播图 发送完成信号
This commit is contained in:
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user