boxmux_lib/
resize_loop.rs

1use 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);