From fadeff53e02bb4451e0021dd549d2ef473d8b319 Mon Sep 17 00:00:00 2001 From: MeexReay Date: Mon, 14 Apr 2025 17:30:56 +0300 Subject: [PATCH] accept stream write --- src/main.rs | 33 ++++++++++++++++++++++++++++----- 1 file changed, 28 insertions(+), 5 deletions(-) diff --git a/src/main.rs b/src/main.rs index ef67405..944abd8 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,11 +1,30 @@ -use std::{env::args, error::Error, io::Read, net::{TcpListener, TcpStream}, thread}; +use std::{env::args, error::Error, io::{Read, Write}, net::{TcpListener, TcpStream}, sync::{Arc, RwLock}, thread}; -fn accept_stream(mut stream: TcpStream) -> Result<(), Box> { +fn accept_stream(mut stream: TcpStream, messages: Arc>>) -> Result<(), Box> { let mut buf = vec![0; 4096]; + let size = stream.read(&mut buf)?; + buf.truncate(size); - stream.read(&mut buf)?; + if buf[0] == 0x01 && size == 1 { + stream.write_all(messages.read().unwrap().len().to_string().as_bytes())?; - if buf[0] + let mut buf = vec![0, 16]; + let size = stream.read(&mut buf)?; + buf.truncate(size); + + if buf[0] == 0x01 { + stream.write_all(&messages.read().unwrap())?; + } else if buf[0] == 0x02 { + let len: usize = String::from_utf8(buf[1..].to_vec())?.parse()?; + stream.write_all(&messages.read().unwrap().clone()[len..])?; + } + } else if buf[0] == 0x01 { + messages.write().unwrap().append(&mut buf[1..].to_vec()); + } else if buf[0] == 0x02 { + + } else if buf[0] == 0x03 { + + } Ok(()) } @@ -15,13 +34,17 @@ fn main() { let listener = TcpListener::bind(&addr).expect("error trying bind to the provided addr"); + let messages = Arc::new(RwLock::new(Vec::new())); + println!("Server started on {}", &addr); for stream in listener.incoming() { let Ok(stream) = stream else { continue }; + let messages = messages.clone(); + thread::spawn(move || { - let _ = accept_stream(stream); + let _ = accept_stream(stream, messages); }); } }