use std::path::Path;
use rmux_proto::{
KillServerRequest, LockClientRequest, LockServerRequest, LockSessionRequest, Request, Response,
ServerAccessRequest, SessionName,
};
use crate::{
auto_start::{ensure_server_running_with_config, AutoStartConfig, AutoStartError},
connection::{connect, Connection},
ClientError,
};
impl Connection {
pub fn start_server(
socket_path: &Path,
no_start_server: bool,
config: AutoStartConfig,
) -> Result<Self, StartServerError> {
if no_start_server {
return connect(socket_path).map_err(StartServerError::Client);
}
ensure_server_running_with_config(socket_path, config).map_err(StartServerError::AutoStart)
}
pub fn kill_server(&mut self) -> Result<Response, ClientError> {
self.roundtrip(&Request::KillServer(KillServerRequest))
}
pub fn lock_server(&mut self) -> Result<Response, ClientError> {
self.roundtrip(&Request::LockServer(LockServerRequest))
}
pub fn lock_session(&mut self, target: SessionName) -> Result<Response, ClientError> {
self.roundtrip(&Request::LockSession(LockSessionRequest { target }))
}
pub fn lock_client(&mut self, target_client: String) -> Result<Response, ClientError> {
self.roundtrip(&Request::LockClient(LockClientRequest { target_client }))
}
pub fn server_access(&mut self, request: ServerAccessRequest) -> Result<Response, ClientError> {
self.roundtrip(&Request::ServerAccess(request))
}
}
#[derive(Debug)]
pub enum StartServerError {
Client(ClientError),
AutoStart(AutoStartError),
}