188 lines
3.7 KiB
Dart
188 lines
3.7 KiB
Dart
|
|
import 'dart:typed_data';
|
|
|
|
import '../../tools/toast.dart';
|
|
import 'udp_talkClass.dart';
|
|
|
|
class CommandUDPReciverManager {
|
|
|
|
static void appDataReceive(List<int> data) async {
|
|
///解析数据
|
|
if(data.isEmpty){
|
|
return;
|
|
}
|
|
int dataSize = data.length;
|
|
if(dataSize < 4){
|
|
return;
|
|
}
|
|
// print("appDataReceiveData:$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: "您已在其他设备登录")];
|
|
}
|
|
} else if (data[6] == 150) {
|
|
// if( [Pub getApp].isBack){
|
|
// [_udp receiveWithTimeout:-1 tag:0];
|
|
// return YES;
|
|
// }
|
|
|
|
// 对讲命令
|
|
// var beiCallType = data[8] & 0xff;
|
|
var beiCallType = 1 & 0xff;
|
|
print("被呼叫2 类型$beiCallType");
|
|
switch (beiCallType) {
|
|
case 1:{
|
|
//被叫
|
|
UDPTalkClass().beCallW(data: data);
|
|
}
|
|
break;
|
|
case 6:{
|
|
//接听
|
|
if((data[7] & 0x3) == 2){//被叫 接听反馈
|
|
print("接听反馈");
|
|
|
|
}
|
|
}
|
|
break;
|
|
case 7:
|
|
case 8:{//音视频数据
|
|
//print("音视频数据");
|
|
|
|
}
|
|
break;
|
|
case 9:{
|
|
if((data[7] & 0x3) == 1){//对方保持连接
|
|
//print("对方保持连接");
|
|
data[7] = 2;
|
|
|
|
}
|
|
else{
|
|
//print("保持连接反馈");
|
|
|
|
}
|
|
}
|
|
break;
|
|
case 10:{
|
|
//开门反馈
|
|
if((data[7] & 0x3) == 2){
|
|
print("开门成功");
|
|
|
|
}
|
|
else{
|
|
|
|
}
|
|
}
|
|
break;
|
|
case 30:{
|
|
//开门反馈
|
|
if((data[7] & 0x3) == 1){
|
|
//对方结束对讲
|
|
print("对方结束对讲");
|
|
|
|
} else{
|
|
//结束对讲反馈
|
|
print("结束对讲反馈");
|
|
|
|
}
|
|
}
|
|
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("监视成功");
|
|
|
|
}
|
|
break;
|
|
case 7:
|
|
case 8:{//音视频数据
|
|
//print("音视频数据");
|
|
|
|
}
|
|
break;
|
|
case 9:{
|
|
//保持连接
|
|
if((data[7] & 0x3) == 1){//对方保持连接
|
|
//print("对方保持连接");
|
|
data[7] = 2;
|
|
|
|
}
|
|
else{
|
|
//print("保持连接反馈");
|
|
|
|
}
|
|
}
|
|
break;
|
|
case 10:{
|
|
//开门反馈
|
|
if((data[7] & 0x3) == 2){
|
|
print("开门成功");
|
|
|
|
}
|
|
else{
|
|
|
|
}
|
|
}
|
|
break;
|
|
case 30:{
|
|
// 监视结束
|
|
if((data[7] & 0x3) == 1){
|
|
// 对方结束监视
|
|
print("对方结束监视");
|
|
|
|
} else{
|
|
//结束对讲反馈
|
|
print("结束监视反馈");
|
|
|
|
}
|
|
}
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
}
|