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

129 lines
3.2 KiB
Dart
Raw Normal View History

2023-12-11 13:44:15 +08:00
import 'dart:async';
2023-12-21 10:21:25 +08:00
import 'package:audioplayers/audioplayers.dart';
2023-12-11 13:44:15 +08:00
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();
2023-12-18 16:03:05 +08:00
UDPTalkClass._init();
2023-12-11 13:44:15 +08:00
2023-12-21 10:21:25 +08:00
var status = 0; //0初始状态 1等待监视 2 3监视中 4呼叫成功 5主角通话中 6被叫通话 8被叫通话中
2023-12-18 16:03:05 +08:00
var remoteEquid;// 手机号
2023-12-11 13:44:15 +08:00
late Timer timer;
// 该字段是为了判断是否跳转到接听界面 挂断或者退出接听界面要记得变更状态
var isBeCall = false;
2023-12-21 10:21:25 +08:00
final audioPlayer = AudioPlayer();
2023-12-11 13:44:15 +08:00
beCallW({List<int>? data, String? ip, int? port}) async {
2023-12-18 16:03:05 +08:00
// print("beCall");
2023-12-11 13:44:15 +08:00
// if (await isCallMe(data)) {
// return;
// }
if(status == 0){
// 空闲
// 响铃
// [[Pub getApp] ring];
remoteEquid = getEquidFrombb(data, 9);
status = 6;
2023-12-18 16:03:05 +08:00
// 呼叫应答,呼叫成功
2023-12-11 13:44:15 +08:00
data![7] = 1;
data[8] = 4;
UDPManage().sendData(data);
2023-12-18 16:03:05 +08:00
// 门锁发送视频
2023-12-11 13:44:15 +08:00
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;
2023-12-18 16:03:05 +08:00
// 保持连接
2023-12-11 13:44:15 +08:00
timer = Timer.periodic(1.seconds, (timer) {
data[7] = 1;
data[8] = 9;
UDPManage().sendData(data);
});
}
Get.toNamed(Routers.lockMonitoringPage, arguments: {
"lockId": "111"
});
2023-12-21 10:21:25 +08:00
playLocalAudio();
2023-12-11 13:44:15 +08:00
}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;
}
2023-12-21 10:21:25 +08:00
//播放本地音频
void playLocalAudio() async {
audioPlayer.setReleaseMode(ReleaseMode.loop);
await audioPlayer.play(AssetSource('ring1.mp3'));
}
// 停止播放本地音频
void stopLocalAudio() async {
audioPlayer.setReleaseMode(ReleaseMode.loop);
await audioPlayer.stop();
}
2023-12-11 13:44:15 +08:00
}