naia_client_socket/backends/native/
packet_sender.rs1use tokio::sync::mpsc::{error::SendError, Sender, UnboundedSender};
2use webrtc_unreliable_client::{AddrCell, ServerAddr as RTCServerAddr};
3
4use crate::{error::NaiaClientSocketError, packet_sender::PacketSender, server_addr::ServerAddr};
5
6#[derive(Clone)]
8pub struct PacketSenderImpl {
9 server_addr: AddrCell,
10 sender_channel: UnboundedSender<Box<[u8]>>,
11 disconnect_channel: Sender<()>,
12}
13
14impl PacketSenderImpl {
15 pub fn new(
18 server_addr: AddrCell,
19 sender_channel: UnboundedSender<Box<[u8]>>,
20 disconnect_channel: Sender<()>,
21 ) -> Self {
22 Self {
23 server_addr,
24 sender_channel,
25 disconnect_channel,
26 }
27 }
28}
29
30impl PacketSender for PacketSenderImpl {
31 fn send(&self, payload: &[u8]) -> Result<(), NaiaClientSocketError> {
33 self.sender_channel
34 .send(payload.into())
35 .map_err(|_err: SendError<_>| NaiaClientSocketError::SendError)
36 }
37
38 fn server_addr(&self) -> ServerAddr {
40 match self.server_addr.get() {
41 RTCServerAddr::Finding => ServerAddr::Finding,
42 RTCServerAddr::Found(addr) => ServerAddr::Found(addr),
43 }
44 }
45
46 fn connected(&self) -> bool {
47 !self.sender_channel.is_closed()
48 }
49
50 fn disconnect(&mut self) {
51 let _ = self.disconnect_channel.blocking_send(());
52 }
53}