waitForRequestSent method

Future<void> waitForRequestSent(
  1. String id,
  2. Duration timeout
)

Waits until a REQ with id is sent on a connected relay.

Implementation

Future<void> waitForRequestSent(String id, Duration timeout) async {
  if (globalState.relays.values.any(
    (relay) => relay.isConnected && relay.stats.openRequestIds.contains(id),
  )) {
    return;
  }
  final waiter = Completer<void>();
  _requestSentWaiters.putIfAbsent(id, () => {}).add(waiter);
  try {
    await waiter.future.timeout(
      timeout,
      onTimeout: () => throw TimeoutException(
        'NWC response subscription was not sent',
        timeout,
      ),
    );
  } finally {
    final waiters = _requestSentWaiters[id];
    waiters?.remove(waiter);
    if (waiters != null && waiters.isEmpty) _requestSentWaiters.remove(id);
  }
}