1pub mod common;
21pub mod manager;
22pub mod multicast;
23pub mod unicast;
24
25#[cfg(feature = "shared-memory")]
26pub mod shm;
27#[cfg(feature = "shared-memory")]
28mod shm_context;
29
30use std::{any::Any, sync::Arc};
31
32pub use manager::*;
33use serde::Serialize;
34use zenoh_link::Link;
35use zenoh_protocol::{
36 core::{WhatAmI, ZenohIdProto},
37 network::NetworkMessageMut,
38};
39use zenoh_result::ZResult;
40
41use crate::{multicast::TransportMulticast, unicast::TransportUnicast};
42
43pub trait TransportEventHandler: Send + Sync {
47 fn new_unicast(
48 &self,
49 peer: TransportPeer,
50 transport: TransportUnicast,
51 ) -> ZResult<Arc<dyn TransportPeerEventHandler>>;
52
53 fn new_multicast(
54 &self,
55 _transport: TransportMulticast,
56 ) -> ZResult<Arc<dyn TransportMulticastEventHandler>>;
57}
58
59#[derive(Default)]
60pub struct DummyTransportEventHandler;
61
62impl TransportEventHandler for DummyTransportEventHandler {
63 fn new_unicast(
64 &self,
65 _peer: TransportPeer,
66 _transport: TransportUnicast,
67 ) -> ZResult<Arc<dyn TransportPeerEventHandler>> {
68 Ok(Arc::new(DummyTransportPeerEventHandler))
69 }
70
71 fn new_multicast(
72 &self,
73 _transport: TransportMulticast,
74 ) -> ZResult<Arc<dyn TransportMulticastEventHandler>> {
75 Ok(Arc::new(DummyTransportMulticastEventHandler))
76 }
77}
78
79pub trait TransportMulticastEventHandler: Send + Sync {
83 fn new_peer(&self, peer: TransportPeer) -> ZResult<Arc<dyn TransportPeerEventHandler>>;
84 fn closed(&self);
85 fn as_any(&self) -> &dyn Any;
86}
87
88#[derive(Default)]
90pub struct DummyTransportMulticastEventHandler;
91
92impl TransportMulticastEventHandler for DummyTransportMulticastEventHandler {
93 fn new_peer(&self, _peer: TransportPeer) -> ZResult<Arc<dyn TransportPeerEventHandler>> {
94 Ok(Arc::new(DummyTransportPeerEventHandler))
95 }
96 fn closed(&self) {}
97 fn as_any(&self) -> &dyn Any {
98 self
99 }
100}
101
102#[derive(Clone, Debug, Serialize, PartialEq, Eq)]
106#[serde(rename = "Transport")]
107pub struct TransportPeer {
108 pub zid: ZenohIdProto,
109 pub whatami: WhatAmI,
110 pub is_qos: bool,
111 #[serde(skip)]
112 pub links: Vec<Link>,
113 #[cfg(feature = "shared-memory")]
114 pub is_shm: bool,
115}
116
117pub trait TransportPeerEventHandler: Send + Sync {
118 fn handle_message(&self, msg: NetworkMessageMut) -> ZResult<()>;
119 fn new_link(&self, src: Link);
120 fn del_link(&self, link: Link);
121 fn closed(&self);
122 fn as_any(&self) -> &dyn Any;
123}
124
125#[derive(Default)]
127pub struct DummyTransportPeerEventHandler;
128
129impl TransportPeerEventHandler for DummyTransportPeerEventHandler {
130 fn handle_message(&self, _message: NetworkMessageMut) -> ZResult<()> {
131 Ok(())
132 }
133
134 fn new_link(&self, _link: Link) {}
135 fn del_link(&self, _link: Link) {}
136 fn closed(&self) {}
137
138 fn as_any(&self) -> &dyn Any {
139 self
140 }
141}