From: Ian Jackson Date: Sun, 23 Aug 2020 20:51:27 +0000 (+0100) Subject: wip config X-Git-Tag: otter-0.2.0~1067 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=c594957bb30aa36515b29c0983e1a33b509dc6b3;p=otter.git wip config --- diff --git a/src/bin/otter.rs b/src/bin/otter.rs index 91a1cd0c..8d13348b 100644 --- a/src/bin/otter.rs +++ b/src/bin/otter.rs @@ -281,7 +281,7 @@ impl ConnForGame { #[throws(E)] fn connect(ma: &MainOpts) -> Conn { - let unix = UnixStream::connect(SOCKET_PATH).context("connect to server")?; + let unix = UnixStream::connect(DEFAULT_COMMAND_SOCKET).context("connect to server")?; // xxx let chan = MgmtChannel::new(unix)?; let mut chan = Conn { chan }; chan.cmd(&MgmtCommand::SetScope(ma.scope.clone().unwrap()))?; diff --git a/src/cmdlistener.rs b/src/cmdlistener.rs index df9bbb77..652d8675 100644 --- a/src/cmdlistener.rs +++ b/src/cmdlistener.rs @@ -12,8 +12,6 @@ use pwd::Passwd; pub use crate::from_instance_lock_error; pub use std::os::unix::net::UnixStream; -pub const SOCKET_PATH : &str = "command.socket"; // xxx - type CSE = anyhow::Error; use MgmtCommand::*; @@ -413,7 +411,7 @@ impl CommandStream<'_> { impl CommandListener { #[throws(StartupError)] pub fn new() -> Self { - let path = SOCKET_PATH; + let path = &config().command_socket; match fs::remove_file(path) { Err(e) if e.kind() == io::ErrorKind::NotFound => Ok(()), r => r, diff --git a/src/global.rs b/src/global.rs index efe34a75..0232c9a8 100644 --- a/src/global.rs +++ b/src/global.rs @@ -922,25 +922,34 @@ pub fn client_expire_old_clients() { // ========== server config ========== const DEFAULT_SAVE_DIRECTORY : &str = "save"; +pub const DEFAULT_COMMAND_SOCKET : &str = "command.socket"; // in save dir +// ^ xxx should not be pub #[derive(Deserialize,Debug,Clone)] pub struct ServerConfigSpec { pub save_directory: Option, + pub command_socket: Option, } #[derive(Debug,Clone)] pub struct ServerConfig { pub save_directory: String, + pub command_socket: String, } impl TryFrom for ServerConfig { type Error = AE; #[throws(Self::Error)] fn try_from(spec: ServerConfigSpec) -> ServerConfig { - let ServerConfigSpec { save_directory } = spec; + let ServerConfigSpec { save_directory, command_socket } = spec; let save_directory = save_directory .unwrap_or_else(|| DEFAULT_SAVE_DIRECTORY.to_owned()); - ServerConfig { save_directory } + let mut command_socket = command_socket + .unwrap_or_else(|| DEFAULT_COMMAND_SOCKET.to_owned()); + if !command_socket.starts_with('/') { + command_socket = format!("{}/{}", save_directory, command_socket); + } + ServerConfig { save_directory, command_socket } } }