getStreamingResponse method

  1. @override
Stream<RealtimeServerMessage> getStreamingResponse({
  1. CancellationToken? cancellationToken,
})
override

Streams the response messages generated by the session.

This cannot be called multiple times concurrently on the same session instance.

Implementation

@override
Stream<RealtimeServerMessage> getStreamingResponse({
  CancellationToken? cancellationToken,
}) {
  Stream<RealtimeServerMessage> streamFn() async* {
    if (_logger.isEnabled(LogLevel.debug)) {
      _logger.logDebug('getStreamingResponse invoked.');
    }

    try {
      await for (final message in _innerSession.getStreamingResponse(
        cancellationToken: cancellationToken,
      )) {
        if (_logger.isEnabled(LogLevel.trace)) {
          _logger.logTrace(
            'getStreamingResponse received message. '
            'Message: ${_loggable(message)}.',
          );
        }
        yield message;
      }

      if (_logger.isEnabled(LogLevel.debug)) {
        _logger.logDebug('getStreamingResponse completed.');
      }
    } on OperationCanceledException {
      if (_logger.isEnabled(LogLevel.debug)) {
        _logger.logDebug('getStreamingResponse canceled.');
      }
      rethrow;
    } catch (e) {
      _logger.logError('getStreamingResponse failed.', error: e);
      rethrow;
    }
  }

  return streamFn();
}