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")]
48 let args = Args::parse();
50 let (quit, mut quit_confirm) = Quit::new();
52 let quit_ctrl_c = quit.clone();
53 task::spawn(async move {
54 signal::ctrl_c().await.unwrap();
59 Mode::Server { address } => Server::new(&address, quit).await.run().await,
60 Mode::Client { address } => Client::run(&address, quit).await,
61 Mode::Singleplayer { address } => {
62 let server = Server::new(&address, quit.clone()).await;
63 tokio::join!(server.run(), Client::run(&address, quit));
67 let _ = quit_confirm.recv().await;