fix:增加组包时的最大组包超时时间

This commit is contained in:
liyi 2024-12-24 14:20:59 +08:00
parent a20206dfaf
commit 4ab5d77473

View File

@ -1,3 +1,4 @@
import 'dart:async';
import 'dart:convert';
import 'package:audioplayers/audioplayers.dart';
@ -22,6 +23,8 @@ class ScpMessageBaseHandle {
///
// messageId
static Map<int, List<List<int>>> _packetBuffer = {};
final Map<int, Timer> _packetTimers = {};
final Duration _timeoutDuration = Duration(seconds: 10); //
//
final TalkDataRepository talkDataRepository = TalkDataRepository.instance;
@ -74,7 +77,7 @@ class ScpMessageBaseHandle {
///
/// null
dynamic handleFragmentedPayload({
dynamic handleFragmentedPayload({
required int messageId,
required int spTotal,
required int spIndex,
@ -84,6 +87,7 @@ class ScpMessageBaseHandle {
//
if (!_packetBuffer.containsKey(messageId)) {
_packetBuffer[messageId] = List.filled(spTotal, []);
_startTimer(messageId);
}
//
@ -102,7 +106,7 @@ class ScpMessageBaseHandle {
_packetBuffer[messageId]!.expand((packet) => packet).toList();
//
_packetBuffer.remove(messageId);
_clearPacketData(messageId);
// payload
if (payloadType == PayloadTypeConstant.talkData) {
@ -120,4 +124,18 @@ class ScpMessageBaseHandle {
return null;
}
}
//
void _startTimer(int messageId) {
_packetTimers[messageId]?.cancel();
_packetTimers[messageId] = Timer(_timeoutDuration, () {
_clearPacketData(messageId);
});
}
//
void _clearPacketData(int messageId) {
_packetBuffer.remove(messageId);
_packetTimers.remove(messageId)?.cancel();
}
}