diff options
author | metamuffin <metamuffin@disroot.org> | 2024-07-09 16:07:10 +0200 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2024-07-09 16:07:10 +0200 |
commit | 7b5b15c0136f3cba51c6c404035ec51ac31ce1a7 (patch) | |
tree | 5b5172cd1d3430274763f317ffa4118a829a75fd /server/src/main.rs | |
parent | c4aebfb09f53136b7a597238f8afb37bab46e4ec (diff) | |
download | hurrycurry-7b5b15c0136f3cba51c6c404035ec51ac31ce1a7.tar hurrycurry-7b5b15c0136f3cba51c6c404035ec51ac31ce1a7.tar.bz2 hurrycurry-7b5b15c0136f3cba51c6c404035ec51ac31ce1a7.tar.zst |
crash when custom data dir is missing
Diffstat (limited to 'server/src/main.rs')
-rw-r--r-- | server/src/main.rs | 42 |
1 files changed, 25 insertions, 17 deletions
diff --git a/server/src/main.rs b/server/src/main.rs index 6ef34e45..25fdb9c4 100644 --- a/server/src/main.rs +++ b/server/src/main.rs @@ -32,10 +32,12 @@ use tokio_tungstenite::tungstenite::Message; #[derive(Parser)] struct Args { + /// Print the version, then exit #[arg(short, long)] version: bool, - #[arg(short, long, default_value = "./data")] - data_dir: PathBuf, + /// Set the path to the game data directory, autodetect if ommitted + #[arg(short, long)] + data_dir: Option<PathBuf>, } fn main() -> Result<()> { @@ -51,19 +53,25 @@ fn main() -> Result<()> { exit(0); } - let data_dir = PathBuf::from_str( - [ - args.data_dir.to_str().unwrap(), - "/usr/local/share/hurrycurry/data", - "/usr/share/hurrycurry/data", - "/opt/hurrycurry/data", - ] - .into_iter() - .find(|p| PathBuf::from_str(p).unwrap().join("index.yaml").exists()) - .ok_or(anyhow!("no data dir detected"))?, - ) - .unwrap(); - info!("Detected data dir to be {data_dir:?}"); + let data_dir = if let Some(d) = args.data_dir { + d + } else { + let d = PathBuf::from_str( + [ + "data", + "/usr/local/share/hurrycurry/data", + "/usr/share/hurrycurry/data", + "/opt/hurrycurry/data", + ] + .into_iter() + .find(|p| PathBuf::from_str(p).unwrap().join("index.yaml").exists()) + .ok_or(anyhow!( + "Could not find the data directory. Please run the server next to the `data` directory or specify a path to it via arguments." + ))?, + )?; + info!("Detected data dir to be {d:?}"); + d + }; *DATA_DIR.lock().unwrap() = Some(data_dir); tokio::runtime::Builder::new_multi_thread() @@ -75,7 +83,7 @@ fn main() -> Result<()> { async fn run() -> anyhow::Result<()> { let ws_listener = TcpListener::bind("0.0.0.0:27032").await?; - info!("listening for websockets on {}", ws_listener.local_addr()?); + info!("Listening for websockets on {}", ws_listener.local_addr()?); let (tx, rx) = broadcast::channel::<PacketC>(128 * 1024); @@ -104,7 +112,7 @@ async fn run() -> anyhow::Result<()> { let state = state.clone(); let mut rx = rx.resubscribe(); let (error_tx, mut error_rx) = channel::<PacketC>(8); - info!("{addr} connected via ws"); + info!("{addr} connected via websocket"); let mut init = state.write().await.game.prime_client(); init.insert(0, PacketC::Init { id }); spawn(async move { |