aboutsummaryrefslogtreecommitdiffstats
path: root/src/server
diff options
context:
space:
mode:
authorKunal Mohan <kunalmohan99@gmail.com>2021-03-29 22:43:54 +0530
committerKunal Mohan <kunalmohan99@gmail.com>2021-05-04 20:48:14 +0530
commitea732166e35368b423de348a41db41662c3686ad (patch)
tree32c20dac42250ae0bc264030e3278f6519aa3ccd /src/server
parentsplit start into start_server and start_client (diff)
downloadsl0ppij-ea732166e35368b423de348a41db41662c3686ad.tar.gz
sl0ppij-ea732166e35368b423de348a41db41662c3686ad.tar.xz
sl0ppij-ea732166e35368b423de348a41db41662c3686ad.zip
client side threads should send messages directly to server and router threads should do the actual routing
Diffstat (limited to 'src/server')
-rw-r--r--src/server/mod.rs16
1 files changed, 10 insertions, 6 deletions
diff --git a/src/server/mod.rs b/src/server/mod.rs
index 960b9244..ea859302 100644
--- a/src/server/mod.rs
+++ b/src/server/mod.rs
@@ -165,11 +165,21 @@ pub fn start_server(mut os_input: Box<dyn ServerOsApi>, opts: CliArgs) -> thread
.name("server_router".to_string())
.spawn({
let os_input = os_input.clone();
+ let mut send_os_instructions = send_os_instructions.clone();
+ let mut send_pty_instructions = send_pty_instructions.clone();
move || loop {
let (instruction, err_ctx) = os_input.server_recv();
send_server_instructions.update(err_ctx);
+ send_pty_instructions.update(err_ctx);
+ send_os_instructions.update(err_ctx);
match instruction {
ServerInstruction::Exit => break,
+ ServerInstruction::ToPty(instruction) => {
+ send_pty_instructions.send(instruction).unwrap();
+ }
+ ServerInstruction::OsApi(instruction) => {
+ send_os_instructions.send(instruction).unwrap();
+ }
_ => {
send_server_instructions.send(instruction).unwrap();
}
@@ -213,15 +223,9 @@ pub fn start_server(mut os_input: Box<dyn ServerOsApi>, opts: CliArgs) -> thread
send_pty_instructions.send(PtyInstruction::NewTab).unwrap();
os_input.add_client_sender(buffer_path);
}
- ServerInstruction::ToPty(instr) => {
- send_pty_instructions.send(instr).unwrap();
- }
ServerInstruction::ToScreen(instr) => {
os_input.send_to_client(ClientInstruction::ToScreen(instr));
}
- ServerInstruction::OsApi(instr) => {
- send_os_instructions.send(instr).unwrap();
- }
ServerInstruction::DoneClosingPane => {
os_input.send_to_client(ClientInstruction::DoneClosingPane);
}