diff options
author | metamuffin <metamuffin@disroot.org> | 2024-09-20 22:54:17 +0200 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2024-09-20 22:57:39 +0200 |
commit | 7071dfe8259716375bb9f1373ea0b88a39102efa (patch) | |
tree | 32404c4af2324519ff09fc026dead77700d2ba86 /server/src/main.rs | |
parent | 9ddb4d7786509bf5995bd5e254c611a05ea50eba (diff) | |
download | hurrycurry-7071dfe8259716375bb9f1373ea0b88a39102efa.tar hurrycurry-7071dfe8259716375bb9f1373ea0b88a39102efa.tar.bz2 hurrycurry-7071dfe8259716375bb9f1373ea0b88a39102efa.tar.zst |
server can register
Diffstat (limited to 'server/src/main.rs')
-rw-r--r-- | server/src/main.rs | 33 |
1 files changed, 28 insertions, 5 deletions
diff --git a/server/src/main.rs b/server/src/main.rs index 20d9908d..4db43c64 100644 --- a/server/src/main.rs +++ b/server/src/main.rs @@ -21,6 +21,7 @@ use futures_util::{SinkExt, StreamExt}; use hurrycurry_protocol::{PacketC, PacketS, BINCODE_CONFIG, VERSION}; use hurrycurry_server::{ data::DATA_DIR, + register::Register, server::{GameServerExt, Server}, trm, ConnectionID, }; @@ -45,7 +46,7 @@ use tokio::{ use tokio_tungstenite::tungstenite::Message; #[derive(Parser)] -struct Args { +pub(crate) struct Args { /// Print the version, then exit #[arg(short, long)] version: bool, @@ -55,6 +56,18 @@ struct Args { /// Set the address on which the server should listen #[arg(short, long, default_value = "0.0.0.0:27032")] listen: SocketAddr, + /// Enables submissions to the public server registry + #[arg(long)] + register: bool, + /// Enables mDNS discoverability + #[arg(long)] + discoverable: bool, + /// Server name + #[arg(long, short = 'N', default_value = "A Hurry Curry! Server")] + server_name: String, + /// Uri for connecting remotely for registry submission + #[arg(long)] + register_uri: Option<String>, } fn main() -> Result<()> { @@ -70,7 +83,7 @@ fn main() -> Result<()> { exit(0); } - let data_dir = if let Some(d) = args.data_dir { + let data_dir = if let Some(d) = args.data_dir.clone() { d } else { let d = PathBuf::from_str( @@ -94,12 +107,12 @@ fn main() -> Result<()> { tokio::runtime::Builder::new_multi_thread() .enable_all() .build()? - .block_on(run(args.listen))?; + .block_on(run(args))?; Ok(()) } -async fn run(addr: SocketAddr) -> anyhow::Result<()> { - let ws_listener = TcpListener::bind(addr).await?; +async fn run(args: Args) -> anyhow::Result<()> { + let ws_listener = TcpListener::bind(args.listen).await?; info!("Listening for websockets on {}", ws_listener.local_addr()?); let (tx, rx) = broadcast::channel::<PacketC>(128 * 1024); @@ -108,6 +121,16 @@ async fn run(addr: SocketAddr) -> anyhow::Result<()> { state.load(state.index.generate("lobby").await?, None); let state = Arc::new(RwLock::new(state)); + if args.register { + let r = Register::new( + args.server_name.clone(), + args.listen.port(), + args.register_uri, + state.clone(), + ); + tokio::task::spawn(r.register_loop()); + } + { let state = state.clone(); spawn(async move { |