query method

Future<void> query(
  1. Filter filter,
  2. dynamic onEvent(
    1. Nip01Event
    )?
)

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