1 #![feature(if_let_guard)]
8 use clap::{Parser, Subcommand};
12 use tokio::{signal, task};
15 #[clap(version, about, long_about = None)]
17 /// Select client/server/multiplayer mode
24 /// Connect to a remote server
26 /// Address to connect to
32 /// Address to listen to
36 /// Host a local server and connect to it
38 /// Optionally open the game to LAN
39 #[clap(value_parser, default_value_t = String::from("127.0.0.1:49120"))]
44 #[tokio::main(flavor = "multi_thread")]
46 let args = Args::parse();
48 let (quit, mut quit_confirm) = Quit::new();
50 let quit_ctrl_c = quit.clone();
51 task::spawn(async move {
52 signal::ctrl_c().await.unwrap();
57 Mode::Server { address } => Server::new(&address, quit).await.run().await,
58 Mode::Client { address } => Client::run(&address, quit).await,
59 Mode::Singleplayer { address } => {
60 let server = Server::new(&address, quit.clone()).await;
61 tokio::join!(server.run(), Client::run(&address, quit));
65 let _ = quit_confirm.recv().await;