accept stream write

This commit is contained in:
MeexReay 2025-04-14 17:30:56 +03:00
parent 5296399231
commit fadeff53e0

View File

@ -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<dyn Error>> { fn accept_stream(mut stream: TcpStream, messages: Arc<RwLock<Vec<u8>>>) -> Result<(), Box<dyn Error>> {
let mut buf = vec![0; 4096]; 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(()) Ok(())
} }
@ -15,13 +34,17 @@ fn main() {
let listener = TcpListener::bind(&addr).expect("error trying bind to the provided addr"); 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); println!("Server started on {}", &addr);
for stream in listener.incoming() { for stream in listener.incoming() {
let Ok(stream) = stream else { continue }; let Ok(stream) = stream else { continue };
let messages = messages.clone();
thread::spawn(move || { thread::spawn(move || {
let _ = accept_stream(stream); let _ = accept_stream(stream, messages);
}); });
} }
} }