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#[derive(BusLocal, Clone, Default, Debug)]
19pub struct PeersDiscovered {
20 pub peers: HashMap<NodeId, PeerDiscoveryInfo>,
21}
22
23#[derive(BusLocal, Clone, Debug)]
25pub struct TcpListenerBind {
26 pub listen_addr: SocketAddr,
27}
28
29#[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 LocalClose,
66
67 IoError(Arc<std::io::Error>),
69
70 HeartbeatTimeout(Arc<Elapsed>),
72
73 BadHandshake,
75
76 ThreadPanic(Arc<JoinError>),
78}