quad_net/quad_socket/
client.rs

1use std::net::ToSocketAddrs;
2
3#[cfg(not(target_arch = "wasm32"))]
4mod tcp;
5#[cfg(target_arch = "wasm32")]
6use crate::web_socket::js_web_socket as websocket;
7
8use crate::error::Error;
9
10pub struct QuadSocket {
11    #[cfg(not(target_arch = "wasm32"))]
12    tcp_socket: tcp::TcpSocket,
13    #[cfg(target_arch = "wasm32")]
14    web_socket: websocket::WebSocket,
15}
16
17impl QuadSocket {
18    pub fn send(&mut self, data: &[u8]) {
19        #[cfg(not(target_arch = "wasm32"))]
20        {
21            self.tcp_socket.send(data);
22        }
23
24        #[cfg(target_arch = "wasm32")]
25        {
26            self.web_socket.send_bytes(data);
27        }
28    }
29
30    pub fn try_recv(&mut self) -> Option<Vec<u8>> {
31        #[cfg(not(target_arch = "wasm32"))]
32        {
33            self.tcp_socket.try_recv()
34        }
35
36        #[cfg(target_arch = "wasm32")]
37        {
38            self.web_socket.try_recv()
39        }
40    }
41}
42
43#[cfg(feature = "nanoserde")]
44impl QuadSocket {
45    pub fn send_bin<T: nanoserde::SerBin>(&mut self, data: &T) {
46        use nanoserde::SerBin;
47
48        self.send(&SerBin::serialize_bin(data));
49    }
50
51    pub fn try_recv_bin<T: nanoserde::DeBin + std::fmt::Debug>(&mut self) -> Option<T> {
52        let bytes = self.try_recv()?;
53        let data: T = nanoserde::DeBin::deserialize_bin(&bytes).expect("Cant parse message");
54
55        Some(data)
56    }
57}
58
59impl QuadSocket {
60    #[cfg(target_arch = "wasm32")]
61    pub fn is_wasm_websocket_connected(&self) -> bool {
62        self.web_socket.connected()
63    }
64
65    pub fn connect<A: ToSocketAddrs + std::fmt::Display>(addr: A) -> Result<QuadSocket, Error> {
66        Ok(QuadSocket {
67            #[cfg(not(target_arch = "wasm32"))]
68            tcp_socket: tcp::TcpSocket::connect(addr)?,
69            #[cfg(target_arch = "wasm32")]
70            web_socket: websocket::WebSocket::connect(addr)?,
71        })
72    }
73}