doRelayBroadcast method
===================================================================================== The flow:
- register broadcast in relay manager's global state, so that even failed to connect relays will be taken into account for broadcast done logic
- make sure the relay is connected by calling reconnect
- if connected was successfull send the event
- 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");
}