handleRequest method

  1. @override
Future<void> handleRequest(
  1. RequestState state
)
override

Implementation

@override
Future<void> handleRequest(RequestState state) async {
  if (state.request.explicitRelays == null ||
      state.request.explicitRelays!.isEmpty) {
    await _relayManager.seedRelaysConnected;
  }

  if (state.request.relaySet != null) {
    return await doNostrRequestWithRelaySet(state);
  }
  Iterable<String>? relaysForRequest;

  if (state.request.explicitRelays != null &&
      state.request.explicitRelays!.isNotEmpty) {
    relaysForRequest = state.request.explicitRelays;
  } else {
    relaysForRequest = _bootstrapRelays;
  }
  relaysForRequest = cleanRelayUrls(relaysForRequest!.toList());
  for (final url in relaysForRequest) {
    if (state.request.filters.isEmpty) {
      throw Exception("cannot do request with empty filters");
    }
    final List<Filter> filters = [];
    for (final filter in state.request.filters) {
      filters.addAll(RelaySet.sliceFilterAuthors(filter));
    }
    state.addRequestForRelay(url, filters);
  }
  _globalState.inFlightRequests[state.id] = state;

  state.closeIfNoRelays();

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