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 '../../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; } int dataSize = data.length; if (dataSize < 4) { return; } // print("appReceiveUDPData:$data"); Uint8List data1 = Uint8List.fromList(data); if (data1.length == 1) { if (data[0] == 0x30 || data[0] == 0x31) { print("p2p打洞"); } } if (data[6] == 4) { if (data[7] == 2) { // print("心跳包反馈 在线状态"); } else if (data[7] == 3) { // [Toast.show(msg: "您已在其他设备登录")]; EasyLoading.showToast("您已在其他设备登录",duration: 2000.milliseconds); } } else if (data[6] == 150) { // if( [Pub getApp].isBack){ // [_udp receiveWithTimeout:-1 tag:0]; // return YES; // } // 对讲命令 var beiCallType = data[8] & 0xff; // print("被呼叫类型$beiCallType"); switch (beiCallType) { case 1: { //被叫 // lockId var lockId = data.sublist(9, 29); var lockIdStr = utf8String(lockId); UDPManage().lockId = lockIdStr; UDPTalkClass().status = 0; UDPTalkClass().beCallW(data: data); } break; case 6: { //接听 if ((data[7] & 0x3) == 2) { //被叫 接听反馈 print("接听反馈"); UDPTalkClass().status = 8; // 停止声音 UDPTalkClass().stopLocalAudio(); eventBus.fire(GetUDPStatusRefreshUI(UDPTalkClass().status)); } } break; case 7: case 8: { //音视频数据 // print("音视频数据"); CallTalk cllTalk = CallTalk(); cllTalk.getAVData(data1, data1.length); } break; case 9: { if ((data[7] & 0x3) == 1) { //对方保持连接 //print("对方保持连接"); data[7] = 2; } else { //print("保持连接反馈"); } } break; case 10: { //开门反馈 print("appReceiveUDPData:$data"); if ((data[7] & 0x3) == 2) { print("开门成功"); EasyLoading.showToast("开门成功",duration: 2000.milliseconds); } else { print("开门失败"); } } break; case 30: { // 挂断 if ((data[7] & 0x3) == 1) { // 对方结束对讲 print("对方结束对讲"); } else { //结束对讲反馈 print("结束对讲反馈"); } UDPTalkClass().status = 0; UDPTalkClass().isBeCall = false; UDPTalkClass().stopLocalAudio(); CallTalk().stopPcmSound(); eventBus.fire(GetUDPStatusRefreshUI(UDPTalkClass().status)); Get.back(); } break; case 140: { // p2p测试 } break; case 141: { // p2p测试 } break; case 142: { // p2p测试 } break; case 143: { //p2p测试 NSAsk print("p2pNSAskNSAsk"); } break; default: break; } } else if (data[6] == 152) { // 监视命令 switch (data[8] & 0xff) { case 2: { //被叫 print("对方忙"); } break; case 4: { //监视成功 print("监视成功"); UDPTalkClass().status = 8; eventBus.fire(GetUDPStatusMonitorUI(UDPTalkClass().status)); } break; case 7: case 8: { //音视频数据 // print("音视频数据"); CallTalk cllTalk = CallTalk(); cllTalk.getAVData(data1, data1.length); } break; case 9: { //保持连接 if ((data[7] & 0x3) == 1) { //对方保持连接 //print("对方保持连接"); data[7] = 2; } else { //print("保持连接反馈"); } } break; case 10: { //开门反馈 if ((data[7] & 0x3) == 2) { print("开门成功"); // Toast.show(msg: "开门成功"); EasyLoading.showToast("开门成功",duration: 2000.milliseconds); } else { print("开门失败"); EasyLoading.showToast("开门失败",duration: 2000.milliseconds); } } break; case 30: { CallTalk().stopPcmSound(); // 监视结束 if ((data[7] & 0x3) == 1) { // 对方结束监视 print("对方结束监视"); } else { //结束监视反馈 print("结束监视反馈"); } // Toast.show(msg: "对方已结束监视"); // UDPTalkClass().status = 0; // UDPTalkClass().isBeCall = false; // UDPTalkClass().stopLocalAudio(); // CallTalk().stopPcmSound(); // eventBus.fire(GetUDPStatusRefreshUI(UDPTalkClass().status)); // Get.back(); } break; default: break; } } } }