renet2_netcode/
native_socket.rs1use std::net::{SocketAddr, UdpSocket};
2
3use super::{ClientSocket, NetcodeError, NetcodeTransportError, ServerSocket};
4
5#[derive(Debug)]
7pub struct NativeSocket {
8 socket: UdpSocket,
9}
10
11impl NativeSocket {
12 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}