Skip to main content

Events

cairn nodes emit events for incoming messages, connection state changes, and peer discovery. The subscription mechanism varies by language.

MessageReceived

Emitted when an encrypted message arrives from a paired peer.

Payload:

FieldTypeDescription
peer_idstringSender's peer ID
channelstringChannel name the message was sent on
databytesDecrypted message payload
let mut events = node.subscribe();
while let Some(event) = events.recv().await {
if let Event::MessageReceived { peer_id, channel, data } = event {
println!("[{}] {}: {}", channel, peer_id, String::from_utf8_lossy(&data));
}
}

StateChanged

Emitted when a peer's connection state changes. Use this to update UI or trigger reconnection logic.

Payload:

FieldTypeDescription
peer_idstringPeer whose connection state changed
statestringOne of: connecting, connected, reconnecting, disconnected

State transitions: connectingconnectedreconnectingconnected (or disconnected)

if let Event::StateChanged { peer_id, state } = event {
println!("Peer {} state: {:?}", peer_id, state);
}

PeerDiscovered

Emitted when a paired peer is discovered on the network via mDNS (local network), DHT (internet), or signaling server.

Payload:

FieldTypeDescription
peer_idstringPeer ID of the discovered peer
if let Event::PeerDiscovered { peer_id } = event {
println!("Discovered peer: {}", peer_id);
}

PeerLost

Emitted when a previously discovered peer is no longer reachable on the network.

Payload:

FieldTypeDescription
peer_idstringPeer ID of the lost peer
if let Event::PeerLost { peer_id } = event {
println!("Lost peer: {}", peer_id);
}