From d5f2e42ac9db61d099ccf5810d4da6782291a3a3 Mon Sep 17 00:00:00 2001 From: xeon Date: Mon, 15 Apr 2024 18:10:02 +0300 Subject: [PATCH] Create configs in server's folder, fix xtask for asset loading --- Cargo.toml | 3 ++- common/Cargo.toml | 6 ++++++ common/src/lib.rs | 1 + common/src/util.rs | 8 ++++++++ gameserver/Cargo.toml | 2 ++ gameserver/src/game/global_config.rs | 21 ++------------------- sdkserver/Cargo.toml | 2 ++ sdkserver/src/config/version_config.rs | 21 ++------------------- xtask/src/main.rs | 2 ++ 9 files changed, 27 insertions(+), 39 deletions(-) create mode 100644 common/Cargo.toml create mode 100644 common/src/lib.rs create mode 100644 common/src/util.rs diff --git a/Cargo.toml b/Cargo.toml index a9ccb77..62034bb 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,5 +1,5 @@ [workspace] -members = ["gameserver", "proto", "sdkserver", "xtask"] +members = ["common", "gameserver", "proto", "sdkserver", "xtask"] resolver = "2" [workspace.package] @@ -51,6 +51,7 @@ tracing-subscriber = { version = "0.3.18", features = [ ] } tracing-bunyan-formatter = "0.3.9" +common = { path = "common/" } proto = { path = "proto/" } [profile.release] diff --git a/common/Cargo.toml b/common/Cargo.toml new file mode 100644 index 0000000..53bc00c --- /dev/null +++ b/common/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "common" +edition = "2021" +version.workspace = true + +[dependencies] diff --git a/common/src/lib.rs b/common/src/lib.rs new file mode 100644 index 0000000..812d1ed --- /dev/null +++ b/common/src/lib.rs @@ -0,0 +1 @@ +pub mod util; diff --git a/common/src/util.rs b/common/src/util.rs new file mode 100644 index 0000000..d3a7a26 --- /dev/null +++ b/common/src/util.rs @@ -0,0 +1,8 @@ +pub fn load_or_create_config(path: &str, defaults: &str) -> String { + if let Ok(data) = std::fs::read_to_string(path) { + data + } else { + std::fs::write(path, defaults).unwrap(); + defaults.to_string() + } +} diff --git a/gameserver/Cargo.toml b/gameserver/Cargo.toml index df9b42d..18f5c4e 100644 --- a/gameserver/Cargo.toml +++ b/gameserver/Cargo.toml @@ -4,6 +4,8 @@ edition = "2021" version.workspace = true [dependencies] +common.workspace = true + ansi_term.workspace = true anyhow.workspace = true atomic_refcell.workspace = true diff --git a/gameserver/src/game/global_config.rs b/gameserver/src/game/global_config.rs index 3ed8068..eb107ca 100644 --- a/gameserver/src/game/global_config.rs +++ b/gameserver/src/game/global_config.rs @@ -1,3 +1,4 @@ +use common::util::load_or_create_config; use lazy_static::lazy_static; use serde::Deserialize; use serde_json::from_str; @@ -6,25 +7,7 @@ const DEFAULT_GLOBALS: &str = include_str!("../../globals.json"); lazy_static! { pub static ref INSTANCE: Globals = { - let local_config = std::path::Path::new("globals.json"); - let data = if local_config.exists() { - std::fs::read_to_string("globals.json").unwrap() - } else { - let config = dirs::config_dir() - .expect("No config directory found") - .join("hkrpg-gameserver"); - - std::fs::create_dir_all(&config).unwrap(); - - let env = config.join("globals.json"); - - if !env.exists() { - std::fs::write(&env, DEFAULT_GLOBALS).unwrap(); - } - - std::fs::read_to_string(&env).unwrap() - }; - + let data = load_or_create_config("globals.json", DEFAULT_GLOBALS); from_str(&data).unwrap() }; } diff --git a/sdkserver/Cargo.toml b/sdkserver/Cargo.toml index 0e0cc51..72a13ce 100644 --- a/sdkserver/Cargo.toml +++ b/sdkserver/Cargo.toml @@ -4,6 +4,8 @@ version = "0.1.0" edition = "2021" [dependencies] +common.workspace = true + anyhow.workspace = true env_logger.workspace = true diff --git a/sdkserver/src/config/version_config.rs b/sdkserver/src/config/version_config.rs index 5ede108..a0003f7 100644 --- a/sdkserver/src/config/version_config.rs +++ b/sdkserver/src/config/version_config.rs @@ -1,5 +1,6 @@ use std::collections::HashMap; +use common::util::load_or_create_config; use lazy_static::lazy_static; use serde::Deserialize; use serde_json::from_str; @@ -16,25 +17,7 @@ pub struct VersionConfig { lazy_static! { pub static ref INSTANCE: HashMap = { - let local_config = std::path::Path::new("versions.json"); - let data = if local_config.exists() { - std::fs::read_to_string("versions.json").unwrap() - } else { - let config = dirs::config_dir() - .expect("No config directory found") - .join("hkrpg-sdkserver"); - - std::fs::create_dir_all(&config).unwrap(); - - let env = config.join("versions.json"); - - if !env.exists() { - std::fs::write(&env, DEFAULT_VERSIONS).unwrap(); - } - - std::fs::read_to_string(&env).unwrap() - }; - + let data = load_or_create_config("versions.json", DEFAULT_VERSIONS); from_str(&data).unwrap() }; } diff --git a/xtask/src/main.rs b/xtask/src/main.rs index 3ea8253..26a3a22 100644 --- a/xtask/src/main.rs +++ b/xtask/src/main.rs @@ -23,6 +23,7 @@ fn spawn_servers(release: bool) -> Result<(), Box> { let tx1 = tx.clone(); let handle1 = thread::spawn(move || { let mut gameserver = Command::new("cargo") + .current_dir("gameserver") .arg("run") .arg("--bin") .arg("gameserver") @@ -38,6 +39,7 @@ fn spawn_servers(release: bool) -> Result<(), Box> { let handle2 = thread::spawn(move || { let mut sdkserver = Command::new("cargo") + .current_dir("sdkserver") .arg("run") .arg("--bin") .arg("sdkserver")