renet2_netcode/
native_socket.rs

1use std::net::{SocketAddr, UdpSocket};
2
3use super::{ClientSocket, NetcodeError, NetcodeTransportError, ServerSocket};
4
5/// Implementation of [`ServerSocket`] for `UdpSockets`.
6#[derive(Debug)]
7pub struct NativeSocket {
8    socket: UdpSocket,
9}
10
11impl NativeSocket {
12    /// Makes a new native socket.
13    pub fn new(socket: UdpSocket) -> Result<Self, NetcodeError> {
14        socket.set_nonblocking(true)?;
15        Ok(Self { socket })
16    }
17}
18
19impl ServerSocket for NativeSocket {
20    fn is_encrypted(&self) -> bool {
21        false
22    }
23    fn is_reliable(&self) -> bool {
24        false
25    }
26
27    fn addr(&self) -> std::io::Result<SocketAddr> {
28        self.socket.local_addr()
29    }
30
31    fn is_closed(&mut self) -> bool {
32        false
33    }
34
35    fn close(&mut self) {}
36    fn connection_denied(&mut self, _: SocketAddr) {}
37    fn connection_accepted(&mut self, _: u64, _: SocketAddr) {}
38    fn disconnect(&mut self, _: SocketAddr) {}
39    fn preupdate(&mut self) {}
40
41    fn try_recv(&mut self, buffer: &mut [u8]) -> std::io::Result<(usize, SocketAddr)> {
42        self.socket.recv_from(buffer)
43    }
44
45    fn postupdate(&mut self) {}
46
47    fn send(&mut self, addr: SocketAddr, packet: &[u8]) -> Result<(), NetcodeTransportError> {
48        self.socket.send_to(packet, addr)?;
49        Ok(())
50    }
51}
52
53impl ClientSocket for NativeSocket {
54    fn is_encrypted(&self) -> bool {
55        false
56    }
57    fn is_reliable(&self) -> bool {
58        false
59    }
60
61    fn addr(&self) -> std::io::Result<SocketAddr> {
62        self.socket.local_addr()
63    }
64
65    fn is_closed(&mut self) -> bool {
66        false
67    }
68
69    fn close(&mut self) {}
70    fn preupdate(&mut self) {}
71
72    fn try_recv(&mut self, buffer: &mut [u8]) -> std::io::Result<(usize, SocketAddr)> {
73        self.socket.recv_from(buffer)
74    }
75
76    fn postupdate(&mut self) {}
77
78    fn send(&mut self, addr: SocketAddr, packet: &[u8]) -> Result<(), NetcodeTransportError> {
79        self.socket.send_to(packet, addr)?;
80        Ok(())
81    }
82}