Merge branch 'feature/my' of http://1.95.137.212:57001/APP/FlutterApp into feature/my
This commit is contained in:
@@ -43,8 +43,26 @@ class NetMessageDispatcher {
|
||||
}
|
||||
|
||||
/// 示例解析方法:将 0x12 指令解析为 JSON 并转为模型
|
||||
// Stream<Map<String, dynamic>> onJsonMessage(int cmd) {
|
||||
// return onCommand(cmd).map((p) => jsonDecode(utf8.decode(p.payload)));
|
||||
// }
|
||||
Stream<Map<String, dynamic>> onJsonMessage(int cmd) {
|
||||
return onCommand(cmd).map((p) => jsonDecode(utf8.decode(p.payload)));
|
||||
print('🔵 [Dispatcher] 开始监听 0x${cmd.toRadixString(16)} 指令的 JSON 流');
|
||||
|
||||
return onCommand(cmd).map((p) {
|
||||
try {
|
||||
final jsonString = utf8.decode(p.payload);
|
||||
print('🔵 [Dispatcher] 收到 0x${cmd.toRadixString(16)} 原始数据: $jsonString');
|
||||
|
||||
final jsonMap = jsonDecode(jsonString);
|
||||
print('🔵 [Dispatcher] JSON 解析成功:$jsonMap');
|
||||
|
||||
return jsonMap;
|
||||
} catch (e) {
|
||||
print('❌ [Dispatcher] 0x${cmd.toRadixString(16)} JSON 解析失败:$e, payload=${p.payload}');
|
||||
return {}; // 返回空 map,避免流中断
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
//监听路径规划的开始作业的指令的应答
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import 'dart:async';
|
||||
import 'dart:convert';
|
||||
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
@@ -80,20 +81,58 @@ class AuthCubit extends Cubit<AuthState> {
|
||||
emit(AuthUnauthenticated());
|
||||
}
|
||||
|
||||
/// TCP 指令监听
|
||||
// void _listenToAuthResponse() {
|
||||
// print('>>> [AUTH] begin指令监听: ');
|
||||
// _kickOutSub?.cancel(); // 防止重复监听
|
||||
//
|
||||
// // 假设 0x12 是踢下线或多设备登录提醒
|
||||
// _kickOutSub = dispatcher.onJsonMessage(0x12).listen((json) {
|
||||
// // 如果后端发来指令确认需要退出
|
||||
// print('>>> [AUTH] 收到 0x12: $json');
|
||||
// // logout();
|
||||
// final respond = json['respond'] ?? '';
|
||||
// if (respond == 'have_logged_in') {
|
||||
// logout(); // ✅ 只有特定消息才退出
|
||||
// }
|
||||
// });
|
||||
// }
|
||||
/// TCP 指令监听
|
||||
void _listenToAuthResponse() {
|
||||
print('>>> [AUTH] begin 指令监听:');
|
||||
_kickOutSub?.cancel(); // 防止重复监听
|
||||
|
||||
// 假设 0x12 是踢下线或多设备登录提醒
|
||||
_kickOutSub = dispatcher.onJsonMessage(0x12).listen((json) {
|
||||
// 如果后端发来指令确认需要退出
|
||||
// print('>>> [AUTH] 收到 0x12: $json'); //
|
||||
// logout();
|
||||
final respond = json['respond'] ?? '';
|
||||
if (respond == 'have_logged_in') {
|
||||
logout(); // ✅ 只有特定消息才退出
|
||||
// 直接监听原始数据包,自己处理 JSON 解析(去掉 CRC 字节)
|
||||
_kickOutSub = dispatcher.onCommand(0x12).listen((packet) {
|
||||
print('>>> [AUTH] 收到 0x12 原始包,payload 长度=${packet.payload.length}, 内容=${packet.payload}');
|
||||
|
||||
try {
|
||||
// 🔥 关键:手动去掉最后 2 个 CRC 字节
|
||||
String jsonString;
|
||||
if (packet.payload.length > 2) {
|
||||
jsonString = utf8.decode(packet.payload.sublist(0, packet.payload.length - 2));
|
||||
} else {
|
||||
jsonString = utf8.decode(packet.payload);
|
||||
}
|
||||
|
||||
print('>>> [AUTH] 去除 CRC 后的 JSON: $jsonString');
|
||||
|
||||
final jsonMap = jsonDecode(jsonString);
|
||||
// print('>>> [AUTH] JSON 解析成功:$jsonMap');
|
||||
|
||||
final respond = jsonMap['respond'] ?? '';
|
||||
if (respond == 'have_logged_in') {
|
||||
print('>>> [AUTH] ⚠️ 检测到异地登录 (respond=have_logged_in),开始退出...');
|
||||
logout();
|
||||
} else {
|
||||
// print('>>> [AUTH] ℹ️ 收到其他 0x12 消息,忽略:respond=$respond');
|
||||
}
|
||||
} catch (e) {
|
||||
//print('>>> [AUTH] ❌ 解析失败:$e');
|
||||
}
|
||||
});
|
||||
|
||||
print('>>> [AUTH] ✅ 0x12 监听器已建立完成');
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user