#[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()))?;
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::*;
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,
// ========== 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<String>,
+ pub command_socket: Option<String>,
}
#[derive(Debug,Clone)]
pub struct ServerConfig {
pub save_directory: String,
+ pub command_socket: String,
}
impl TryFrom<ServerConfigSpec> 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 }
}
}