flushQueue method

  1. @override
Future<void> flushQueue()
override

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');
    }
  }
}