query method
Implementation
Future<void> query(Filter filter, Function(Nip01Event)? onEvent) async {
/// extract from the filter which pubKeys and directions we should use the query for such filter
List<PubkeyMapping> pubKeys = filter.extractPubKeyMappingsFromFilter();
/// calculate best relays for each pubKey/direction considering connectivity quality for each relay
Map<String, List<PubkeyMapping>> bestRelays = _calculateBestRelays(pubKeys);
List<Future> futures = [];
for (String url in bestRelays.keys) {
List<PubkeyMapping>? pubKeys = bestRelays[url];
Filter dedicatedFilter = filter.splitForPubKeys(pubKeys!);
futures.add(request(url, dedicatedFilter, (json) {
if (onEvent != null) {
onEvent(json);
}
}));
}
await Future.wait(futures);
}