aboutsummaryrefslogtreecommitdiff
path: root/server/src/main.rs
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2024-07-09 16:07:10 +0200
committermetamuffin <metamuffin@disroot.org>2024-07-09 16:07:10 +0200
commit7b5b15c0136f3cba51c6c404035ec51ac31ce1a7 (patch)
tree5b5172cd1d3430274763f317ffa4118a829a75fd /server/src/main.rs
parentc4aebfb09f53136b7a597238f8afb37bab46e4ec (diff)
downloadhurrycurry-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.rs42
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 {