import 'dart:async'; import '../app_settings/app_settings.dart'; import '../tools/commonDataManage.dart'; import '../tools/eventBusEventManage.dart'; import 'io_sender.dart'; import 'io_type.dart'; import 'io_tool/io_model.dart'; import 'io_tool/manager_event_bus.dart'; import 'sender_beforeDataManage.dart'; typedef CommandSendCallBack = void Function(ErrorType errorType); class CommandSenderManager { static final CommandSenderManager _manager = CommandSenderManager._init(); factory CommandSenderManager() => _manager; static CommandSenderManager getInstance() => _manager; CommandSenderManager._init() { init(); } init() { initLockAddUserSucceedEvent(); } // 下级界面修改成功后传递数据 StreamSubscription? _passCurrentLockInformationEvent; List dataBeforeAddTheUser = []; void initLockAddUserSucceedEvent() { // 蓝牙协议通知传输跟蓝牙之外的数据传输类不一样 eventBus _passCurrentLockInformationEvent = eventBus.on().listen((event) { if (event.type == 0) { sendNormalData(dataBeforeAddTheUser); } else { sendNormalData(event.dataList); } }); } // CommandType lastCommandType = CommandType.readLockStatusInfo; bool canSendControlCommand = false; //TODO:发送常规数据 Future managerSendData( {required SenderProtocol command, bool isBeforeAddUser = false, CommandSendCallBack? callBack}) async { if (callBack != null) { AppLog.log('managerSendData ❌ callBack'); callBack(ErrorType.notConnected); return; } SenderBeforeDataManage().isBeforeAddUser = isBeforeAddUser; List value = command.packageData(); if (isBeforeAddUser == true) { // 如果是添加用户之前调用协议 直接发送 sendNormalData(value); } else { // 添加用户之后调用协议就要判断是否添加用户 if (CommonDataManage().currentLockUserNo == 0) { // 如果LockUserNo为0,先添加用户 var entity = await SenderBeforeDataManage().getAddUserKeyData(); sendNormalData(entity); dataBeforeAddTheUser = value; } else { sendNormalData(value); } } } void sendNormalData(List data) async { if (data.isNotEmpty) { EventBusManager().eventBusFir( EventSendModel(data: data, sendChannel: DataChannel.ble)); } } // Timer? _commandTimer; // List? bufferList = []; // int? outTimeCount = 1; // CommandType? sendCommandType; //发送指令类型 // // void startCommandCutDown(CommandType? commandType, List? data, Function? callBack) async { // // bool needCutDownTime = commandType.cutDown; // int maxResendCount = commandType.resendCnt; // int outMax = commandType.duration; // // if(needCutDownTime){ // lastCommandType = commandType; // cancelCommandCutDown(); // if(needCutDownTime){ // bufferList = data; // _commandTimer = Timer.periodic( Duration( // milliseconds: outMax, // ), (t){ // if(outTimeCount < maxResendCount){ // outTimeCount++; // if(bufferList.length > 0){ // AppLog.log('''' // ------->\n超时 第 $outTimeCount 次 重发 $commandType 指令 ''',error: true); // // if(commandType != CommandType.upgrade){ // // AppLog.log('重发重置帧序号'); // // bufferList.replaceRange(1, 2, [IoManager().commandIndex]); // // } // _sendNormalData(bufferList); // } // }else{ // bufferList = []; // cancelCommandCutDown(); // print('managerSendData ❌ callBack'); // if(callBack != null){ // callBack(ErrorType.timeOut); // } // } // }); // } // } // } // // void cancelCommandCutDown({CommandType commandType}){ // AppLog.log('发送指令类取消定时'); // if(commandType != null && commandType != lastCommandType)return; // if(_commandTimer != null){ // _commandTimer.cancel(); // _commandTimer = null; // } // outTimeCount = 1; // bufferList.clear(); // bufferList = []; // } dispose() { _passCurrentLockInformationEvent?.cancel(); } }