naia_client/transport/
mod.rs1cfg_if! {
2 if #[cfg(feature = "transport_webrtc")] {
3 pub mod webrtc;
4 } else {}
5}
6cfg_if! {
7 if #[cfg(feature = "transport_udp")] {
8 pub mod udp;
9 } else {}
10}
11
12mod server_addr;
13
14pub use server_addr::ServerAddr;
15
16pub use inner::{
17 IdentityReceiver, IdentityReceiverResult, PacketReceiver, PacketSender, RecvError, SendError,
18 Socket,
19};
20
21mod inner {
22
23 use naia_shared::IdentityToken;
24 pub enum IdentityReceiverResult {
25 Waiting,
26 Success(IdentityToken),
27 ErrorResponseCode(u16),
28 }
29
30 use super::ServerAddr;
31
32 pub struct SendError;
33
34 pub struct RecvError;
35
36 pub trait Socket {
37 fn connect(
38 self: Box<Self>,
39 ) -> (
40 Box<dyn IdentityReceiver>,
41 Box<dyn PacketSender>,
42 Box<dyn PacketReceiver>,
43 );
44 fn connect_with_auth(
45 self: Box<Self>,
46 auth_bytes: Vec<u8>,
47 ) -> (
48 Box<dyn IdentityReceiver>,
49 Box<dyn PacketSender>,
50 Box<dyn PacketReceiver>,
51 );
52 fn connect_with_auth_headers(
53 self: Box<Self>,
54 auth_headers: Vec<(String, String)>,
55 ) -> (
56 Box<dyn IdentityReceiver>,
57 Box<dyn PacketSender>,
58 Box<dyn PacketReceiver>,
59 );
60 fn connect_with_auth_and_headers(
61 self: Box<Self>,
62 auth_bytes: Vec<u8>,
63 auth_headers: Vec<(String, String)>,
64 ) -> (
65 Box<dyn IdentityReceiver>,
66 Box<dyn PacketSender>,
67 Box<dyn PacketReceiver>,
68 );
69 }
70
71 pub trait PacketSender: Send + Sync {
72 fn send(&self, payload: &[u8]) -> Result<(), SendError>;
74 fn server_addr(&self) -> ServerAddr;
76 }
77
78 pub trait PacketReceiver: PacketReceiverClone + Send + Sync {
79 fn receive(&mut self) -> Result<Option<&[u8]>, RecvError>;
81 fn server_addr(&self) -> ServerAddr;
83 }
84
85 pub trait PacketReceiverClone {
87 fn clone_box(&self) -> Box<dyn PacketReceiver>;
89 }
90
91 impl<T: 'static + PacketReceiver + Clone> PacketReceiverClone for T {
92 fn clone_box(&self) -> Box<dyn PacketReceiver> {
93 Box::new(self.clone())
94 }
95 }
96
97 impl Clone for Box<dyn PacketReceiver> {
98 fn clone(&self) -> Box<dyn PacketReceiver> {
99 PacketReceiverClone::clone_box(self.as_ref())
100 }
101 }
102
103 pub trait IdentityReceiver: IdentityReceiverClone + Send + Sync {
106 fn receive(&mut self) -> IdentityReceiverResult;
108 }
109
110 pub trait IdentityReceiverClone {
112 fn clone_box(&self) -> Box<dyn IdentityReceiver>;
114 }
115
116 impl<T: 'static + IdentityReceiver + Clone> IdentityReceiverClone for T {
117 fn clone_box(&self) -> Box<dyn IdentityReceiver> {
118 Box::new(self.clone())
119 }
120 }
121
122 impl Clone for Box<dyn IdentityReceiver> {
123 fn clone(&self) -> Box<dyn IdentityReceiver> {
124 IdentityReceiverClone::clone_box(self.as_ref())
125 }
126 }
127}