对讲挂断逻辑梳理

修复挂断出现的概率性异常问题
This commit is contained in:
Daisy 2024-03-29 13:54:38 +08:00
parent c6b61d1cb1
commit 49633dc766
7 changed files with 80 additions and 41 deletions

View File

@ -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;
}
} }
} }

View File

@ -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, () {

View File

@ -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';

View File

@ -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;

View File

@ -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 {

View File

@ -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:

View File

@ -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();
} }
} }