quad_net/quad_socket/
client.rs1use 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}