made a simple echo chat server

This commit is contained in:
clizia 2025-01-10 01:16:10 +01:00
parent ebaa596a2d
commit 24e9621194

View file

@ -1,8 +1,7 @@
use anyhow::Result; use anyhow::Result;
use tokio::net::{TcpListener, TcpStream}; use tokio::net::{TcpListener, TcpStream};
use tokio::io::{AsyncReadExt, AsyncWriteExt}; use tokio::io::{AsyncBufReadExt, AsyncReadExt, AsyncWriteExt, BufReader};
use tokio::sync::broadcast;
use deck::Deck;
mod card; mod card;
mod deck; mod deck;
@ -11,18 +10,41 @@ mod lobby;
#[tokio::main] #[tokio::main]
async fn main() -> Result<(), anyhow::Error> { async fn main() -> Result<(), anyhow::Error> {
let listener = TcpListener::bind("127.0.0.1:6379").await?; let address = "127.0.0.1:8080".to_string();
let listener = TcpListener::bind(&address).await?;
loop { let (tx, rx) = broadcast::channel::<String>(10);
match listener.accept().await {
Ok((mut socket, addr)) => { while let Ok((mut stream,_)) = listener.accept().await {
println!("new client: {:?}", addr); let tx = tx.clone();
socket.write_all(b"ciao").await?; let mut rx = rx.resubscribe();
socket.flush().await?;
}, tokio::spawn(async move {
Err(e) => println!("couldn't get client: {:?}", e), let (read, mut write) = stream.split();
} let mut reader = BufReader::new(read);
let mut line = String::new();
loop {
tokio::select! {
bytes_read = reader.read_line(&mut line) => {
if bytes_read.unwrap() == 0 {
println!("connection closed");
return;
}
tx.send(line.clone()).unwrap();
},
msg = rx.recv() => {
write.write_all(format!("> {}", msg.unwrap()).as_bytes()).await.expect("failed to write data");
line.clear();
}
}
}
});
} }
Ok(()) Ok(())
} }
async fn spawn(mut stream: TcpStream) -> Result<(), anyhow::Error> {
todo!()
}