rmux_client/commands/
server.rs1use std::path::Path;
2
3use rmux_proto::{
4 DaemonStatusRequest, KillServerRequest, LockClientRequest, LockServerRequest,
5 LockSessionRequest, Request, Response, ServerAccessRequest, SessionName, ShutdownIfIdleRequest,
6};
7
8use crate::{
9 auto_start::{ensure_server_running_with_config, AutoStartConfig, AutoStartError},
10 connection::{connect, Connection},
11 ClientError,
12};
13
14impl Connection {
15 pub fn start_server(
17 socket_path: &Path,
18 no_start_server: bool,
19 config: AutoStartConfig,
20 ) -> Result<Self, StartServerError> {
21 if no_start_server {
22 return connect(socket_path).map_err(StartServerError::Client);
23 }
24
25 ensure_server_running_with_config(socket_path, config).map_err(StartServerError::AutoStart)
26 }
27
28 pub fn kill_server(&mut self) -> Result<Response, ClientError> {
30 self.roundtrip(&Request::KillServer(KillServerRequest))
31 }
32
33 pub fn daemon_status(&mut self) -> Result<Response, ClientError> {
35 self.roundtrip(&Request::DaemonStatus(DaemonStatusRequest))
36 }
37
38 pub fn shutdown_if_idle(&mut self) -> Result<Response, ClientError> {
40 self.roundtrip(&Request::ShutdownIfIdle(ShutdownIfIdleRequest))
41 }
42
43 pub fn lock_server(&mut self) -> Result<Response, ClientError> {
45 self.roundtrip(&Request::LockServer(LockServerRequest))
46 }
47
48 pub fn lock_session(&mut self, target: SessionName) -> Result<Response, ClientError> {
50 self.roundtrip(&Request::LockSession(LockSessionRequest { target }))
51 }
52
53 pub fn lock_client(&mut self, target_client: String) -> Result<Response, ClientError> {
55 self.roundtrip(&Request::LockClient(LockClientRequest { target_client }))
56 }
57
58 pub fn server_access(&mut self, request: ServerAccessRequest) -> Result<Response, ClientError> {
60 self.roundtrip(&Request::ServerAccess(request))
61 }
62}
63
64#[derive(Debug)]
66pub enum StartServerError {
67 Client(ClientError),
69 AutoStart(AutoStartError),
71}