boxmux_lib/
resize_loop.rs1use crate::thread_manager::Runnable;
2use crate::AppContext;
3use crate::FieldUpdate;
4use crate::Message;
5use signal_hook::consts::{SIGCONT, SIGHUP, SIGINT, SIGQUIT, SIGTERM, SIGTSTP};
6use signal_hook::{consts::signal::SIGWINCH, iterator::Signals};
7
8use crate::thread_manager::*;
9
10use std::sync::mpsc;
11use std::time::Duration;
12use uuid::Uuid;
13
14create_runnable!(
15 ResizeLoop,
16 |_inner: &mut RunnableImpl, _app_context: AppContext, _messages: Vec<Message>| -> bool { true },
17 |inner: &mut RunnableImpl,
18 app_context: AppContext,
19 _messages: Vec<Message>|
20 -> (bool, AppContext) {
21 let mut signals =
22 Signals::new([SIGWINCH, SIGINT, SIGTERM, SIGHUP, SIGQUIT, SIGTSTP, SIGCONT]).unwrap();
23
24 for signal in signals.forever() {
25 match signal {
26 SIGWINCH => inner.send_message(Message::Resize),
27 SIGINT | SIGTERM | SIGHUP | SIGQUIT => {
28 inner.send_message(Message::Terminate);
29 return (false, app_context);
30 }
31 SIGTSTP => inner.send_message(Message::Pause),
32 SIGCONT => inner.send_message(Message::Start),
33 _ => {}
34 }
35 }
36
37 std::thread::sleep(Duration::from_millis(100));
38
39 (true, app_context)
40 }
41);