ptth/crates/ptth_server_gui/src/main.rs

101 lines
2.2 KiB
Rust

use fltk::{
app,
button::Button,
enums::CallbackTrigger,
frame::Frame,
prelude::*,
window::Window
};
use tokio::{
sync::oneshot,
};
struct ServerInstance {
task: tokio::task::JoinHandle <()>,
shutdown_tx: oneshot::Sender <()>,
}
#[derive (Clone, Copy)]
enum Message {
RunServer,
StopServer,
}
fn main ()
{
let rt = tokio::runtime::Runtime::new ().unwrap ();
tracing_subscriber::fmt::init ();
let stopped_msg = "PTTH server: Stopped";
let started_msg = "PTTH server: Running";
let mut server_instance = None;
// let shutdown_rx = ptth_core::graceful_shutdown::init ();
let (fltk_tx, fltk_rx) = app::channel::<Message> ();
let app = app::App::default();
let mut wind = Window::new (100, 100, 400, 300, "PTTH server");
let mut frame = Frame::new (0, 0, 400, 200, stopped_msg);
let mut but_run = Button::new (120, 210, 80, 40, "Run");
but_run.set_trigger (CallbackTrigger::Changed);
but_run.emit (fltk_tx, Message::RunServer);
let mut but_stop = Button::new (200, 210, 80, 40, "Stop");
but_stop.set_trigger (CallbackTrigger::Changed);
but_stop.emit (fltk_tx, Message::StopServer);
but_stop.deactivate ();
wind.end ();
wind.show ();
while app.wait () {
match fltk_rx.recv () {
Some (Message::RunServer) => {
let (shutdown_tx, shutdown_rx) = tokio::sync::oneshot::channel ();
let task = rt.spawn (async {
let config_file = ptth_server::ConfigFile {
name: "ptth_server".into (),
api_key: ptth_core::gen_key (),
relay_url: "http://127.0.0.1:4000/7ZSFUKGV".into (),
file_server_root: Some (".".into ()),
throttle_upload: false,
};
if let Err (e) = ptth_server::run_server (
config_file,
shutdown_rx,
None,
None
).await
{
tracing::error! ("ptth_server crashed: {}", e);
}
});
server_instance.replace (Some (ServerInstance {
task,
shutdown_tx,
}));
frame.set_label (started_msg);
but_run.deactivate ();
but_stop.activate ();
},
Some (Message::StopServer) => {
server_instance.replace (None);
frame.set_label (stopped_msg);
but_run.activate ();
but_stop.deactivate ();
},
None => (),
}
}
}