doRelayRequest method

Future<bool> doRelayRequest(
  1. String id,
  2. RelayRequestState request
)

Implementation

Future<bool> doRelayRequest(String id, RelayRequestState request) async {
  if (_globalState.blockedRelays.contains(request.url)) {
    Logger.log.w(
      () => "COULD NOT SEND REQUEST TO ${request.url} since relay is blocked",
    );
    return false;
  }

  final connected = await _relayManager.reconnectRelay(
    request.url,
    connectionSource:
        ConnectionSource.explicit, // TODO improve this connection source
    force: false,
  );
  if (connected) {
    RelayConnectivity? relay = _globalState.relays[request.url];
    if (relay != null) {
      relay.stats.activeRequests++;
      try {
        await _relayManager.sendOrThrow(
          relay,
          ClientMsg(ClientMsgType.kReq, id: id, filters: request.filters),
        );
      } catch (e) {
        Logger.log.e(
          () => "COULD NOT SEND REQUEST TO ${request.url}:",
          error: e,
        );
        return false;
      }
    }
    return true;
  } else {
    Logger.log.e(
      () =>
          "COULD NOT SEND REQUEST TO ${request.url} since socket seems to be not open",
    );
    return false;
  }
}