handleRequest method
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);
}
}