mirror of
https://github.com/MeexReay/sRAC.git
synced 2025-05-06 05:08:02 +03:00
accept stream write
This commit is contained in:
parent
5296399231
commit
fadeff53e0
33
src/main.rs
33
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<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);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user