use std::sync::PoisonError;
-#[allow(dead_code)]
-const SAVE_DIRECTORY : &str = "save";
-
// ---------- newtypes and type aliases ----------
visible_slotmap_key!{ ClientId('C') }
games : RwLock<HashMap<Arc<InstanceName>,InstanceRef>>,
players : RwLock<TokenTable<PlayerId>>,
clients : RwLock<TokenTable<ClientId>>,
+ config : RwLock<Arc<ServerConfig>>,
// xxx delete instances at some point!
}
Server => format!(""),
Unix{user} => { format!("{}:", user) },
} };
- [ SAVE_DIRECTORY, &"/", prefix, scope_prefix.as_ref() ]
+ [ config().save_directory.as_str(), &"/", prefix, scope_prefix.as_ref() ]
.iter().map(Deref::deref)
.chain( utf8_percent_encode(&name.scoped_name,
&percent_encoding::NON_ALPHANUMERIC) )
use AFState::*;
use SavefilenameParseResult::*;
let mut a_leaves = HashMap::new();
- for de in fs::read_dir(SAVE_DIRECTORY)? {
+ for de in fs::read_dir(&config().save_directory)? {
let de = de?;
let leaf = de.file_name();
(||{
token
}
+// ========== server config ==========
+
+const DEFAULT_SAVE_DIRECTORY : &str = "save";
+
+pub struct ServerConfig {
+ pub save_directory: String,
+}
+
+pub fn config() -> Arc<ServerConfig> {
+ GLOBAL.config.read().unwrap().clone()
+}
+
+impl Default for ServerConfig {
+ fn default() -> ServerConfig {
+ ServerConfig {
+ save_directory: DEFAULT_SAVE_DIRECTORY.to_owned(),
+ }
+ }
+}
+
// ========== ad-hoc and temporary ==========
const XXX_PLAYERS_TOKENS : &[(&str, &str)] = &[