diff --git a/.idea/watcherTasks.xml b/.idea/watcherTasks.xml new file mode 100644 index 0000000..9334f1f --- /dev/null +++ b/.idea/watcherTasks.xml @@ -0,0 +1,8 @@ + + + + + + + \ No newline at end of file diff --git a/src/main.rs b/src/main.rs index eaae492..cb009bf 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,14 +1,27 @@ -use tokio::io::{AsyncReadExt, AsyncWriteExt}; +use tokio::io::{AsyncBufReadExt, AsyncWriteExt, BufReader}; use tokio::net::TcpListener; #[tokio::main] async fn main() { let listener = TcpListener::bind("localhost:8080").await.unwrap(); - let (mut socket, _addr) = listener.accept().await.unwrap(); loop { - let mut buffer = [0u8; 1024]; - let bytes_read = socket.read(&mut buffer).await.unwrap(); - socket.write_all(&buffer[..bytes_read]).await.unwrap(); + let (mut socket, _addr) = listener.accept().await.unwrap(); + + tokio::spawn(async move { + let (reader, mut writer) = socket.split(); + + let mut reader = BufReader::new(reader); + let mut line = String::new(); + + loop { + let bytes_read = reader.read_line(&mut line).await.unwrap(); + if bytes_read == 0 { + break; + } + writer.write_all(&line.as_bytes()).await.unwrap(); + line.clear(); + } + }); } }