trigger method

void trigger(
  1. PushResponse response
)

Trigger the appropriate waiters and future associated for this push, given the provided response.

This will only trigger the waiters associated with the response's status, e.g. 'ok' or 'error'.

Implementation

void trigger(PushResponse response) {
  _received = response;

  if (_responseCompleter.isCompleted) {
    _logger
      ..warning('Push being completed more than once')
      ..warning(
        () => '  event: $replyEvent, status: ${response.status}',
      )
      ..finer(
        () => '  response: ${response.response}',
      );

    return;
  } else {
    _logger.finer(
      () => 'Completing for $replyEvent with response ${response.response}',
    );
    _responseCompleter.complete(response);
  }

  _logger.finer(() {
    if (_receivers[response.status] case final receiver?
        when receiver.isNotEmpty) {
      return 'Triggering ${receiver.length} callbacks';
    }
    return 'Not triggering any callbacks';
  });

  final receivers = _receivers[response.status]?.toList() ?? const [];
  clearReceivers();
  for (final cb in receivers) {
    cb(response);
  }
}