(server) chore:Complete basic message receive and send logic (#5)

This commit is contained in:
2025-07-12 12:48:34 +08:00
parent 3e5a0cf974
commit 847fc9153e

View File

@ -1,4 +1,4 @@
use tokio::io::AsyncWriteExt; use tokio::io::{ErrorKind, Interest};
use tokio::net::{TcpListener, TcpStream}; use tokio::net::{TcpListener, TcpStream};
pub(crate) struct TcpServer; pub(crate) struct TcpServer;
@ -20,10 +20,44 @@ impl TcpServer {
} }
} }
async fn process(mut socket: TcpStream) { async fn process(socket: TcpStream) {
socket loop {
.write_all("Hello from server written in Rust!".as_bytes()) match socket.ready(Interest::READABLE | Interest::WRITABLE).await {
.await Ok(ready) => {
.unwrap(); if ready.is_readable() {
let mut buffer = Vec::with_capacity(1024);
match socket.try_read_buf(&mut buffer) {
// We need to write to client after reading from that,
// so we use `continue` here instead if `break`.
Ok(_) => {
log::info!("Received contents");
// TODO: Start dispatching messages here.
continue;
}
Err(e) if e.kind() == ErrorKind::WouldBlock => continue,
Err(e) => {
log::error!("Failed to read from TCP client socket: {e}");
break;
}
}
}
if ready.is_writable() {
match socket.try_write(b"Hello from server written in Rust!") {
Ok(_) => break,
Err(e) if e.kind() == ErrorKind::WouldBlock => continue,
Err(e) => {
log::error!("Failed to write to TCP client socket: {e}");
break;
}
}
}
}
Err(e) => log::error!("Failed to wait for any states: {e}"),
}
}
} }
} }