diff options
author | metamuffin <metamuffin@disroot.org> | 2025-01-05 22:27:53 +0100 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2025-01-05 22:27:53 +0100 |
commit | e15b39b2a9cf028b12cbe98f56674e58c5a6bd4c (patch) | |
tree | 92484ce572dff978fc289eb54d19bbb692c01c12 /client/src/network.rs | |
parent | c427fed04f89147bcdcb2b4b1be9198a063d89cd (diff) | |
download | weareserver-e15b39b2a9cf028b12cbe98f56674e58c5a6bd4c.tar weareserver-e15b39b2a9cf028b12cbe98f56674e58c5a6bd4c.tar.bz2 weareserver-e15b39b2a9cf028b12cbe98f56674e58c5a6bd4c.tar.zst |
a
Diffstat (limited to 'client/src/network.rs')
-rw-r--r-- | client/src/network.rs | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/client/src/network.rs b/client/src/network.rs new file mode 100644 index 0000000..0fd5f08 --- /dev/null +++ b/client/src/network.rs @@ -0,0 +1,55 @@ +use std::{ + io::{BufReader, BufWriter}, + net::TcpStream, + sync::mpsc::{Receiver, Sender, channel}, + thread::spawn, +}; + +use anyhow::Result; +use log::{debug, info, warn}; +use weareshared::packets::Packet; + +pub struct Network { + pub packet_recv: Receiver<Packet>, + pub packet_send: Sender<Packet>, +} +impl Network { + pub fn new(sock: TcpStream) -> Self { + info!("starting network threads"); + let (packet_send, rx) = channel(); + let (tx, packet_recv) = channel(); + + let sock2 = sock.try_clone().unwrap(); + spawn(move || { + if let Err(e) = handle_conn_read(sock, tx) { + warn!("read thread: {e:?}") + } + }); + spawn(move || { + if let Err(e) = handle_conn_write(sock2, rx) { + warn!("write thread: {e:?}") + } + }); + Self { + packet_recv, + packet_send, + } + } +} + +fn handle_conn_read(sock: TcpStream, tx: Sender<Packet>) -> Result<()> { + let mut sock = BufReader::new(sock); + loop { + let packet = Packet::deserialize(&mut sock)?; + debug!("<- {packet:?}"); + tx.send(packet)?; + } +} +fn handle_conn_write(sock: TcpStream, rx: Receiver<Packet>) -> Result<()> { + let mut sock = BufWriter::new(sock); + for packet in rx { + debug!("-> {packet:?}"); + packet.serialize(&mut sock)?; + } + Ok(()) +} |