doRelayBroadcast method

Future<void> doRelayBroadcast(
  1. String relayUrl,
  2. Nip01Event nostrEvent
)

===================================================================================== The flow:

  1. register broadcast in relay manager's global state, so that even failed to connect relays will be taken into account for broadcast done logic
  2. make sure the relay is connected by calling reconnect
  3. if connected was successfull send the event
  4. otherwise call failBroadcast in order to publish a RelayBroadcastResponse for that specific relay with an error message

Implementation

Future<void> doRelayBroadcast(String relayUrl, Nip01Event nostrEvent) async {
  _relayManager.registerRelayBroadcast(
    eventToPublish: nostrEvent,
    relayUrl: relayUrl,
  );
  bool connected = false;
  Object? error;
  try {
    connected = await _relayManager.reconnectRelay(relayUrl,
        connectionSource: ConnectionSource.broadcastSpecific);
  } catch (e) {
    Logger.log.w(
        "Error during reconnectRelay for $relayUrl in doRelayBroadcast",
        error: e);
    error = e;
  }

  if (connected) {
    final relayConnectivity = _relayManager.getRelayConnectivity(relayUrl);
    if (relayConnectivity != null) {
      _relayManager.send(
          relayConnectivity,
          ClientMsg(
            ClientMsgType.kEvent,
            event: nostrEvent,
          ));
      return;
    }
  }
  _relayManager.failBroadcast(
      nostrEvent.id, relayUrl, "Could not connect to relay $relayUrl $error");
}