diff --git a/lib/talk/starChart/handle/impl/udp_talk_hangup_handler.dart b/lib/talk/starChart/handle/impl/udp_talk_hangup_handler.dart index 686b8bc3..c73dcce3 100644 --- a/lib/talk/starChart/handle/impl/udp_talk_hangup_handler.dart +++ b/lib/talk/starChart/handle/impl/udp_talk_hangup_handler.dart @@ -36,6 +36,7 @@ class UdpTalkHangUpHandler extends ScpMessageBaseHandle EasyLoading.showToast('已挂断'.tr); startChartManage.stopSendingRbcuInfoMessages(); startChartManage.stopSendingRbcuProBeMessages(); + startChartManage.stopTalkHangupMessageTimer(); Get.back(); } } @@ -53,6 +54,7 @@ class UdpTalkHangUpHandler extends ScpMessageBaseHandle talkDataOverTimeTimerManager.cancel(); startChartManage.stopSendingRbcuInfoMessages(); startChartManage.stopSendingRbcuProBeMessages(); + startChartManage.stopTalkHangupMessageTimer(); } @override diff --git a/lib/talk/starChart/handle/impl/udp_talk_reject_handler.dart b/lib/talk/starChart/handle/impl/udp_talk_reject_handler.dart index b1fbcb15..15c16a16 100644 --- a/lib/talk/starChart/handle/impl/udp_talk_reject_handler.dart +++ b/lib/talk/starChart/handle/impl/udp_talk_reject_handler.dart @@ -33,6 +33,7 @@ class UdpTalkRejectHandler extends ScpMessageBaseHandle talkDataOverTimeTimerManager.cancel(); startChartManage.stopSendingRbcuInfoMessages(); startChartManage.stopSendingRbcuProBeMessages(); + startChartManage.stopTalkRejectMessageTimer(); } @override @@ -47,6 +48,7 @@ class UdpTalkRejectHandler extends ScpMessageBaseHandle talkDataOverTimeTimerManager.cancel(); startChartManage.stopSendingRbcuInfoMessages(); startChartManage.stopSendingRbcuProBeMessages(); + startChartManage.stopTalkRejectMessageTimer(); } @override diff --git a/lib/talk/starChart/handle/other/talke_data_over_time_timer_manager.dart b/lib/talk/starChart/handle/other/talke_data_over_time_timer_manager.dart index 3fe67456..a988d44a 100644 --- a/lib/talk/starChart/handle/other/talke_data_over_time_timer_manager.dart +++ b/lib/talk/starChart/handle/other/talke_data_over_time_timer_manager.dart @@ -30,7 +30,7 @@ class TalkDataOverTimeTimerManager { static void _handleTalkeDataOverTime() { EasyLoading.showToast('通话连接失败'.tr, duration: 2000.milliseconds); // 没有通话数据,发送挂断数据 - StartChartManage().sendTalkHangupMessage(); + StartChartManage().startTalkHangupMessageTimer(); StartChartManage().stopTalkPingMessageTimer(); StartChartManage().stopTalkExpectMessageTimer(); StartChartManage().stopSendingRbcuInfoMessages(); diff --git a/lib/talk/starChart/handle/other/talke_ping_over_time_timer_manager.dart b/lib/talk/starChart/handle/other/talke_ping_over_time_timer_manager.dart index 4fa9b85a..22632b13 100644 --- a/lib/talk/starChart/handle/other/talke_ping_over_time_timer_manager.dart +++ b/lib/talk/starChart/handle/other/talke_ping_over_time_timer_manager.dart @@ -36,7 +36,7 @@ class TalkePingOverTimeTimerManager { StartChartManage().stopTalkPingMessageTimer(); StartChartManage().stopTalkExpectMessageTimer(); // 如果通话异常,则发送通话中挂断 - StartChartManage().sendTalkHangupMessage(); + StartChartManage().startTalkHangupMessageTimer(); StartChartManage().stopSendingRbcuInfoMessages(); StartChartManage().stopSendingRbcuProBeMessages(); talkStatus.setNotTalkPing(); diff --git a/lib/talk/starChart/handle/other/talke_request_over_time_timer_manager.dart b/lib/talk/starChart/handle/other/talke_request_over_time_timer_manager.dart index 2ec529f6..44bb1630 100644 --- a/lib/talk/starChart/handle/other/talke_request_over_time_timer_manager.dart +++ b/lib/talk/starChart/handle/other/talke_request_over_time_timer_manager.dart @@ -31,7 +31,7 @@ class TalkeRequestOverTimeTimerManager { talkStatus.status == TalkStatus.proactivelyCallWaitingAnswer) { EasyLoading.showToast('通话未接通,已挂断'.tr, duration: 2000.milliseconds); // 超时未接听,发送挂断请求 - StartChartManage().sendTalkRejectMessage(); + StartChartManage().startTalkRejectMessageTimer(); StartChartManage().stopSendingRbcuInfoMessages(); StartChartManage().stopSendingRbcuProBeMessages(); talkStatus.setInitializationCompleted(); diff --git a/lib/talk/starChart/star_chart_manage.dart b/lib/talk/starChart/star_chart_manage.dart index 04457339..3a4fad35 100644 --- a/lib/talk/starChart/star_chart_manage.dart +++ b/lib/talk/starChart/star_chart_manage.dart @@ -97,6 +97,9 @@ class StartChartManage { Timer? rbcuInfoTimer; // p2p地址交换定时器 Timer? rbcuProbeTimer; // p2p打洞包 Timer? rbcuConfirmTimer; // p2p打洞确认包 + Timer? talkHangupTimer; // 添加挂断消息定时器 + Timer? talkRejectTimer; // 添加拒绝接听定时器 + String _rbcuSessionId = ''; // p2p SessionId Timer? talkRequestTimer; // 对讲请求定时器 final int maxAttempts = 15; // 最大执行次数 @@ -570,14 +573,23 @@ class StartChartManage { stopTalkExpectMessageTimer(); } - // 发送拒绝接听消息 - void sendTalkRejectMessage() async { + void _sendTalkRejectMessage() { final message = MessageCommand.talkRejectMessage( ToPeerId: ToPeerId, FromPeerId: FromPeerId, MessageId: MessageCommand.getNextMessageId(ToPeerId, increment: true), ); - await _sendMessage(message: message); + _sendMessage(message: message); + } + + // 发送拒绝接听消息 + void startTalkRejectMessageTimer() async { + talkRejectTimer ??= Timer.periodic( + Duration(seconds: _defaultIntervalTime), + (Timer timer) async { + _sendTalkRejectMessage(); + }, + ); // 设置状态为拒绝 StartChartTalkStatus.instance.setRejected(); @@ -652,14 +664,24 @@ class StartChartManage { // _log(text: '发送通话保持'); } - // 发送通话中挂断消息 - Future sendTalkHangupMessage() async { + void _sendTalkHangupMessage() async { final message = MessageCommand.talkHangupMessage( ToPeerId: ToPeerId, FromPeerId: FromPeerId, MessageId: MessageCommand.getNextMessageId(ToPeerId, increment: true), ); await _sendMessage(message: message); + } + + // 发送通话中挂断消息 + // 启动定时发送挂断消息 + void startTalkHangupMessageTimer() { + talkHangupTimer ??= Timer.periodic( + Duration(seconds: _defaultIntervalTime), + (Timer timer) async { + _sendTalkHangupMessage(); + }, + ); // 设置状态为通话中挂断 StartChartTalkStatus.instance.setHangingUpDuring(); @@ -676,6 +698,18 @@ class StartChartManage { talkDataOverTimeTimerManager.cancel(); } + // 停止发送挂断消息 + void stopTalkHangupMessageTimer() { + talkHangupTimer?.cancel(); + talkHangupTimer = null; + } + + // 停止发送挂断消息 + void stopTalkRejectMessageTimer() { + talkRejectTimer?.cancel(); + talkRejectTimer = null; + } + // 重新上线 Future reStartOnlineStartChartServer() async { if (isOnlineStarChartServer) { @@ -1131,8 +1165,6 @@ class StartChartManage { /// 销毁资源 void destruction() async { - // 发送挂断消息 - sendTalkHangupMessage(); isOnlineStarChartServer = false; // 停止发送心跳消息 stopHeartbeat(); diff --git a/lib/talk/starChart/views/talkView/talk_view_logic.dart b/lib/talk/starChart/views/talkView/talk_view_logic.dart index a7d67466..bbc980c7 100644 --- a/lib/talk/starChart/views/talkView/talk_view_logic.dart +++ b/lib/talk/starChart/views/talkView/talk_view_logic.dart @@ -71,10 +71,10 @@ class TalkViewLogic extends BaseGetXController { void udpHangUpAction() async { if (state.talkStatus.value == TalkStatus.answeredSuccessfully) { // 如果是通话中就挂断 - StartChartManage().sendTalkHangupMessage(); + StartChartManage().startTalkHangupMessageTimer(); } else { // 拒绝 - StartChartManage().sendTalkRejectMessage(); + StartChartManage().startTalkRejectMessageTimer(); } Get.back(); }