flushQueue method
Sends queued events in order. Stops at the first event that fails with an error worth retrying and keeps it at the head of the queue; drops an event the server rejects.
Implementation
@override
Future<void> flushQueue() async {
LinkFortyLogger.log('Flushing event queue (${_eventQueue.count} events)');
while (!_eventQueue.isEmpty) {
final event = _eventQueue.dequeue();
if (event == null) break;
try {
await _sendEvent(event);
await _persistQueue();
LinkFortyLogger.log('Queued event sent: ${event.eventName}');
} catch (e) {
if (isRetryable(e)) {
_eventQueue.requeueFront([event]);
await _persistQueue();
LinkFortyLogger.log(
'Failed to send queued event, keeping it queued: $e',
);
return;
}
await _persistQueue();
LinkFortyLogger.log('Dropping queued event the server rejected: $e');
}
}
}