fix:挂断消息改为使用定时器重发机制
This commit is contained in:
parent
7d65c45fa9
commit
017b18600b
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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();
|
||||
|
||||
@ -36,7 +36,7 @@ class TalkePingOverTimeTimerManager {
|
||||
StartChartManage().stopTalkPingMessageTimer();
|
||||
StartChartManage().stopTalkExpectMessageTimer();
|
||||
// 如果通话异常,则发送通话中挂断
|
||||
StartChartManage().sendTalkHangupMessage();
|
||||
StartChartManage().startTalkHangupMessageTimer();
|
||||
StartChartManage().stopSendingRbcuInfoMessages();
|
||||
StartChartManage().stopSendingRbcuProBeMessages();
|
||||
talkStatus.setNotTalkPing();
|
||||
|
||||
@ -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();
|
||||
|
||||
@ -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();
|
||||
|
||||
@ -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();
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user