Skip to content

Instantly share code, notes, and snippets.

@janlimpens
Last active December 26, 2021 19:57
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save janlimpens/0372262dbd4810511a1c16e183b2e6b9 to your computer and use it in GitHub Desktop.
Save janlimpens/0372262dbd4810511a1c16e183b2e6b9 to your computer and use it in GitHub Desktop.
mod server;
use server::Server;
use tokio::{
io::{AsyncBufReadExt, AsyncWriteExt, BufReader},
net::TcpListener,
sync::broadcast,
};
#[tokio::main]
async fn main() {
let listener = TcpListener::bind("0.0.0.0:6666").await.unwrap();
let (tx, _rx) = broadcast::channel(10);
let mut server = Server::new();
loop {
let (mut socket, addr) = listener.accept().await.unwrap();
let tx = tx.clone();
let mut rx = tx.subscribe();
tokio::spawn(async move {
let (reader, mut writer) = socket.split();
let mut reader = BufReader::new(reader);
let mut line = String::new();
loop {
tokio::select! {
result = reader.read_line(&mut line) => {
if result.unwrap() == 0 {
break;
}
tx.send((line.clone(), addr)).unwrap();
line.clear();
}
result = rx.recv() => {
let (msg, other_addr) = result.unwrap();
if addr != other_addr {
writer.write_all(msg.as_bytes()).await.unwrap();
}
&server.handle(&msg);
/*
use of moved value: `server`
value moved here, in previous iteration of looprustcE0382
main.rs(44, 26): use occurs due to use in generator
main.rs(20, 9): move occurs because `server` has type `Server<'_>`, which does not implement the `Copy` trait
*/
}
}
}
});
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment