233 lines
6.6 KiB
Dart
Executable File
233 lines
6.6 KiB
Dart
Executable File
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<int> 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<int> 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;
|
|
}
|
|
}
|
|
}
|
|
}
|