From e15b39b2a9cf028b12cbe98f56674e58c5a6bd4c Mon Sep 17 00:00:00 2001 From: metamuffin Date: Sun, 5 Jan 2025 22:27:53 +0100 Subject: a --- client/src/network.rs | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 client/src/network.rs (limited to 'client/src/network.rs') 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, + pub packet_send: Sender, +} +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) -> 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) -> Result<()> { + let mut sock = BufWriter::new(sock); + for packet in rx { + debug!("-> {packet:?}"); + packet.serialize(&mut sock)?; + } + Ok(()) +} -- cgit v1.2.3-70-g09d2