sendEvents method

Future sendEvents(
  1. List<RawEvent> events
)

Implementation

Future sendEvents(List<RawEvent> events) async {
  if (events.isEmpty) {
    return;
  }

  final List<List<RawEvent>> chunkedEvents = chunk(events,
      analytics?.state.configuration.state.maxBatchSize ?? maxEventsPerBatch,
      maxKB: maxPayloadSizeInKb);

  final List<RawEvent> sentEvents = [];
  var numFailedEvents = 0;

  await Future.forEach(chunkedEvents, (batch) async {
    try {
      final succeeded = await analytics?.httpClient.startBatchUpload(
          analytics!.state.configuration.state.writeKey, batch,
          host: _apiHost);
      if (succeeded == null || !succeeded) {
        numFailedEvents += batch.length;
      }
      sentEvents.addAll(batch);
    } catch (e) {
      numFailedEvents += batch.length;
    } finally {
      _queuePlugin.dequeue(sentEvents);
    }
  });

  if (sentEvents.isNotEmpty) {
    log("Sent ${sentEvents.length} events", kind: LogFilterKind.debug);
  }

  if (numFailedEvents > 0) {
    log("Failed to send $numFailedEvents events", kind: LogFilterKind.error);
  }

  return;
}