Crate msgpacknet [] [src]

A networking layer based on MessagePack messages.

This crate provides an abstraction layer above TCP that uses MessagePack encoded messages instead of pure byte streams. It also abstracts from addresses and connections and instead uses node identifiers to distinguish and address nodes.

The main struct of this crate is Node which can be parametrized:

Low-level protocol

When establishing a new connection (either incoming or outgoing), first an InitMessage is sent to the remote node together with the local NodeId and then the initialization message and the remote NodeId is read from that node. After inspecting the initialization message, the connection is either rejected and closed or accepted and added to the connection registry.

When established, the connection can be used to send multiple messages of the Message type.

When idle for a certain timeout or when closing the node by dropping its CloseGuard, the connection is closed.

Examples

To use this crate, first a Node has to be created with a node id and an initialization message which are sent to other nodes as first message.

use msgpacknet::*;
let node = Node::<String, (u64, u64)>::create_default();

Then, sockets can be opened for listening and accepting connections. The method node.listen_defaults() can be used to listen on free ports on IPv4 and IPv6.

node.listen_defaults().expect("Failed to bind");

The actual addresses can be obtained using node.addresses().

println!("Addresses: {:?}", node.addresses());
let addr = node.addresses()[0];

Connections to other nodes can be established via connect(...). The result of the call is the remote side's node id.

let peer_id = node.connect(addr).expect("Failed to connect");

Then, messages can be sent via send(...)...

let msg = "Hello world".to_owned();
node.send(&peer_id, &msg).expect("Failed to send");

...and received via receive().

let event = node.receive();

Structs

CloseGuard

A guard that closes the node when dropped.

ConnectionRequest

The request to establish a connection

ConnectionStats

Statistics of one connection

Node

The node struct

NodeStats

Node statistics

Enums

Error

The error type used througout the crate

Event

The enum used for events

Traits

InitMessage

The trait used for initialization messages

Message

The trait used for messages

NodeId

The trait used for node identifiers