Skip to main content

naia_client_socket/
packet_sender.rs

1use super::{error::NaiaClientSocketError, server_addr::ServerAddr};
2
3/// Used to send packets from the Client Socket
4pub trait PacketSender: PacketSenderClone + Send + Sync {
5    /// Sends a packet from the Client Socket
6    fn send(&self, payload: &[u8]) -> Result<(), NaiaClientSocketError>;
7    /// Get the Server's Socket address
8    fn server_addr(&self) -> ServerAddr;
9    /// Get whether the Client Socket is connected
10    fn connected(&self) -> bool;
11    /// Disconnect the Client Socket
12    fn disconnect(&mut self);
13}
14
15/// Used to clone Box<dyn PacketSender>
16pub trait PacketSenderClone {
17    /// Clone the boxed PacketSender
18    fn clone_box(&self) -> Box<dyn PacketSender>;
19}
20
21impl<T: 'static + PacketSender + Clone> PacketSenderClone for T {
22    fn clone_box(&self) -> Box<dyn PacketSender> {
23        Box::new(self.clone())
24    }
25}
26
27impl Clone for Box<dyn PacketSender> {
28    fn clone(&self) -> Box<dyn PacketSender> {
29        PacketSenderClone::clone_box(self.as_ref())
30    }
31}