114 lines
2.7 KiB
Dart
114 lines
2.7 KiB
Dart
|
|
import 'dart:async';
|
|
|
|
import 'package:fast_gbk/fast_gbk.dart';
|
|
import 'package:flutter/material.dart';
|
|
import 'package:get/get.dart';
|
|
|
|
import '../../appRouters.dart';
|
|
import '../../main/lockDetail/monitoring/monitoring/lockMonitoring_page.dart';
|
|
import '../../tools/storage.dart';
|
|
import 'udp_manage.dart';
|
|
|
|
class UDPTalkClass{
|
|
static UDPTalkClass? _manager;
|
|
static UDPTalkClass _share(){
|
|
_manager ??= UDPTalkClass._init();
|
|
return _manager!;
|
|
}
|
|
factory UDPTalkClass() => _share();
|
|
UDPTalkClass get manager => _share();
|
|
|
|
UDPTalkClass._init();
|
|
|
|
var status = 0;// 0空闲
|
|
var remoteEquid;// 手机号
|
|
late Timer timer;
|
|
// 该字段是为了判断是否跳转到接听界面 挂断或者退出接听界面要记得变更状态
|
|
var isBeCall = false;
|
|
|
|
beCallW({List<int>? data, String? ip, int? port}) async {
|
|
// print("beCall");
|
|
// if (await isCallMe(data)) {
|
|
// return;
|
|
// }
|
|
|
|
if(status == 0){
|
|
// 空闲
|
|
// 响铃
|
|
// [[Pub getApp] ring];
|
|
remoteEquid = getEquidFrombb(data, 9);
|
|
status = 6;
|
|
|
|
// 呼叫应答,呼叫成功
|
|
data![7] = 1;
|
|
data[8] = 4;
|
|
UDPManage().sendData(data);
|
|
|
|
// 门锁发送视频
|
|
data[7] = 1;
|
|
data[8] = 5;
|
|
UDPManage().sendData(data);
|
|
|
|
// Get.to(MaterialPageRoute(
|
|
// builder: (context) {
|
|
// return const LockMonitoringPage();
|
|
// },
|
|
// fullscreenDialog: true
|
|
// ));
|
|
|
|
if(UDPTalkClass().isBeCall == false){
|
|
UDPTalkClass().isBeCall = true;
|
|
// 保持连接
|
|
timer = Timer.periodic(1.seconds, (timer) {
|
|
data[7] = 1;
|
|
data[8] = 9;
|
|
UDPManage().sendData(data);
|
|
});
|
|
}
|
|
|
|
Get.toNamed(Routers.lockMonitoringPage, arguments: {
|
|
"lockId": "111"
|
|
});
|
|
}else{
|
|
// 忙
|
|
|
|
}
|
|
}
|
|
|
|
// 判断是否是call的本人
|
|
Future<bool> isCallMe(List<int>? data) async {
|
|
final loginData = await Storage.getLoginData();
|
|
print("getEquidFrombb(data, 1000):${getEquidFrombb(data, 12)}");
|
|
if(loginData!.mobile == getEquidFrombb(data, 12)){
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
String getEquidFrombb(List<int>? bb, int pos) {
|
|
var equid = "";
|
|
int equlen = 8;
|
|
|
|
if (bb![pos] == 77) { //M
|
|
equlen = 8;
|
|
} else if (bb[pos] == 87) { //W
|
|
equlen = 5;
|
|
} else if (bb[pos] == 72) { //H
|
|
equlen = 12;
|
|
} else if (bb[pos] == 83) { //S
|
|
equlen = 12;
|
|
} else if (bb[pos] == 0x50) { //P
|
|
equlen = 12;
|
|
} else if (bb[pos] == 0x54) { //T
|
|
equlen = 16;
|
|
} else {
|
|
equlen = 12;
|
|
}
|
|
|
|
List<int> tempbb = bb.sublist(pos, pos + equlen);
|
|
equid = gbk.decode(tempbb);
|
|
return equid;
|
|
}
|
|
|
|
} |