summaryrefslogtreecommitdiffstats
path: root/zellij-server
diff options
context:
space:
mode:
authorKunal Mohan <kunalmohan99@gmail.com>2021-05-21 01:32:58 +0530
committerKunal Mohan <kunalmohan99@gmail.com>2021-05-22 22:19:50 +0530
commitb8acf190710e97092def6ef3adfe44e992ca140c (patch)
treec8adb9732b6230481e899955b9cdd694770bdca2 /zellij-server
parent61aa1045764db63734532486cab0500e5828daad (diff)
Use Action enum for Quit and detach instead of separate messages under ClientToServerMsg
Diffstat (limited to 'zellij-server')
-rw-r--r--zellij-server/src/lib.rs2
-rw-r--r--zellij-server/src/route.rs26
2 files changed, 19 insertions, 9 deletions
diff --git a/zellij-server/src/lib.rs b/zellij-server/src/lib.rs
index a52ba9f49..586bd3e6e 100644
--- a/zellij-server/src/lib.rs
+++ b/zellij-server/src/lib.rs
@@ -49,11 +49,9 @@ pub(crate) enum ServerInstruction {
impl From<ClientToServerMsg> for ServerInstruction {
fn from(instruction: ClientToServerMsg) -> Self {
match instruction {
- ClientToServerMsg::ClientExit => ServerInstruction::ClientExit,
ClientToServerMsg::NewClient(pos, opts, options) => {
ServerInstruction::NewClient(pos, opts, options)
}
- ClientToServerMsg::DetachSession => ServerInstruction::DetachSession,
_ => unreachable!(),
}
}
diff --git a/zellij-server/src/route.rs b/zellij-server/src/route.rs
index 408e1e1e2..6804fdf78 100644
--- a/zellij-server/src/route.rs
+++ b/zellij-server/src/route.rs
@@ -15,7 +15,13 @@ use zellij_utils::{
ipc::ClientToServerMsg,
};
-fn route_action(action: Action, session: &SessionMetaData, os_input: &dyn ServerOsApi) {
+fn route_action(
+ action: Action,
+ session: &SessionMetaData,
+ os_input: &dyn ServerOsApi,
+ to_server: &SenderWithContext<ServerInstruction>,
+) -> bool {
+ let mut should_break = false;
match action {
Action::Write(val) => {
session
@@ -182,9 +188,17 @@ fn route_action(action: Action, session: &SessionMetaData, os_input: &dyn Server
.send_to_screen(ScreenInstruction::UpdateTabName(c))
.unwrap();
}
+ Action::Quit => {
+ to_server.send(ServerInstruction::ClientExit).unwrap();
+ should_break = true;
+ }
+ Action::Detach => {
+ to_server.send(ServerInstruction::DetachSession).unwrap();
+ should_break = true;
+ }
Action::NoOp => {}
- Action::Quit => panic!("Received unexpected action"),
}
+ should_break
}
pub(crate) fn route_thread_main(
@@ -197,13 +211,11 @@ pub(crate) fn route_thread_main(
err_ctx.update_thread_ctx();
let rlocked_sessions = session_data.read().unwrap();
match instruction {
- ClientToServerMsg::ClientExit | ClientToServerMsg::DetachSession => {
- to_server.send(instruction.into()).unwrap();
- break;
- }
ClientToServerMsg::Action(action) => {
if let Some(rlocked_sessions) = rlocked_sessions.as_ref() {
- route_action(action, rlocked_sessions, &*os_input);
+ if route_action(action, rlocked_sessions, &*os_input, &to_server) {
+ break;
+ }
}
}
ClientToServerMsg::TerminalResize(new_size) => {