101 lines
2.2 KiB
Rust
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 => (),
|
|
}
|
|
}
|
|
}
|