pipeworks_net/
lib.rs

1pub mod bridge;
2pub mod discovery;
3pub mod transport;
4
5use std::{
6    collections::HashMap,
7    net::SocketAddr,
8    sync::{Arc, Mutex},
9    time::SystemTime,
10};
11
12use pipeworks_core::node_id::NodeId;
13use pipeworks_derive::BusLocal;
14use tokio::{sync::mpsc, task::JoinError, time::error::Elapsed};
15
16/// Bus event, latest set of known peers, discovered (via a UDP broadcast). Updated each and every
17/// peer UDP broadcast (aka frequently).
18#[derive(BusLocal, Clone, Default, Debug)]
19pub struct PeersDiscovered {
20    pub peers: HashMap<NodeId, PeerDiscoveryInfo>,
21}
22
23/// Bus event, latest socket address for the bound TCP listener (socket).
24#[derive(BusLocal, Clone, Debug)]
25pub struct TcpListenerBind {
26    pub listen_addr: SocketAddr,
27}
28
29/// Bus event, latest peer TCP connection states.
30#[derive(BusLocal, Clone, Default, Debug)]
31pub struct TcpPeers {
32    pub peers: HashMap<NodeId, TcpPeerState>,
33}
34
35#[derive(Clone, Debug)]
36pub struct PeerDiscoveryInfo {
37    pub first_seen_at: SystemTime,
38    pub last_seen_at: SystemTime,
39    pub socket_addr: SocketAddr,
40}
41
42#[derive(Clone, Debug)]
43pub enum TcpPeerState {
44    Connecting {
45        socket_addr: SocketAddr,
46    },
47    AwaitingPeerConnection {
48        socket_addr: SocketAddr,
49    },
50    Connected {
51        socket_addr: SocketAddr,
52        stream: Arc<Mutex<Option<(mpsc::Sender<Vec<u8>>, mpsc::Receiver<Vec<u8>>)>>>,
53    },
54    Disconnected {
55        socket_addr: SocketAddr,
56        at: SystemTime,
57        reason: TcpDisconnectReason,
58    },
59}
60
61#[derive(Clone, Debug)]
62pub enum TcpDisconnectReason {
63    /// The local stream was closed, so we terminated the connection with the peer as no one is
64    /// around to process the data.
65    LocalClose,
66
67    /// The IO raised an error during processing.
68    IoError(Arc<std::io::Error>),
69
70    /// We failed to receive a heartbeat in the set time frame.
71    HeartbeatTimeout(Arc<Elapsed>),
72
73    /// The peer sent us an invalide node id as the first payload.
74    BadHandshake,
75
76    /// A Tokio task panic.
77    ThreadPanic(Arc<JoinError>),
78}