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