requestRelays method

Future<NdkResponse> requestRelays(
  1. String name,
  2. Iterable<String> urls,
  3. Filter filter, {
  4. Duration timeout = kDefaultStreamIdleTimeout,
  5. bool closeOnEOSE = true,
})

Implementation

Future<NdkResponse> requestRelays(
  String name,
  Iterable<String> urls,
  Filter filter, {
  Duration timeout = kDefaultStreamIdleTimeout,
  bool closeOnEOSE = true,
}) async {
  String id = Helpers.getSecureRandomHex(16);
  RequestState state = RequestState(
    closeOnEOSE
        ? NdkRequest.query(
            id,
            name: name,
            filters: [filter],
            timeoutDuration: timeout,
          )
        : NdkRequest.subscription(id, name: name, filters: []),
  );

  for (final url in urls) {
    state.addRequestForRelay(url, RelaySet.sliceFilterAuthors(filter));
  }
  _globalState.inFlightRequests[state.id] = state;

  for (final request in state.requests.values.toList()) {
    doRelayRequest(state.id, request);
  }

  return NdkResponse(
    state.id,
    state.stream,
    relayOutcomes: () => state.relayOutcomes,
    relayOutcomesStream: () => state.relayOutcomesStream,
    relayOutcomesDone: state.controller.done.then((_) => state.relayOutcomes),
  );
}