import 'dart:typed_data'; import 'package:flutter_easyloading/flutter_easyloading.dart'; import 'package:get/get.dart'; import 'package:star_lock/talk/udp/udp_manage.dart'; import '../../app_settings/app_settings.dart'; import '../../blue/io_tool/io_tool.dart'; import '../../tools/eventBusEventManage.dart'; import '../call/callTalk.dart'; import 'udp_talkClass.dart'; class CommandUDPReciverManager { static void appDataReceive(List data) async { ///解析数据 if (data.isEmpty) { return; } final int dataSize = data.length; if (dataSize < 4) { return; } // AppLog.log('appReceiveUDPData:$data'); final Uint8List data1 = Uint8List.fromList(data); if (data1.length == 1) { if (data[0] == 0x30 || data[0] == 0x31) { AppLog.log('p2p打洞'); } } if (data[6] == 4) { if (data[7] == 2) { // AppLog.log("心跳包反馈 在线状态"); } else if (data[7] == 3) { // [Toast.show(msg: "您已在其他设备登录")]; EasyLoading.showToast('您的账号在异地登录,如非本人,请尽快修改密码'.tr, duration: 2000.milliseconds); } } else if (data[6] == 150) { // if( [Pub getApp].isBack){ // [_udp receiveWithTimeout:-1 tag:0]; // return YES; // } // 对讲命令 final int beiCallType = data[8] & 0xff; AppLog.log('被呼叫类型$beiCallType'); switch (beiCallType) { case 1: { //被叫 // lockId final List lockId = data.sublist(9, 29); final String lockIdStr = utf8String(lockId); UDPManage().lockId = lockIdStr; UDPTalkClass().status = 0; UDPTalkClass().beCallW(data: data); } break; case 6: { //接听 if ((data[7] & 0x3) == 2) { //被叫 接听反馈 AppLog.log('接听反馈'); UDPTalkClass().status = 8; // 停止声音 UDPTalkClass().stopLocalAudio(); eventBus.fire(GetUDPStatusRefreshUI(UDPTalkClass().status)); AppLog.log('接听反馈刷新UI1'); } } break; case 7: case 8: { //音视频数据 // AppLog.log("音视频数据"); final CallTalk cllTalk = CallTalk(); cllTalk.getAVData(data1, data1.length); } break; case 9: { if ((data[7] & 0x3) == 1) { //对方保持连接 //AppLog.log("对方保持连接"); data[7] = 2; } else { //AppLog.log("保持连接反馈"); } } break; case 10: { //开门反馈 // AppLog.log('appReceiveUDPData:$data'); if ((data[7] & 0x3) == 2) { AppLog.log('开门成功'); EasyLoading.showToast('开门成功'.tr, duration: 2000.milliseconds); } else { AppLog.log('开门失败'); EasyLoading.showToast('开门失败'.tr, duration: 2000.milliseconds); } } break; case 30: { // AppLog.log('收到挂断反馈了'); // 挂断 if ((data[7] & 0x3) == 1) { // 对方结束对讲 AppLog.log('对方结束对讲'); } else { //结束对讲反馈 AppLog.log('结束对讲反馈'); } // UDPTalkClass().status = 0; // UDPTalkClass().isBeCall = false; // UDPTalkClass().isEndCall = true; // UDPTalkClass().stopLocalAudio(); // CallTalk().stopPcmSound(); eventBus.fire(GetUDPStatusRefreshUI(UDPTalkClass().status)); // Get.back(); UDPTalkClass().callNoAnswer(3); // AppLog.log('挂断反馈刷新UI1'); } break; case 140: { // p2p测试 } break; case 141: { // p2p测试 } break; case 142: { // p2p测试 } break; case 143: { //p2p测试 NSAsk AppLog.log('p2pNSAskNSAsk'); } break; default: break; } } else if (data[6] == 152) { // 监视命令 switch (data[8] & 0xff) { case 2: { //被叫 AppLog.log('对方忙'); } break; case 4: { //监视成功 AppLog.log('监视成功'); UDPTalkClass().status = 8; eventBus.fire(GetUDPStatusMonitorUI(UDPTalkClass().status)); } break; case 7: case 8: { //音视频数据 // AppLog.log("音视频数据"); final CallTalk cllTalk = CallTalk(); cllTalk.getAVData(data1, data1.length); } break; case 9: { //保持连接 if ((data[7] & 0x3) == 1) { //对方保持连接 //AppLog.log("对方保持连接"); data[7] = 2; } else { //AppLog.log("保持连接反馈"); } } break; case 10: { //开门反馈 if ((data[7] & 0x3) == 2) { AppLog.log('开门成功'); // Toast.show(msg: "开门成功"); EasyLoading.showToast('开门成功'.tr, duration: 2000.milliseconds); } else { AppLog.log('开门失败'); EasyLoading.showToast('开门失败'.tr, duration: 2000.milliseconds); } } break; case 30: { CallTalk().finishAVData(); // 监视结束 if ((data[7] & 0x3) == 1) { // 对方结束监视 AppLog.log('对方结束监视'); } else { //结束监视反馈 AppLog.log('结束监视反馈'); } // Toast.show(msg: "对方已结束监视"); // UDPTalkClass().status = 0; // UDPTalkClass().isBeCall = false; // UDPTalkClass().stopLocalAudio(); // CallTalk().stopPcmSound(); // eventBus.fire(GetUDPStatusRefreshUI(UDPTalkClass().status)); // Get.back(); } break; default: break; } } } }