Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Crate erl_dist

Source
Expand description

Rust Implementation of Erlang Distribution Protocol.

Distribution protocol is used to communicate with distributed erlang nodes.

Reference: Distribution Protocol

§Examples

Gets a node entry from EPMD:

use erl_dist::epmd::{DEFAULT_EPMD_PORT, EpmdClient};

// Connect to the local EPMD.
let connection = TcpStream::connect(("localhost", DEFAULT_EPMD_PORT)).await?;
let client = EpmdClient::new(connection);

// Get the information of a node.
let node_name = "foo";
if let Some(node) = client.get_node(node_name).await? {
    println!("Found: {:?}", node);
} else {
    println!("Not found");
}

Sends a message to an Erlang node:

use erl_dist::LOWEST_DISTRIBUTION_PROTOCOL_VERSION;
use erl_dist::node::{Creation, LocalNode};
use erl_dist::handshake::ClientSideHandshake;
use erl_dist::term::{Atom, Pid};
use erl_dist::message::{channel, Message};

// Connect to a peer node.
let peer_host = "localhost";
let peer_port = 7483;  // NOTE: Usually, port number is retrieved from EPMD.
let connection = TcpStream::connect((peer_host, peer_port)).await?;

// Local node information.
let creation = Creation::random();
let local_node = LocalNode::new("foo@localhost".parse()?, creation);

// Do handshake.
let mut handshake = ClientSideHandshake::new(connection, local_node.clone(), "cookie");
let _status = handshake.execute_send_name(LOWEST_DISTRIBUTION_PROTOCOL_VERSION).await?;
let (connection, peer_node) = handshake.execute_rest(true).await?;

// Create a channel.
let capability_flags = local_node.flags & peer_node.flags;
let (mut tx, _) = channel(connection, capability_flags);

// Send a message.
let from_pid = Pid::new(local_node.name.to_string(), 0, 0, local_node.creation.get());
let to_name = Atom::from("bar");
let msg = Message::reg_send(from_pid, to_name, Atom::from("hello").into());
tx.send(msg).await?;

Example commands:

Modules§

epmd
EPMD client and other EPMD related components.
handshake
Distribution Handshake.
message
Messages passed between distributed nodes, and channels for those messages.
node
Node related components.
term
Erlang terms.

Structs§

DistributionFlags
Distribution flags.

Constants§

HIGHEST_DISTRIBUTION_PROTOCOL_VERSION
The highest distribution protocol version this crate can handle.
LOWEST_DISTRIBUTION_PROTOCOL_VERSION
The lowest distribution protocol version this crate can handle.