relayOutcomesStream property

Stream<Map<String, RelayRequestOutcome>> get relayOutcomesStream

relayOutcomes on every change, starting with what it holds right now, and closed once the request is over.

Late subscribers get the current outcomes instead of missing everything the relays answered before they listened.

Implementation

Stream<Map<String, RelayRequestOutcome>> get relayOutcomesStream {
  final served = servedBy;
  if (served != null) {
    return served.relayOutcomesStream;
  }
  final subject =
      _relayOutcomesSubject ??= BehaviorSubject.seeded(_ownRelayOutcomes);
  // asked for once the request is over: nothing is left to close a subject
  // created this late, and a closed one still replays what it ended on
  if (_relayOutcomesDone) {
    subject.close();
  }
  return subject.stream;
}