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 | |
| 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')
| -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 { | 
