fix:挂断消息改为使用定时器重发机制

This commit is contained in:
liyi 2025-02-17 09:51:23 +08:00
parent 7d65c45fa9
commit 017b18600b
7 changed files with 48 additions and 12 deletions

View File

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

View File

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

View File

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

View File

@ -36,7 +36,7 @@ class TalkePingOverTimeTimerManager {
StartChartManage().stopTalkPingMessageTimer();
StartChartManage().stopTalkExpectMessageTimer();
//
StartChartManage().sendTalkHangupMessage();
StartChartManage().startTalkHangupMessageTimer();
StartChartManage().stopSendingRbcuInfoMessages();
StartChartManage().stopSendingRbcuProBeMessages();
talkStatus.setNotTalkPing();

View File

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

View File

@ -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<void> 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<void> reStartOnlineStartChartServer() async {
if (isOnlineStarChartServer) {
@ -1131,8 +1165,6 @@ class StartChartManage {
///
void destruction() async {
//
sendTalkHangupMessage();
isOnlineStarChartServer = false;
//
stopHeartbeat();

View File

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