5 use connect::{tcp::TcpListener, StreamExt};
7 use remote_client::Client;
14 pub struct ServerData {
15 players: RwLock<HashMap<String, Arc<Client>>>,
19 listener: TcpListener,
20 data: Arc<ServerData>,
25 pub async fn new(addr: &str, quit: Quit) -> Self {
28 listener: TcpListener::bind(addr).await.unwrap(),
29 data: Arc::new(ServerData {
30 players: RwLock::new(HashMap::new()),
35 pub async fn run(mut self) {
36 let mut quit = self.quit.subscribe();
40 conn = self.listener.next() => Client::create(
41 conn.expect("listener interrupted"),
42 Arc::downgrade(&self.data),
46 trace!("quit signal received");
49 else => unreachable!("quit channel broke"),
53 info!("stopped server");