对讲挂断逻辑梳理
修复挂断出现的概率性异常问题
This commit is contained in:
parent
c6b61d1cb1
commit
49633dc766
@ -61,7 +61,7 @@ class LockMonitoringLogic extends BaseGetXController {
|
|||||||
state.oneMinuteTime.value++;
|
state.oneMinuteTime.value++;
|
||||||
if (state.oneMinuteTime.value >= 60) {
|
if (state.oneMinuteTime.value >= 60) {
|
||||||
t.cancel(); // 取消定时器
|
t.cancel(); // 取消定时器
|
||||||
initiateUdpHangUpAction(); // 挂断操作
|
initiateUdpHangUpAction(1); // 挂断操作
|
||||||
print('通话时间超过60秒,自动挂断');
|
print('通话时间超过60秒,自动挂断');
|
||||||
state.oneMinuteTime.value = 0;
|
state.oneMinuteTime.value = 0;
|
||||||
}
|
}
|
||||||
@ -86,8 +86,8 @@ class LockMonitoringLogic extends BaseGetXController {
|
|||||||
if (state.answerSeconds >= 6) {
|
if (state.answerSeconds >= 6) {
|
||||||
state.answerTimer.cancel();
|
state.answerTimer.cancel();
|
||||||
showToast("接听失败");
|
showToast("接听失败");
|
||||||
initiateUdpHangUpAction();
|
// initiateUdpHangUpAction(2);
|
||||||
// UDPTalkClass().callNoAnswer();
|
UDPTalkClass().callNoAnswer(1);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -107,28 +107,37 @@ class LockMonitoringLogic extends BaseGetXController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//发起挂断命令,每隔一秒钟发一次,六秒无应答则失败
|
//发起挂断命令,每隔一秒钟发一次,六秒无应答则失败
|
||||||
void initiateUdpHangUpAction() {
|
void initiateUdpHangUpAction(int clickIndex) {
|
||||||
// 每隔一秒调用一次 udpHangUpAction 方法
|
// 每隔一秒调用一次 udpHangUpAction 方法
|
||||||
state.hangUpTimer = Timer.periodic(const Duration(seconds: 1), (timer) {
|
state.hangUpTimer = Timer.periodic(const Duration(seconds: 1), (timer) {
|
||||||
state.hangUpSeconds++;
|
|
||||||
udpHangUpAction();
|
udpHangUpAction();
|
||||||
|
state.hangUpSeconds++;
|
||||||
|
|
||||||
//如果已经挂断成功,则取消定时器
|
// //如果已经挂断成功,则取消定时器
|
||||||
if (UDPTalkClass().isEndCall == true) {
|
// if (UDPTalkClass().isEndCall == true) {
|
||||||
state.hangUpTimer.cancel();
|
// print('{$clickIndex}已经挂断成功');
|
||||||
return;
|
// state.hangUpTimer.cancel();
|
||||||
}
|
// return;
|
||||||
|
// }
|
||||||
|
|
||||||
|
// if (UDPTalkClass().status == 6) {
|
||||||
|
// print('{$clickIndex}被叫中,已经挂断成功');
|
||||||
|
// state.hangUpTimer.cancel();
|
||||||
|
// return;
|
||||||
|
// }
|
||||||
|
|
||||||
// 检查条件,如果达到6秒且未得到应答,则认为失败
|
// 检查条件,如果达到6秒且未得到应答,则认为失败
|
||||||
if (state.hangUpSeconds >= 6) {
|
if (state.hangUpSeconds >= 6) {
|
||||||
state.hangUpTimer.cancel(); // 取消定时器
|
state.hangUpTimer.cancel(); // 取消定时器
|
||||||
UDPTalkClass().callNoAnswer();
|
// showToast("挂断失败");
|
||||||
|
UDPTalkClass().callNoAnswer(2);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/// 挂断
|
/// 挂断
|
||||||
udpHangUpAction() async {
|
udpHangUpAction() async {
|
||||||
|
print('点了挂断么');
|
||||||
UDPSenderManage.sendMainProtocol(
|
UDPSenderManage.sendMainProtocol(
|
||||||
command: 150,
|
command: 150,
|
||||||
commandTypeIsCalling: 1,
|
commandTypeIsCalling: 1,
|
||||||
@ -458,8 +467,23 @@ class LockMonitoringLogic extends BaseGetXController {
|
|||||||
_getUDPStatusRefreshUIEvent!.cancel();
|
_getUDPStatusRefreshUIEvent!.cancel();
|
||||||
if (state.oneMinuteTimeTimer != null) {
|
if (state.oneMinuteTimeTimer != null) {
|
||||||
state.oneMinuteTimeTimer.cancel();
|
state.oneMinuteTimeTimer.cancel();
|
||||||
|
state.oneMinuteTime.value = 0;
|
||||||
}
|
}
|
||||||
stopProcessing();
|
stopProcessing();
|
||||||
state.listPhotoData.value = Uint8List(0);
|
state.listPhotoData.value = Uint8List(0);
|
||||||
|
if (state.answerTimer != null) {
|
||||||
|
state.answerTimer.cancel();
|
||||||
|
state.answerSeconds.value = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (state.hangUpTimer != null) {
|
||||||
|
state.hangUpTimer.cancel();
|
||||||
|
state.hangUpSeconds.value = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (state.openDoorTimer != null) {
|
||||||
|
state.openDoorTimer.cancel();
|
||||||
|
state.openDoorSeconds.value = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -207,14 +207,15 @@ class _LockMonitoringPageState extends State<LockMonitoringPage> {
|
|||||||
CallTalk().stopPcmSound();
|
CallTalk().stopPcmSound();
|
||||||
// 挂断
|
// 挂断
|
||||||
if (state.isClickHangUp.value == false) {
|
if (state.isClickHangUp.value == false) {
|
||||||
logic.initiateUdpHangUpAction();
|
logic.initiateUdpHangUpAction(3);
|
||||||
state.isClickHangUp.value = true;
|
state.isClickHangUp.value = true;
|
||||||
} else {
|
|
||||||
print('点了这里?');
|
|
||||||
state.isClickHangUp.value = false;
|
|
||||||
UDPTalkClass().stopLocalAudio();
|
|
||||||
logic.udpHangUpAction();
|
|
||||||
}
|
}
|
||||||
|
// else {
|
||||||
|
// print('点了这里?');
|
||||||
|
// state.isClickHangUp.value = true;
|
||||||
|
// UDPTalkClass().stopLocalAudio();
|
||||||
|
// logic.initiateUdpHangUpAction(4);
|
||||||
|
// }
|
||||||
}),
|
}),
|
||||||
bottomBtnItemWidget("images/main/icon_lockDetail_monitoringUnlock.png",
|
bottomBtnItemWidget("images/main/icon_lockDetail_monitoringUnlock.png",
|
||||||
"开锁", AppColors.mainColor, () {
|
"开锁", AppColors.mainColor, () {
|
||||||
|
|||||||
@ -5,8 +5,6 @@ import '../../../blue/blue_manage.dart';
|
|||||||
import '../../../network/api_repository.dart';
|
import '../../../network/api_repository.dart';
|
||||||
import '../../../talk/udp/udp_help.dart';
|
import '../../../talk/udp/udp_help.dart';
|
||||||
import '../../../tools/baseGetXController.dart';
|
import '../../../tools/baseGetXController.dart';
|
||||||
import '../../../tools/eventBusEventManage.dart';
|
|
||||||
import '../../../versionUndate/versionUndateTool.dart';
|
|
||||||
import '../entity/lockListInfo_entity.dart';
|
import '../entity/lockListInfo_entity.dart';
|
||||||
import 'lockMain_state.dart';
|
import 'lockMain_state.dart';
|
||||||
|
|
||||||
|
|||||||
@ -1,4 +1,3 @@
|
|||||||
|
|
||||||
import 'dart:convert';
|
import 'dart:convert';
|
||||||
|
|
||||||
import '../../../blue/io_tool/io_tool.dart';
|
import '../../../blue/io_tool/io_tool.dart';
|
||||||
@ -9,7 +8,6 @@ import '../io_udpType.dart';
|
|||||||
import '../udp_reply.dart';
|
import '../udp_reply.dart';
|
||||||
|
|
||||||
class UDPSendHeartCommand extends UDPSenderProtocol {
|
class UDPSendHeartCommand extends UDPSenderProtocol {
|
||||||
|
|
||||||
String? userName;
|
String? userName;
|
||||||
List<int>? ipList;
|
List<int>? ipList;
|
||||||
String? tokenStr;
|
String? tokenStr;
|
||||||
|
|||||||
@ -48,6 +48,7 @@ class UdpHelp {
|
|||||||
ipList: serversList,
|
ipList: serversList,
|
||||||
tokenStr: "b989fa15f75c2ac02718b7c9bb64f80e",
|
tokenStr: "b989fa15f75c2ac02718b7c9bb64f80e",
|
||||||
);
|
);
|
||||||
|
print('发送心跳了');
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -58,9 +59,9 @@ class UdpHelp {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
dispose() {
|
// dispose() {
|
||||||
udpHeartTimer!.cancel();
|
// udpHeartTimer!.cancel();
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
class UdpData {
|
class UdpData {
|
||||||
|
|||||||
@ -1,6 +1,7 @@
|
|||||||
import 'dart:typed_data';
|
import 'dart:typed_data';
|
||||||
|
|
||||||
import 'package:flutter_easyloading/flutter_easyloading.dart';
|
import 'package:flutter_easyloading/flutter_easyloading.dart';
|
||||||
|
import 'package:fluttertoast/fluttertoast.dart';
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
import 'package:star_lock/talk/udp/udp_manage.dart';
|
import 'package:star_lock/talk/udp/udp_manage.dart';
|
||||||
|
|
||||||
@ -104,6 +105,7 @@ class CommandUDPReciverManager {
|
|||||||
break;
|
break;
|
||||||
case 30:
|
case 30:
|
||||||
{
|
{
|
||||||
|
// print('收到挂断反馈了');
|
||||||
// 挂断
|
// 挂断
|
||||||
if ((data[7] & 0x3) == 1) {
|
if ((data[7] & 0x3) == 1) {
|
||||||
// 对方结束对讲
|
// 对方结束对讲
|
||||||
@ -112,13 +114,15 @@ class CommandUDPReciverManager {
|
|||||||
//结束对讲反馈
|
//结束对讲反馈
|
||||||
print("结束对讲反馈");
|
print("结束对讲反馈");
|
||||||
}
|
}
|
||||||
UDPTalkClass().status = 0;
|
// UDPTalkClass().status = 0;
|
||||||
UDPTalkClass().isBeCall = false;
|
// UDPTalkClass().isBeCall = false;
|
||||||
UDPTalkClass().stopLocalAudio();
|
// UDPTalkClass().isEndCall = true;
|
||||||
CallTalk().stopPcmSound();
|
// UDPTalkClass().stopLocalAudio();
|
||||||
eventBus.fire(GetUDPStatusRefreshUI(UDPTalkClass().status));
|
// CallTalk().stopPcmSound();
|
||||||
Get.back();
|
// eventBus.fire(GetUDPStatusRefreshUI(UDPTalkClass().status));
|
||||||
print('挂断反馈刷新UI1');
|
// Get.back();
|
||||||
|
UDPTalkClass().callNoAnswer(3);
|
||||||
|
// print('挂断反馈刷新UI1');
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 140:
|
case 140:
|
||||||
|
|||||||
@ -3,9 +3,8 @@ import 'package:audioplayers/audioplayers.dart';
|
|||||||
import 'package:fast_gbk/fast_gbk.dart';
|
import 'package:fast_gbk/fast_gbk.dart';
|
||||||
import 'package:flutter_local_notifications/flutter_local_notifications.dart';
|
import 'package:flutter_local_notifications/flutter_local_notifications.dart';
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
import 'package:star_lock/main/lockDetail/monitoring/monitoring/lockMonitoring_logic.dart';
|
|
||||||
import 'package:star_lock/main/lockDetail/monitoring/monitoring/lockMonitoring_state.dart';
|
|
||||||
import 'package:star_lock/talk/call/callTalk.dart';
|
import 'package:star_lock/talk/call/callTalk.dart';
|
||||||
|
import 'package:star_lock/tools/eventBusEventManage.dart';
|
||||||
import '../../appRouters.dart';
|
import '../../appRouters.dart';
|
||||||
import '../../tools/storage.dart';
|
import '../../tools/storage.dart';
|
||||||
import 'udp_manage.dart';
|
import 'udp_manage.dart';
|
||||||
@ -26,7 +25,7 @@ class UDPTalkClass {
|
|||||||
int status = 0;
|
int status = 0;
|
||||||
|
|
||||||
var remoteEquid; // 手机号
|
var remoteEquid; // 手机号
|
||||||
late Timer timer;
|
late Timer talkTimer;
|
||||||
// 该字段是为了判断是否跳转到接听界面 挂断或者退出接听界面要记得变更状态
|
// 该字段是为了判断是否跳转到接听界面 挂断或者退出接听界面要记得变更状态
|
||||||
var isBeCall = false;
|
var isBeCall = false;
|
||||||
var isEndCall = false; //是否已经调用结束对讲
|
var isEndCall = false; //是否已经调用结束对讲
|
||||||
@ -68,7 +67,7 @@ class UDPTalkClass {
|
|||||||
if (isBeCall == false) {
|
if (isBeCall == false) {
|
||||||
isBeCall = true;
|
isBeCall = true;
|
||||||
// 保持连接
|
// 保持连接
|
||||||
timer = Timer.periodic(1.seconds, (timer) {
|
talkTimer = Timer.periodic(1.seconds, (timer) {
|
||||||
data[7] = 1;
|
data[7] = 1;
|
||||||
data[8] = 9;
|
data[8] = 9;
|
||||||
UDPManage().sendData(data);
|
UDPManage().sendData(data);
|
||||||
@ -83,7 +82,7 @@ class UDPTalkClass {
|
|||||||
playLocalAudio();
|
playLocalAudio();
|
||||||
|
|
||||||
if (isEndCall == true) {
|
if (isEndCall == true) {
|
||||||
print('已经结束对讲');
|
print('已经结束对讲1');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
playLocalAudioTimer = Timer.periodic(const Duration(seconds: 1), (timer) {
|
playLocalAudioTimer = Timer.periodic(const Duration(seconds: 1), (timer) {
|
||||||
@ -91,7 +90,8 @@ class UDPTalkClass {
|
|||||||
// 检查条件,如果达到60秒且未得到应答,则认为失败
|
// 检查条件,如果达到60秒且未得到应答,则认为失败
|
||||||
if (playLocalAudioSecond >= 60) {
|
if (playLocalAudioSecond >= 60) {
|
||||||
playLocalAudioTimer.cancel(); // 取消定时器
|
playLocalAudioTimer.cancel(); // 取消定时器
|
||||||
LockMonitoringLogic().initiateUdpHangUpAction();
|
// LockMonitoringLogic().initiateUdpHangUpAction(5);
|
||||||
|
callNoAnswer(4);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
@ -170,14 +170,27 @@ class UDPTalkClass {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//呼叫有响铃无应答处理
|
//呼叫有响铃无应答处理
|
||||||
void callNoAnswer() {
|
void callNoAnswer(int clickIndex) {
|
||||||
// print('无应答处理');
|
if (isEndCall == true) {
|
||||||
|
print('已经结束对讲2');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
print('$clickIndex****无应答处理');
|
||||||
stopLocalAudio();
|
stopLocalAudio();
|
||||||
status = 0;
|
status = 0;
|
||||||
isBeCall = false;
|
isBeCall = false;
|
||||||
isEndCall = true;
|
// isEndCall = true;
|
||||||
LockMonitoringState().isClickHangUp.value = false;
|
// LockMonitoringState().isClickHangUp.value = false;
|
||||||
CallTalk().stopPcmSound();
|
CallTalk().stopPcmSound();
|
||||||
|
eventBus.fire(GetUDPStatusRefreshUI(UDPTalkClass().status));
|
||||||
|
if (talkTimer != null) {
|
||||||
|
talkTimer.cancel();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (playLocalAudioTimer != null) {
|
||||||
|
playLocalAudioTimer.cancel();
|
||||||
|
playLocalAudioSecond = 0;
|
||||||
|
}
|
||||||
Get.back();
|
Get.back();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user