app-starlock/star_lock/lib/talk/udp/udp_talkClass.dart
2024-01-06 14:49:44 +08:00

135 lines
3.3 KiB
Dart
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import 'dart:async';
import 'package:audioplayers/audioplayers.dart';
import 'package:fast_gbk/fast_gbk.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:star_lock/tools/eventBusEventManage.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初始状态 1等待监视 2 3监视中 4呼叫成功 5主角通话中 6被叫通话 8被叫通话中
int status = 0;
var remoteEquid; // 手机号
late Timer timer;
// 该字段是为了判断是否跳转到接听界面 挂断或者退出接听界面要记得变更状态
var isBeCall = false;
final audioPlayer = AudioPlayer();
beCallW({List<int>? data, String? ip, int? port}) async {
print("beCall status:$status");
// 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 (isBeCall == false) {
isBeCall = true;
// 保持连接
timer = Timer.periodic(1.seconds, (timer) {
data[7] = 1;
data[8] = 9;
UDPManage().sendData(data);
});
Get.toNamed(Routers.lockMonitoringPage, arguments: {"lockId": "111"});
}
playLocalAudio();
} 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;
}
//播放本地音频
void playLocalAudio() async {
audioPlayer.setReleaseMode(ReleaseMode.loop);
await audioPlayer.play(AssetSource('ring1.mp3'));
}
// 停止播放本地音频
void stopLocalAudio() async {
audioPlayer.setReleaseMode(ReleaseMode.loop);
await audioPlayer.stop();
}
}