app-starlock/star_lock/lib/talk/udp/udp_reciverData.dart

181 lines
4.0 KiB
Dart
Raw Normal View History

2023-12-11 13:44:15 +08:00
import 'dart:typed_data';
import '../../tools/toast.dart';
2023-12-18 16:03:05 +08:00
import '../call/callTalk.dart';
2023-12-11 13:44:15 +08:00
import 'udp_talkClass.dart';
class CommandUDPReciverManager {
static void appDataReceive(List<int> data) async {
///解析数据
2023-12-19 18:33:02 +08:00
if (data.isEmpty) {
2023-12-11 13:44:15 +08:00
return;
}
int dataSize = data.length;
2023-12-19 18:33:02 +08:00
if (dataSize < 4) {
2023-12-11 13:44:15 +08:00
return;
}
2023-12-18 16:03:05 +08:00
print("appDataReceiveData:$data");
2023-12-11 13:44:15 +08:00
Uint8List data1 = Uint8List.fromList(data);
2023-12-19 18:33:02 +08:00
if (data1.length == 1) {
if (data[0] == 0x30 || data[0] == 0x31) {
2023-12-11 13:44:15 +08:00
print("p2p打洞");
}
}
if (data[6] == 4) {
2023-12-19 18:33:02 +08:00
if (data[7] == 2) {
2023-12-18 16:03:05 +08:00
// print("心跳包反馈 在线状态");
2023-12-19 18:33:02 +08:00
} else if (data[7] == 3) {
2023-12-11 13:44:15 +08:00
[Toast.show(msg: "您已在其他设备登录")];
}
} else if (data[6] == 150) {
// if( [Pub getApp].isBack){
// [_udp receiveWithTimeout:-1 tag:0];
// return YES;
// }
// 对讲命令
2023-12-18 16:03:05 +08:00
var beiCallType = data[8] & 0xff;
print("被呼叫类型$beiCallType");
2023-12-11 13:44:15 +08:00
switch (beiCallType) {
2023-12-19 18:33:02 +08:00
case 1:
{
2023-12-11 13:44:15 +08:00
//被叫
UDPTalkClass().beCallW(data: data);
}
break;
2023-12-19 18:33:02 +08:00
case 6:
{
2023-12-11 13:44:15 +08:00
//接听
2023-12-19 18:33:02 +08:00
if ((data[7] & 0x3) == 2) {
//被叫 接听反馈
2023-12-11 13:44:15 +08:00
print("接听反馈");
}
}
break;
2023-12-19 18:33:02 +08:00
case 7:
case 8:
{
//音视频数据
// print("音视频数据");
2023-12-18 16:03:05 +08:00
CallTalk cllTalk = CallTalk();
cllTalk.getAVData(data1, data1.length);
2023-12-11 13:44:15 +08:00
}
break;
2023-12-19 18:33:02 +08:00
case 9:
{
if ((data[7] & 0x3) == 1) {
//对方保持连接
2023-12-11 13:44:15 +08:00
//print("对方保持连接");
data[7] = 2;
2023-12-19 18:33:02 +08:00
} else {
2023-12-11 13:44:15 +08:00
//print("保持连接反馈");
}
}
break;
2023-12-19 18:33:02 +08:00
case 10:
{
2023-12-11 13:44:15 +08:00
//开门反馈
2023-12-19 18:33:02 +08:00
if ((data[7] & 0x3) == 2) {
2023-12-11 13:44:15 +08:00
print("开门成功");
2023-12-19 18:33:02 +08:00
} else {}
2023-12-11 13:44:15 +08:00
}
break;
2023-12-19 18:33:02 +08:00
case 30:
{
2023-12-11 13:44:15 +08:00
//开门反馈
2023-12-19 18:33:02 +08:00
if ((data[7] & 0x3) == 1) {
2023-12-11 13:44:15 +08:00
//对方结束对讲
print("对方结束对讲");
2023-12-19 18:33:02 +08:00
} else {
2023-12-11 13:44:15 +08:00
//结束对讲反馈
print("结束对讲反馈");
}
}
break;
2023-12-19 18:33:02 +08:00
case 140:
{
2023-12-11 13:44:15 +08:00
// p2p测试
}
break;
2023-12-19 18:33:02 +08:00
case 141:
{
2023-12-11 13:44:15 +08:00
// p2p测试
}
break;
2023-12-19 18:33:02 +08:00
case 142:
{
2023-12-11 13:44:15 +08:00
// p2p测试
}
break;
2023-12-19 18:33:02 +08:00
case 143:
{
2023-12-11 13:44:15 +08:00
//p2p测试 NSAsk
print("p2pNSAskNSAsk");
}
break;
default:
break;
}
} else if (data[6] == 152) {
// 监视命令
switch (data[8] & 0xff) {
2023-12-19 18:33:02 +08:00
case 2:
{
//被叫
print("对方忙");
2023-12-11 13:44:15 +08:00
}
2023-12-19 18:33:02 +08:00
break;
case 4:
{
//监视成功
print("监视成功");
2023-12-11 13:44:15 +08:00
}
2023-12-19 18:33:02 +08:00
break;
case 7:
case 8:
{
//音视频数据
//print("音视频数据");
2023-12-11 13:44:15 +08:00
}
2023-12-19 18:33:02 +08:00
break;
case 9:
{
//保持连接
if ((data[7] & 0x3) == 1) {
//对方保持连接
//print("对方保持连接");
data[7] = 2;
} else {
//print("保持连接反馈");
}
2023-12-11 13:44:15 +08:00
}
2023-12-19 18:33:02 +08:00
break;
case 10:
{
//开门反馈
if ((data[7] & 0x3) == 2) {
print("开门成功");
} else {}
2023-12-11 13:44:15 +08:00
}
2023-12-19 18:33:02 +08:00
break;
case 30:
{
// 监视结束
if ((data[7] & 0x3) == 1) {
// 对方结束监视
print("对方结束监视");
} else {
//结束对讲反馈
print("结束监视反馈");
}
}
break;
2023-12-11 13:44:15 +08:00
default:
break;
}
}
}
}