diff --git a/lib/main/lockMian/lockList/lockList_logic.dart b/lib/main/lockMian/lockList/lockList_logic.dart index 58c3137a..0d307de7 100755 --- a/lib/main/lockMian/lockList/lockList_logic.dart +++ b/lib/main/lockMian/lockList/lockList_logic.dart @@ -32,12 +32,10 @@ class LockListLogic extends BaseGetXController { final ShowTipView showTipView = ShowTipView(); List get groupDataListFiltered { - final List list = - groupDataList.map((GroupList e) => e.copy()).toList(); + final List list = groupDataList.map((GroupList e) => e.copy()).toList(); if (state.searchStr.value != '' && state.showSearch.value) { list.forEach((GroupList element) { - element.lockList?.removeWhere((LockListInfoItemEntity element) => - !(element.lockAlias?.contains(state.searchStr.value) ?? true)); + element.lockList?.removeWhere((LockListInfoItemEntity element) => !(element.lockAlias?.contains(state.searchStr.value) ?? true)); }); } if (list.length > 0) { @@ -46,8 +44,7 @@ class LockListLogic extends BaseGetXController { final lockList = element.lockList; if (lockList != null && lockList.length > 0) { lockList.forEach((element) { - if (element.network?.peerId != null && - element.network?.peerId != '') { + if (element.network?.peerId != null && element.network?.peerId != '') { StartChartManage().lockListPeerId.add(element); } }); @@ -68,8 +65,7 @@ class LockListLogic extends BaseGetXController { late StreamSubscription _setLockListInfoGroupEntity; void _initReplySubscription() { - _replySubscription = - EventBusManager().eventBus!.on().listen((Reply reply) async { + _replySubscription = EventBusManager().eventBus!.on().listen((Reply reply) async { // 恢复出厂设置 if ((reply is FactoryDataResetReply)) { _replyFactoryDataResetKey(reply); @@ -100,10 +96,8 @@ class LockListLogic extends BaseGetXController { userID: await Storage.getUid(), keyID: '1', needAuthor: 1, - publicKey: - state.lockListInfoItemEntity.bluetooth!.publicKey!.cast(), - privateKey: - state.lockListInfoItemEntity.bluetooth!.privateKey!.cast(), + publicKey: state.lockListInfoItemEntity.bluetooth!.publicKey!.cast(), + privateKey: state.lockListInfoItemEntity.bluetooth!.privateKey!.cast(), token: getTokenList); break; case 0x07: @@ -145,8 +139,7 @@ class LockListLogic extends BaseGetXController { keyInfo.keyType == XSConstantMacro.keyTypeLong || keyInfo.keyType == XSConstantMacro.keyTypeLoop) { // 当是正常使用跟待接收状态的时候 - if (keyInfo.keyStatus == XSConstantMacro.keyStatusNormalUse || - keyInfo.keyStatus == XSConstantMacro.keyStatusWaitReceive) { + if (keyInfo.keyStatus == XSConstantMacro.keyStatusNormalUse || keyInfo.keyStatus == XSConstantMacro.keyStatusWaitReceive) { return "${"余".tr}${DateTool().compareTimeGetDaysFromNow(keyInfo.endDate!)}${"天".tr}"; } else { return XSConstantMacro.getKeyStatusStr(keyInfo.keyStatus!); @@ -159,11 +152,7 @@ class LockListLogic extends BaseGetXController { //判断是否要显示提示 bool getShowType(LockListInfoItemEntity keyInfo) { - final List keyTypes = [ - XSConstantMacro.keyTypeTime, - XSConstantMacro.keyTypeOnce, - XSConstantMacro.keyTypeLoop - ]; + final List keyTypes = [XSConstantMacro.keyTypeTime, XSConstantMacro.keyTypeOnce, XSConstantMacro.keyTypeLoop]; final List keyStatus = [ XSConstantMacro.keyStatusWaitIneffective, XSConstantMacro.keyStatusFrozen, @@ -171,18 +160,14 @@ class LockListLogic extends BaseGetXController { ]; //新增以上组合未包含--永久&&冻结状态 显示 - final bool isLongFrozenStatus = - keyInfo.keyType == XSConstantMacro.keyTypeLong && - keyInfo.keyStatus == XSConstantMacro.keyStatusFrozen; - final DateTime endDate = - DateTime.fromMillisecondsSinceEpoch(keyInfo.endDate ?? 0); + final bool isLongFrozenStatus = keyInfo.keyType == XSConstantMacro.keyTypeLong && keyInfo.keyStatus == XSConstantMacro.keyStatusFrozen; + final DateTime endDate = DateTime.fromMillisecondsSinceEpoch(keyInfo.endDate ?? 0); final DateTime now = DateTime.now(); final bool isKeyType = keyTypes.contains(keyInfo.keyType); final bool isKeyStatus = keyStatus.contains(keyInfo.keyStatus); final Duration difference = endDate.difference(now); final bool isExpirationSoon = isKeyType && difference.inDays <= 15; - final bool isShow = - isKeyType && isKeyStatus || isExpirationSoon || isLongFrozenStatus; + final bool isShow = isKeyType && isKeyStatus || isExpirationSoon || isLongFrozenStatus; return isShow; } @@ -194,13 +179,11 @@ class LockListLogic extends BaseGetXController { // 删除锁 AppLog.log('调用了删除锁'); showTipView.resetGetController(); - showTipView.showTFViewAlertDialog( - state.passwordTF, '请输入登录密码'.tr, '请输入登录密码'.tr, checkLoginPassword); + showTipView.showTFViewAlertDialog(state.passwordTF, '请输入登录密码'.tr, '请输入登录密码'.tr, checkLoginPassword); }); } else if (state.lockListInfoItemEntity.keyRight == 1) { // 授权管理员弹框提示 - showTipView.showDeleteAdministratorIsHaveAllDataDialog( - '同时删除其发送的所有钥匙,钥匙删除后不能恢复'.tr, (bool a) { + showTipView.showDeleteAdministratorIsHaveAllDataDialog('同时删除其发送的所有钥匙,钥匙删除后不能恢复'.tr, (bool a) { // 授权管理员删除 state.deleteAdministratorIsHaveAllData.value = a; deletKeyData(); @@ -240,8 +223,7 @@ class LockListLogic extends BaseGetXController { final LockListInfoEntity entity = await ApiRepository.to.deletOwnerKeyData( lockId: state.lockListInfoItemEntity.lockId.toString(), keyId: state.lockListInfoItemEntity.keyId.toString(), - includeUnderlings: - state.deleteAdministratorIsHaveAllData.value == true ? 1 : 0); + includeUnderlings: state.deleteAdministratorIsHaveAllData.value == true ? 1 : 0); if (entity.errorCode!.codeIsSuccessful) { BlueManage().connectDeviceMacAddress = ''; SchedulerBinding.instance.addPostFrameCallback((_) { @@ -259,42 +241,38 @@ class LockListLogic extends BaseGetXController { dismissEasyLoading(); showDeletAlertTipDialog(); }); - BlueManage().blueSendData(state.lockListInfoItemEntity.lockName!, - (BluetoothConnectionState connectionState) async { + BlueManage().blueSendData(state.lockListInfoItemEntity.lockName!, (BluetoothConnectionState connectionState) async { if (connectionState == BluetoothConnectionState.connected) { - final List publicKeyData = - state.lockListInfoItemEntity.bluetooth!.publicKey!.cast(); - final List saveStrList = - changeIntListToStringList(publicKeyData); + final List publicKeyData = state.lockListInfoItemEntity.bluetooth!.publicKey!.cast(); + final List saveStrList = changeIntListToStringList(publicKeyData); await Storage.setStringList(saveBluePublicKey, saveStrList); // 私钥 - final List privateKeyData = - state.lockListInfoItemEntity.bluetooth!.privateKey!.cast(); - final List savePrivateKeyList = - changeIntListToStringList(privateKeyData); + final List? privateKey = await Storage.getStringList(saveBluePrivateKey); + final List privateKeyData = state.lockListInfoItemEntity.bluetooth!.privateKey!.cast(); + final List savePrivateKeyList = changeIntListToStringList(privateKeyData); await Storage.setStringList(saveBluePrivateKey, savePrivateKeyList); // signKey - final List signKeyData = - state.lockListInfoItemEntity.bluetooth!.signKey!.cast(); - final List saveSignKeyList = - changeIntListToStringList(signKeyData); + final List signKeyData = state.lockListInfoItemEntity.bluetooth!.signKey!.cast(); + final List saveSignKeyList = changeIntListToStringList(signKeyData); await Storage.setStringList(saveBlueSignKey, saveSignKeyList); - final List saveTokenList = - changeIntListToStringList([0, 0, 0, 0]); + final List saveTokenList = changeIntListToStringList([0, 0, 0, 0]); await Storage.setStringList(saveBlueToken, saveTokenList); + final List getPrivateKeyList = changeStringListToIntList(privateKey!); + + final List? publicKey = await Storage.getStringList(saveBluePublicKey); + final List publicKeyDataList = changeStringListToIntList(publicKey!); + IoSenderManage.senderFactoryDataReset( lockID: BlueManage().connectDeviceName, userID: await Storage.getUid(), keyID: '1', needAuthor: 1, - publicKey: - state.lockListInfoItemEntity.bluetooth!.publicKey!.cast(), - privateKey: - state.lockListInfoItemEntity.bluetooth!.privateKey!.cast(), + publicKey: publicKeyDataList, + privateKey: getPrivateKeyList, token: [0, 0, 0, 0]); } else if (connectionState == BluetoothConnectionState.disconnected) { dismissEasyLoading(); @@ -352,9 +330,7 @@ class LockListLogic extends BaseGetXController { } void _initEventHandler() { - _setLockListInfoGroupEntity = eventBus - .on() - .listen((SetLockListInfoGroupEntity event) async { + _setLockListInfoGroupEntity = eventBus.on().listen((SetLockListInfoGroupEntity event) async { setLockListInfoGroupEntity(event.lockListInfoGroupEntity); }); } diff --git a/lib/talk/starChart/handle/impl/udp_talk_data_handler.dart b/lib/talk/starChart/handle/impl/udp_talk_data_handler.dart index 702072b4..53479218 100644 --- a/lib/talk/starChart/handle/impl/udp_talk_data_handler.dart +++ b/lib/talk/starChart/handle/impl/udp_talk_data_handler.dart @@ -14,8 +14,7 @@ import 'package:star_lock/talk/starChart/proto/talk_data_h264_frame.pb.dart'; // class UdpTalkDataHandler extends ScpMessageBaseHandle // implements ScpMessageHandler { -class UdpTalkDataHandler extends ScpMessageBaseHandle - implements ScpMessageHandler { +class UdpTalkDataHandler extends ScpMessageBaseHandle implements ScpMessageHandler { // 单例实现 static final UdpTalkDataHandler instance = UdpTalkDataHandler(); @@ -37,7 +36,7 @@ class UdpTalkDataHandler extends ScpMessageBaseHandle if (scpMessage.Payload != null) { final TalkData talkData = scpMessage.Payload; - + AppLog.log('收到数据'); _handleTalkData( talkData: talkData, scpMessage: scpMessage, @@ -73,10 +72,7 @@ class UdpTalkDataHandler extends ScpMessageBaseHandle // _asyncLog( // '分包数据:messageId:$messageId [$spIndex/$spTotal] PayloadLength:$PayloadLength'); if (messageType == MessageTypeConstant.RealTimeData) { - if (spTotal != null && - spTotal > 1 && - messageId != null && - spIndex != null) { + if (spTotal != null && spTotal > 1 && messageId != null && spIndex != null) { // 分包处理 return handleFragmentedPayload( messageId: messageId, @@ -129,13 +125,11 @@ class UdpTalkDataHandler extends ScpMessageBaseHandle talkDataH264Frame.mergeFromBuffer(talkData.content); // AppLog.log('处理H264帧: frameType=${talkDataH264Frame.frameType}, frameSeq=${talkDataH264Frame.frameSeq},MessageId:${scpMessage.MessageId}'); frameHandler.handleFrame(talkDataH264Frame, talkData, scpMessage); - } /// 处理图片数据 void _handleVideoImage(TalkData talkData) async { - final List processCompletePayload = - await _processCompletePayload(Uint8List.fromList(talkData.content)); + final List processCompletePayload = await _processCompletePayload(Uint8List.fromList(talkData.content)); processCompletePayload.forEach((element) { talkData.content = element; talkDataRepository.addTalkData( @@ -177,8 +171,7 @@ class UdpTalkDataHandler extends ScpMessageBaseHandle startIdx = i; i++; // Skip the next byte } else if (nextByte == 0xD9 && startIdx != -1) { - frames - .add(Uint8List.view(payload.buffer, startIdx, i + 2 - startIdx)); + frames.add(Uint8List.view(payload.buffer, startIdx, i + 2 - startIdx)); startIdx = -1; i++; // Skip the next byte } diff --git a/lib/talk/starChart/handle/impl/udp_talk_request_handler.dart b/lib/talk/starChart/handle/impl/udp_talk_request_handler.dart index 4f3a002f..59f0e710 100644 --- a/lib/talk/starChart/handle/impl/udp_talk_request_handler.dart +++ b/lib/talk/starChart/handle/impl/udp_talk_request_handler.dart @@ -18,20 +18,18 @@ import 'package:star_lock/tools/push/xs_jPhush.dart'; import 'package:star_lock/tools/storage.dart'; import 'package:star_lock/translations/current_locale_tool.dart'; -class UdpTalkRequestHandler extends ScpMessageBaseHandle - implements ScpMessageHandler { - RxString currentLanguage = - CurrentLocaleTool.getCurrentLocaleString().obs; // 当前选择语言 +class UdpTalkRequestHandler extends ScpMessageBaseHandle implements ScpMessageHandler { + RxString currentLanguage = CurrentLocaleTool.getCurrentLocaleString().obs; // 当前选择语言 @override void handleReq(ScpMessage scpMessage) async { // 判断是否登录账户 final loginData = await Storage.getLoginData(); // 如果登录账户不为空,且不是被动接听状态,且不是接听成功状态 - if (loginData != null && - (talkStatus.status != TalkStatus.passiveCallWaitingAnswer || - talkStatus.status != TalkStatus.answeredSuccessfully)) { + if (loginData != null && (talkStatus.status != TalkStatus.passiveCallWaitingAnswer || talkStatus.status != TalkStatus.answeredSuccessfully)) { // 收到对讲请求 + AppLog.log('收到对讲请求ToPeerId:${scpMessage.ToPeerId}'); + AppLog.log('收到对讲请求FromPeerId:${scpMessage.FromPeerId}'); final TalkReq talkReq = scpMessage.Payload; startChartManage.FromPeerId = scpMessage.ToPeerId!; startChartManage.ToPeerId = scpMessage.FromPeerId!; @@ -97,8 +95,7 @@ class UdpTalkRequestHandler extends ScpMessageBaseHandle } // 收到来电请求时进行本地通知 - Future _showTalkRequestNotification( - {required String talkObjectName}) async { + Future _showTalkRequestNotification({required String talkObjectName}) async { if (Platform.isAndroid) { final Map message = { 'platform': 'all', @@ -167,14 +164,12 @@ class UdpTalkRequestHandler extends ScpMessageBaseHandle void _handleRequestSendExpect({ required String lockPeerID, }) async { - final LockListInfoItemEntity currentKeyInfo = - CommonDataManage().currentKeyInfo; + final LockListInfoItemEntity currentKeyInfo = CommonDataManage().currentKeyInfo; var isH264 = currentKeyInfo.lockFeature?.isH264 == 1; var isMJpeg = currentKeyInfo.lockFeature?.isMJpeg == 1; - final LockListInfoGroupEntity? lockListInfoGroupEntity = - await Storage.getLockMainListData(); + final LockListInfoGroupEntity? lockListInfoGroupEntity = await Storage.getLockMainListData(); if (lockListInfoGroupEntity != null) { lockListInfoGroupEntity!.groupList?.forEach((element) { final lockList = element.lockList; @@ -195,18 +190,15 @@ class UdpTalkRequestHandler extends ScpMessageBaseHandle if (isH264) { // 锁支持H264,发送H264视频和G711音频期望 startChartManage.sendOnlyH264VideoTalkExpectData(); - print( - 'app收到的对讲请求后,发送的预期数据=========锁支持H264,发送H264视频格式期望数据,peerID=${lockPeerID}'); + print('app收到的对讲请求后,发送的预期数据=========锁支持H264,发送H264视频格式期望数据,peerID=${lockPeerID}'); } else if (isMJpeg) { // 锁只支持MJPEG,发送图像视频和G711音频期望 startChartManage.sendOnlyImageVideoTalkExpectData(); - print( - 'app收到的对讲请求后,发送的预期数据=========锁不支持H264,支持MJPEG,发送MJPEG视频格式期望数据,peerID=${lockPeerID}'); + print('app收到的对讲请求后,发送的预期数据=========锁不支持H264,支持MJPEG,发送MJPEG视频格式期望数据,peerID=${lockPeerID}'); } else { // 默认使用图像视频 startChartManage.sendOnlyImageVideoTalkExpectData(); - print( - 'app收到的对讲请求后,发送的预期数据=========锁不支持H264和MJPEG,默认发送MJPEG视频格式期望数据,peerID=${lockPeerID}'); + print('app收到的对讲请求后,发送的预期数据=========锁不支持H264和MJPEG,默认发送MJPEG视频格式期望数据,peerID=${lockPeerID}'); } } @@ -214,14 +206,12 @@ class UdpTalkRequestHandler extends ScpMessageBaseHandle void _handleResponseSendExpect({ required String lockPeerID, }) async { - final LockListInfoItemEntity currentKeyInfo = - CommonDataManage().currentKeyInfo; + final LockListInfoItemEntity currentKeyInfo = CommonDataManage().currentKeyInfo; var isH264 = currentKeyInfo.lockFeature?.isH264 == 1; var isMJpeg = currentKeyInfo.lockFeature?.isMJpeg == 1; - final LockListInfoGroupEntity? lockListInfoGroupEntity = - await Storage.getLockMainListData(); + final LockListInfoGroupEntity? lockListInfoGroupEntity = await Storage.getLockMainListData(); if (lockListInfoGroupEntity != null) { lockListInfoGroupEntity!.groupList?.forEach((element) { final lockList = element.lockList; @@ -242,18 +232,15 @@ class UdpTalkRequestHandler extends ScpMessageBaseHandle if (isH264) { // 锁支持H264,发送H264视频和G711音频期望 startChartManage.sendH264VideoAndG711AudioTalkExpectData(); - AppLog.log( - 'app主动发对讲请求,收到回复后发送的预期数据=======锁支持H264,发送H264视频格式期望数据,peerID=${lockPeerID}'); + AppLog.log('app主动发对讲请求,收到回复后发送的预期数据=======锁支持H264,发送H264视频格式期望数据,peerID=${lockPeerID}'); } else if (isMJpeg) { // 锁只支持MJPEG,发送图像视频和G711音频期望 startChartManage.sendImageVideoAndG711AudioTalkExpectData(); - AppLog.log( - 'app主动发对讲请求,收到回复后发送的预期数据=======锁不支持H264,支持MJPEG,发送MJPEG视频格式期望数据,peerID=${lockPeerID}'); + AppLog.log('app主动发对讲请求,收到回复后发送的预期数据=======锁不支持H264,支持MJPEG,发送MJPEG视频格式期望数据,peerID=${lockPeerID}'); } else { // 默认使用图像视频 startChartManage.sendImageVideoAndG711AudioTalkExpectData(); - AppLog.log( - 'app主动发对讲请求,收到回复后发送的预期数据=======锁不支持H264和MJPEG,默认发送MJPEG视频格式期望数据,peerID=${lockPeerID}'); + AppLog.log('app主动发对讲请求,收到回复后发送的预期数据=======锁不支持H264和MJPEG,默认发送MJPEG视频格式期望数据,peerID=${lockPeerID}'); } } } diff --git a/lib/talk/starChart/star_chart_manage.dart b/lib/talk/starChart/star_chart_manage.dart index 57cf953d..cf9c0d90 100644 --- a/lib/talk/starChart/star_chart_manage.dart +++ b/lib/talk/starChart/star_chart_manage.dart @@ -61,12 +61,9 @@ class StartChartManage { // 单例对象 static final StartChartManage _instance = StartChartManage._internal(); - final TalkeRequestOverTimeTimerManager talkeRequestOverTimeTimerManager = - TalkeRequestOverTimeTimerManager(); - final TalkePingOverTimeTimerManager talkePingOverTimeTimerManager = - TalkePingOverTimeTimerManager(); - final TalkDataOverTimeTimerManager talkDataOverTimeTimerManager = - TalkDataOverTimeTimerManager(); + final TalkeRequestOverTimeTimerManager talkeRequestOverTimeTimerManager = TalkeRequestOverTimeTimerManager(); + final TalkePingOverTimeTimerManager talkePingOverTimeTimerManager = TalkePingOverTimeTimerManager(); + final TalkDataOverTimeTimerManager talkDataOverTimeTimerManager = TalkDataOverTimeTimerManager(); // 工厂构造函数,返回单例对象 factory StartChartManage() { @@ -171,8 +168,7 @@ class StartChartManage { FromPeerId = loginData?.starchart?.starchartId ?? ''; } else { _log(text: '开始注册客户端'); - final StarChartRegisterNodeEntity requestStarChartRegisterNode = - await _requestStarChartRegisterNode(); + final StarChartRegisterNodeEntity requestStarChartRegisterNode = await _requestStarChartRegisterNode(); await _saveStarChartRegisterNodeToStorage(requestStarChartRegisterNode); FromPeerId = requestStarChartRegisterNode.peer!.id ?? ''; bindUserStarchart(requestStarChartRegisterNode); @@ -180,18 +176,14 @@ class StartChartManage { } //绑定星图配置 - Future bindUserStarchart( - StarChartRegisterNodeEntity requestStarChartRegisterNode) async { + Future bindUserStarchart(StarChartRegisterNodeEntity requestStarChartRegisterNode) async { try { final LoginEntity entity = await ApiRepository.to.bindUserStarchart( starchartId: requestStarChartRegisterNode.peer?.id ?? '', - starchartPeerPublicKey: - requestStarChartRegisterNode.peer?.publicKey ?? '', - starchartPeerPrivateKey: - requestStarChartRegisterNode.peer?.privateKey ?? '', + starchartPeerPublicKey: requestStarChartRegisterNode.peer?.publicKey ?? '', + starchartPeerPrivateKey: requestStarChartRegisterNode.peer?.privateKey ?? '', ); - requestStarChartRegisterNode.peer?.id = - entity.data?.starchart?.starchartId; + requestStarChartRegisterNode.peer?.id = entity.data?.starchart?.starchartId; if (entity.errorCode!.codeIsSuccessful) { AppLog.log('绑定成功'); } else { @@ -204,14 +196,12 @@ class StartChartManage { // 中继查询 Future _relayQuery() async { - final RelayInfoEntity relayInfoEntity = - await StartChartApi.to.relayQueryInfo(); + final RelayInfoEntity relayInfoEntity = await StartChartApi.to.relayQueryInfo(); _saveRelayInfoEntityToStorage(relayInfoEntity); if (relayInfoEntity.client_addr != null) { localPublicHost = relayInfoEntity.client_addr!; } - if (relayInfoEntity.relay_list != null && - relayInfoEntity.relay_list!.length > 0) { + if (relayInfoEntity.relay_list != null && relayInfoEntity.relay_list!.length > 0) { for (int i = 0; i <= relayInfoEntity.relay_list!.length; i++) { final data = relayInfoEntity.relay_list?[i]; if (data?.peerID != FromPeerId) { @@ -239,8 +229,7 @@ class StartChartManage { // 初始化udp Future _onlineRelayService() async { var addressIListenFrom = InternetAddress.anyIPv4; - await RawDatagramSocket.bind(addressIListenFrom, localPort) - .then((RawDatagramSocket socket) { + await RawDatagramSocket.bind(addressIListenFrom, localPort).then((RawDatagramSocket socket) { // 设置接收缓冲区大小 (SO_RCVBUF = 8) if (AppPlatform.isAndroid) { socket.setRawOption( @@ -291,15 +280,13 @@ class StartChartManage { } // 发送RbcuInfo 地址交换消息 - void _sendRbcuInfoMessage( - {required String ToPeerId, bool isResp = false}) async { + void _sendRbcuInfoMessage({required String ToPeerId, bool isResp = false}) async { final uuid = _uuid.v1(); final int timestamp = DateTime.now().millisecondsSinceEpoch; final Int64 int64Timestamp = Int64(timestamp); // 使用构造函数 // 获取本机所有ip地址和中继返回的外网地址 - final List listenAddrDataList = - await _makeListenAddrDataList(); + final List listenAddrDataList = await _makeListenAddrDataList(); listenAddrDataList.insert( 0, // 插入到头部 ListenAddrData( @@ -309,15 +296,13 @@ class StartChartManage { ); final address = listenAddrDataList - .where((element) => - element.type == ListenAddrTypeConstant.local) // 过滤出本地地址 + .where((element) => element.type == ListenAddrTypeConstant.local) // 过滤出本地地址 .map((e) => e.address) // 转换为 List .where((addr) => addr != null) // 过滤掉 null 值 .map( (addr) => addr!.replaceAll(IpConstant.udpUrl, ''), ) // 去除 "udp://" 前缀 - .cast< - String>(); // 转换为 Iterable// 将 Iterable 转换为 Iterable + .cast(); // 转换为 Iterable// 将 Iterable 转换为 Iterable _rbcuSessionId = uuid; final RbcuInfo rbcuInfo = RbcuInfo( sessionId: uuid, @@ -340,28 +325,21 @@ class StartChartManage { void _sendRbcuProbeMessage() async { // 随机字符串数据 String generateRandomString(int length) { - const chars = - 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'; + const chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'; final random = Random(); return String.fromCharCodes( - List.generate( - length, (index) => chars.codeUnitAt(random.nextInt(chars.length))), + List.generate(length, (index) => chars.codeUnitAt(random.nextInt(chars.length))), ); } - if (rbcuInfo != null && - rbcuInfo!.address != null && - rbcuInfo!.address.length > 0) { + if (rbcuInfo != null && rbcuInfo!.address != null && rbcuInfo!.address.length > 0) { rbcuInfo!.address.forEach((element) { // 拆分 element 字符串 final parts = element.split(':'); final host = parts[0]; // IP 地址 final port = int.tryParse(parts[1]) ?? 0; // 端口号,如果解析失败则默认为 0 - final RbcuProbe rbcuProbe = RbcuProbe( - sessionId: _rbcuSessionId, - data: generateRandomString(100), - targetAddress: element); + final RbcuProbe rbcuProbe = RbcuProbe(sessionId: _rbcuSessionId, data: generateRandomString(100), targetAddress: element); final rbcuProBeBuffer = rbcuProbe.writeToBuffer(); _sendNatMessage(message: rbcuProBeBuffer, host: host, port: port); }); @@ -378,8 +356,7 @@ class StartChartManage { // 启动定时任务 void startSendingRbcuInfoMessages({required String ToPeerId}) { // 每隔 1 秒执行一次 _sendRbcuInfoMessage - rbcuInfoTimer ??= - Timer.periodic(Duration(seconds: _defaultIntervalTime), (timer) { + rbcuInfoTimer ??= Timer.periodic(Duration(seconds: _defaultIntervalTime), (timer) { // 发送RbcuInfo 地址交换消息 _log(text: '发送RbcuInfo 地址交换消息'); _sendRbcuInfoMessage(ToPeerId: ToPeerId); @@ -389,8 +366,7 @@ class StartChartManage { // 发送打洞包 void startSendingRbcuProbeTMessages() { // 每隔 1 秒执行一次 _sendRbcuInfoMessage - rbcuProbeTimer ??= - Timer.periodic(Duration(seconds: _defaultIntervalTime), (timer) { + rbcuProbeTimer ??= Timer.periodic(Duration(seconds: _defaultIntervalTime), (timer) { // 发送RbcuProbe _sendRbcuProbeMessage(); }); @@ -398,8 +374,7 @@ class StartChartManage { // 发送打洞确认包 void startSendingRbcuConfirmTMessages() { - rbcuConfirmTimer ??= - Timer.periodic(Duration(seconds: _defaultIntervalTime), (timer) { + rbcuConfirmTimer ??= Timer.periodic(Duration(seconds: _defaultIntervalTime), (timer) { // 发送RbcuProbe _sendRbcuConfirmMessage(); }); @@ -458,11 +433,11 @@ class StartChartManage { // ); // } // } - final LockListInfoItemEntity currentKeyInfo = - CommonDataManage().currentKeyInfo; + final LockListInfoItemEntity currentKeyInfo = CommonDataManage().currentKeyInfo; final isH264 = currentKeyInfo.lockFeature?.isH264 == 1; final isMJpeg = currentKeyInfo.lockFeature?.isMJpeg == 1; - + AppLog.log('isH264:${isH264}'); + AppLog.log('isMJpeg:${isMJpeg}'); // 优先使用H264,其次是MJPEG if (isH264) { Get.toNamed( @@ -483,6 +458,7 @@ class StartChartManage { seconds: _defaultIntervalTime, ), (Timer timer) async { + AppLog.log('发送对讲请求:${ToPeerId}'); await sendCallRequestMessage(ToPeerId: ToPeerId); }, ); @@ -526,8 +502,7 @@ class StartChartManage { List packetTalkData = payload.sublist(start, end); // 分包数据不递增messageID - final messageId = - MessageCommand.getNextMessageId(toPeerId, increment: false); + final messageId = MessageCommand.getNextMessageId(toPeerId, increment: false); // 组装分包数据 final message = MessageCommand.talkDataMessage( ToPeerId: toPeerId, @@ -562,8 +537,7 @@ class StartChartManage { final List message = MessageCommand.heartbeatMessage( FromPeerId: FromPeerId, ToPeerId: relayPeerId, - MessageId: - MessageCommand.getNextMessageId(relayPeerId, increment: true), + MessageId: MessageCommand.getNextMessageId(relayPeerId, increment: true), ); await _sendMessage(message: message); }, @@ -572,8 +546,7 @@ class StartChartManage { } // 发送回声测试消息 - void sendEchoMessage( - {required List payload, required String toPeerId}) async { + void sendEchoMessage({required List payload, required String toPeerId}) async { // 计算需要分多少个包发送 final int totalPackets = (payload.length / _maxPayloadSize).ceil(); // 循环遍历 @@ -587,8 +560,7 @@ class StartChartManage { List packet = payload.sublist(start, end); // 分包数据不递增messageID - final messageId = - MessageCommand.getNextMessageId(toPeerId, increment: false); + final messageId = MessageCommand.getNextMessageId(toPeerId, increment: false); // 组装分包数据 final message = MessageCommand.echoMessage( ToPeerId: toPeerId, @@ -606,8 +578,7 @@ class StartChartManage { } // 发送网关初始化消息 - void sendGatewayResetMessage( - {required String ToPeerId, required int gatewayId}) async { + void sendGatewayResetMessage({required String ToPeerId, required int gatewayId}) async { final message = MessageCommand.gatewayResetMessage( ToPeerId: ToPeerId, FromPeerId: FromPeerId, @@ -728,8 +699,7 @@ class StartChartManage { } // 发送通话保持消息 - Future sendTalkPingMessage( - {required String ToPeerId, required String FromPeerId}) async { + Future sendTalkPingMessage({required String ToPeerId, required String FromPeerId}) async { final message = MessageCommand.talkPingMessage( ToPeerId: ToPeerId, FromPeerId: FromPeerId, @@ -825,11 +795,9 @@ class StartChartManage { // 发送消息 Future _sendMessage({required List message}) async { - var result = await _udpSocket?.send( - message, InternetAddress(remoteHost), remotePort); + var result = await _udpSocket?.send(message, InternetAddress(remoteHost), remotePort); if (result != message.length) { - throw StartChartMessageException( - '❌Udp send data error----> $result ${message.length}'); + throw StartChartMessageException('❌Udp send data error----> $result ${message.length}'); // _udpSocket = null; } @@ -846,15 +814,11 @@ class StartChartManage { } // 发送消息 - Future _sendNatMessage( - {required List message, - required String host, - required int port}) async { + Future _sendNatMessage({required List message, required String host, required int port}) async { _log(text: '发送nat消息'); var result = await _udpSocket?.send(message, InternetAddress(host), port); if (result != message.length) { - throw StartChartMessageException( - '❌Udp send data error----> $result ${message.length}'); + throw StartChartMessageException('❌Udp send data error----> $result ${message.length}'); // _udpSocket = null; } } @@ -864,8 +828,7 @@ class StartChartManage { // 获取设备信息 final Map deviceInfo = await _getDeviceInfo(); // 发送注册节点请求 - final StarChartRegisterNodeEntity response = - await StartChartApi.to.starChartRegisterNode( + final StarChartRegisterNodeEntity response = await StartChartApi.to.starChartRegisterNode( product: _productName, model: '${deviceInfo['brand']}_${deviceInfo['model']}', name: '${deviceInfo['id']}', @@ -875,8 +838,7 @@ class StartChartManage { } // 保存星图注册节点信息至缓存 - Future _saveStarChartRegisterNodeToStorage( - StarChartRegisterNodeEntity starChartRegisterNodeEntity) async { + Future _saveStarChartRegisterNodeToStorage(StarChartRegisterNodeEntity starChartRegisterNodeEntity) async { if (starChartRegisterNodeEntity != null) { await Storage.saveStarChartRegisterNodeInfo(starChartRegisterNodeEntity); final LoginData? loginData = await Storage.getLoginData(); @@ -886,8 +848,7 @@ class StartChartManage { } // 保存星图中继服务器信息至缓存 - Future _saveRelayInfoEntityToStorage( - RelayInfoEntity relayInfoEntity) async { + Future _saveRelayInfoEntityToStorage(RelayInfoEntity relayInfoEntity) async { if (relayInfoEntity != null) { await Storage.saveRelayInfo(relayInfoEntity); } @@ -909,8 +870,7 @@ class StartChartManage { ); // 获取本机所有ip地址和中继返回的外网地址 - final List listenAddrDataList = - await _makeListenAddrDataList(); + final List listenAddrDataList = await _makeListenAddrDataList(); // final RelayServiceData relayServiceData = RelayServiceData( @@ -980,8 +940,7 @@ class StartChartManage { ipAddress = ipAddress.split('%').first; } // 确保 IP 地址不为空且不在排除列表中 - if (ipAddress.isNotEmpty && - !IpConstant.reportExcludeIp.contains(ipAddress)) { + if (ipAddress.isNotEmpty && !IpConstant.reportExcludeIp.contains(ipAddress)) { ipAddresses.add(ipAddress); } } @@ -998,8 +957,7 @@ class StartChartManage { /// 获取设备信息 Future> _getDeviceInfo() async { - final Map deviceInfo = - await DeviceInfoUtils.getDeviceInfo(); + final Map deviceInfo = await DeviceInfoUtils.getDeviceInfo(); return deviceInfo; } @@ -1016,8 +974,7 @@ class StartChartManage { if (host != null && port != null) { try { // 尝试进行 DNS 解析 - final List addresses = - await InternetAddress.lookup(host); + final List addresses = await InternetAddress.lookup(host); if (addresses.isEmpty) { throw FormatException('DNS resolution failed for $host'); } @@ -1082,8 +1039,7 @@ class StartChartManage { final int payloadType = scpMessage.PayloadType ?? 0; final int messageType = scpMessage.MessageType ?? 0; try { - final ScpMessageHandler handler = - ScpMessageHandlerFactory.createHandler(payloadType); + final ScpMessageHandler handler = ScpMessageHandlerFactory.createHandler(payloadType); if (messageType == MessageTypeConstant.Req) { handler.handleReq(scpMessage); } else if (messageType == MessageTypeConstant.Resp) { @@ -1170,8 +1126,7 @@ class StartChartManage { } /// 修改预期接收到的数据 - void changeTalkExpectDataTypeAndReStartTalkExpectMessageTimer( - {required TalkExpectReq talkExpect}) { + void changeTalkExpectDataTypeAndReStartTalkExpectMessageTimer({required TalkExpectReq talkExpect}) { _defaultTalkExpect = talkExpect; reStartTalkExpectMessageTimer(); } @@ -1190,8 +1145,7 @@ class StartChartManage { videoType: [VideoTypeE.IMAGE], audioType: [], ); - changeTalkExpectDataTypeAndReStartTalkExpectMessageTimer( - talkExpect: talkExpectReq); + changeTalkExpectDataTypeAndReStartTalkExpectMessageTimer(talkExpect: talkExpectReq); } /// 修改预期接收到的数据 @@ -1200,20 +1154,17 @@ class StartChartManage { videoType: [VideoTypeE.H264], audioType: [], ); - changeTalkExpectDataTypeAndReStartTalkExpectMessageTimer( - talkExpect: talkExpectReq); + changeTalkExpectDataTypeAndReStartTalkExpectMessageTimer(talkExpect: talkExpectReq); } /// 修改预期接收到的数据 void sendImageVideoAndG711AudioTalkExpectData() { - changeTalkExpectDataTypeAndReStartTalkExpectMessageTimer( - talkExpect: TalkConstant.ImageExpect); + changeTalkExpectDataTypeAndReStartTalkExpectMessageTimer(talkExpect: TalkConstant.ImageExpect); } /// 修改预期接收到的数据 void sendH264VideoAndG711AudioTalkExpectData() { - changeTalkExpectDataTypeAndReStartTalkExpectMessageTimer( - talkExpect: TalkConstant.H264Expect); + changeTalkExpectDataTypeAndReStartTalkExpectMessageTimer(talkExpect: TalkConstant.H264Expect); } /// 发送远程开锁