handleRequest method

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

Implementation

@override
Future<void> handleRequest(RequestState state) async {
  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;
  }
  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.addRequest(url, filters);
  }
  _globalState.inFlightRequests[state.id] = state;

  for (MapEntry<String, RelayRequestState> entry in state.requests.entries) {
    doRelayRequest(state.id, entry.value).then((sent) {
      if (!sent) {
        state.requests.remove(entry.value.url);
      }
    });
  }
}