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); EasyLoading.showToast('已挂断'.tr);
startChartManage.stopSendingRbcuInfoMessages(); startChartManage.stopSendingRbcuInfoMessages();
startChartManage.stopSendingRbcuProBeMessages(); startChartManage.stopSendingRbcuProBeMessages();
startChartManage.stopTalkHangupMessageTimer();
Get.back(); Get.back();
} }
} }
@ -53,6 +54,7 @@ class UdpTalkHangUpHandler extends ScpMessageBaseHandle
talkDataOverTimeTimerManager.cancel(); talkDataOverTimeTimerManager.cancel();
startChartManage.stopSendingRbcuInfoMessages(); startChartManage.stopSendingRbcuInfoMessages();
startChartManage.stopSendingRbcuProBeMessages(); startChartManage.stopSendingRbcuProBeMessages();
startChartManage.stopTalkHangupMessageTimer();
} }
@override @override

View File

@ -33,6 +33,7 @@ class UdpTalkRejectHandler extends ScpMessageBaseHandle
talkDataOverTimeTimerManager.cancel(); talkDataOverTimeTimerManager.cancel();
startChartManage.stopSendingRbcuInfoMessages(); startChartManage.stopSendingRbcuInfoMessages();
startChartManage.stopSendingRbcuProBeMessages(); startChartManage.stopSendingRbcuProBeMessages();
startChartManage.stopTalkRejectMessageTimer();
} }
@override @override
@ -47,6 +48,7 @@ class UdpTalkRejectHandler extends ScpMessageBaseHandle
talkDataOverTimeTimerManager.cancel(); talkDataOverTimeTimerManager.cancel();
startChartManage.stopSendingRbcuInfoMessages(); startChartManage.stopSendingRbcuInfoMessages();
startChartManage.stopSendingRbcuProBeMessages(); startChartManage.stopSendingRbcuProBeMessages();
startChartManage.stopTalkRejectMessageTimer();
} }
@override @override

View File

@ -30,7 +30,7 @@ class TalkDataOverTimeTimerManager {
static void _handleTalkeDataOverTime() { static void _handleTalkeDataOverTime() {
EasyLoading.showToast('通话连接失败'.tr, duration: 2000.milliseconds); EasyLoading.showToast('通话连接失败'.tr, duration: 2000.milliseconds);
// //
StartChartManage().sendTalkHangupMessage(); StartChartManage().startTalkHangupMessageTimer();
StartChartManage().stopTalkPingMessageTimer(); StartChartManage().stopTalkPingMessageTimer();
StartChartManage().stopTalkExpectMessageTimer(); StartChartManage().stopTalkExpectMessageTimer();
StartChartManage().stopSendingRbcuInfoMessages(); StartChartManage().stopSendingRbcuInfoMessages();

View File

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

View File

@ -31,7 +31,7 @@ class TalkeRequestOverTimeTimerManager {
talkStatus.status == TalkStatus.proactivelyCallWaitingAnswer) { talkStatus.status == TalkStatus.proactivelyCallWaitingAnswer) {
EasyLoading.showToast('通话未接通,已挂断'.tr, duration: 2000.milliseconds); EasyLoading.showToast('通话未接通,已挂断'.tr, duration: 2000.milliseconds);
// //
StartChartManage().sendTalkRejectMessage(); StartChartManage().startTalkRejectMessageTimer();
StartChartManage().stopSendingRbcuInfoMessages(); StartChartManage().stopSendingRbcuInfoMessages();
StartChartManage().stopSendingRbcuProBeMessages(); StartChartManage().stopSendingRbcuProBeMessages();
talkStatus.setInitializationCompleted(); talkStatus.setInitializationCompleted();

View File

@ -97,6 +97,9 @@ class StartChartManage {
Timer? rbcuInfoTimer; // p2p地址交换定时器 Timer? rbcuInfoTimer; // p2p地址交换定时器
Timer? rbcuProbeTimer; // p2p打洞包 Timer? rbcuProbeTimer; // p2p打洞包
Timer? rbcuConfirmTimer; // p2p打洞确认包 Timer? rbcuConfirmTimer; // p2p打洞确认包
Timer? talkHangupTimer; //
Timer? talkRejectTimer; //
String _rbcuSessionId = ''; // p2p SessionId String _rbcuSessionId = ''; // p2p SessionId
Timer? talkRequestTimer; // Timer? talkRequestTimer; //
final int maxAttempts = 15; // final int maxAttempts = 15; //
@ -570,14 +573,23 @@ class StartChartManage {
stopTalkExpectMessageTimer(); stopTalkExpectMessageTimer();
} }
// void _sendTalkRejectMessage() {
void sendTalkRejectMessage() async {
final message = MessageCommand.talkRejectMessage( final message = MessageCommand.talkRejectMessage(
ToPeerId: ToPeerId, ToPeerId: ToPeerId,
FromPeerId: FromPeerId, FromPeerId: FromPeerId,
MessageId: MessageCommand.getNextMessageId(ToPeerId, increment: true), 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(); StartChartTalkStatus.instance.setRejected();
@ -652,14 +664,24 @@ class StartChartManage {
// _log(text: '发送通话保持'); // _log(text: '发送通话保持');
} }
// void _sendTalkHangupMessage() async {
Future<void> sendTalkHangupMessage() async {
final message = MessageCommand.talkHangupMessage( final message = MessageCommand.talkHangupMessage(
ToPeerId: ToPeerId, ToPeerId: ToPeerId,
FromPeerId: FromPeerId, FromPeerId: FromPeerId,
MessageId: MessageCommand.getNextMessageId(ToPeerId, increment: true), MessageId: MessageCommand.getNextMessageId(ToPeerId, increment: true),
); );
await _sendMessage(message: message); await _sendMessage(message: message);
}
//
//
void startTalkHangupMessageTimer() {
talkHangupTimer ??= Timer.periodic(
Duration(seconds: _defaultIntervalTime),
(Timer timer) async {
_sendTalkHangupMessage();
},
);
// //
StartChartTalkStatus.instance.setHangingUpDuring(); StartChartTalkStatus.instance.setHangingUpDuring();
@ -676,6 +698,18 @@ class StartChartManage {
talkDataOverTimeTimerManager.cancel(); talkDataOverTimeTimerManager.cancel();
} }
//
void stopTalkHangupMessageTimer() {
talkHangupTimer?.cancel();
talkHangupTimer = null;
}
//
void stopTalkRejectMessageTimer() {
talkRejectTimer?.cancel();
talkRejectTimer = null;
}
// 线 // 线
Future<void> reStartOnlineStartChartServer() async { Future<void> reStartOnlineStartChartServer() async {
if (isOnlineStarChartServer) { if (isOnlineStarChartServer) {
@ -1131,8 +1165,6 @@ class StartChartManage {
/// ///
void destruction() async { void destruction() async {
//
sendTalkHangupMessage();
isOnlineStarChartServer = false; isOnlineStarChartServer = false;
// //
stopHeartbeat(); stopHeartbeat();

View File

@ -71,10 +71,10 @@ class TalkViewLogic extends BaseGetXController {
void udpHangUpAction() async { void udpHangUpAction() async {
if (state.talkStatus.value == TalkStatus.answeredSuccessfully) { if (state.talkStatus.value == TalkStatus.answeredSuccessfully) {
// //
StartChartManage().sendTalkHangupMessage(); StartChartManage().startTalkHangupMessageTimer();
} else { } else {
// //
StartChartManage().sendTalkRejectMessage(); StartChartManage().startTalkRejectMessageTimer();
} }
Get.back(); Get.back();
} }