♻️ refactor: extract GuiClient struct
parent
07fa3b97c3
commit
11ee6292ba
|
@ -10,6 +10,7 @@ use fltk::{
|
||||||
window::Window
|
window::Window
|
||||||
};
|
};
|
||||||
use structopt::StructOpt;
|
use structopt::StructOpt;
|
||||||
|
use tokio::runtime::Runtime;
|
||||||
|
|
||||||
use quic_demo::{
|
use quic_demo::{
|
||||||
client_proxy::*,
|
client_proxy::*,
|
||||||
|
@ -35,9 +36,50 @@ enum Message {
|
||||||
ClosePort (usize),
|
ClosePort (usize),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct GuiClient <'a> {
|
||||||
|
rt: &'a Runtime,
|
||||||
|
frame_status: Frame,
|
||||||
|
forwarding_instances: Vec <Option <ForwardingInstance>>,
|
||||||
|
gui_ports: Vec <GuiPort>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl GuiClient <'_> {
|
||||||
|
pub fn open_port (
|
||||||
|
&mut self,
|
||||||
|
connection_p2_p3: quinn::Connection,
|
||||||
|
port_idx: usize,
|
||||||
|
) -> anyhow::Result <()>
|
||||||
|
{
|
||||||
|
let params = self.gui_ports [port_idx].get_params ()?;
|
||||||
|
|
||||||
|
let _guard = self.rt.enter ();
|
||||||
|
self.forwarding_instances [port_idx].replace (ForwardingInstance::new (
|
||||||
|
connection_p2_p3,
|
||||||
|
params,
|
||||||
|
));
|
||||||
|
|
||||||
|
self.gui_ports [port_idx].set_forwarding (true);
|
||||||
|
|
||||||
|
self.frame_status.set_label ("Forwarding 1 port");
|
||||||
|
|
||||||
|
Ok (())
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn close_port (&mut self, port_idx: usize) -> anyhow::Result <()> {
|
||||||
|
if let Some (old_instance) = self.forwarding_instances [port_idx].take () {
|
||||||
|
self.rt.block_on (old_instance.close ())?;
|
||||||
|
}
|
||||||
|
|
||||||
|
self.gui_ports [port_idx].set_forwarding (false);
|
||||||
|
self.frame_status.set_label ("Forwarding 0 ports");
|
||||||
|
|
||||||
|
Ok (())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fn main () -> anyhow::Result <()> {
|
fn main () -> anyhow::Result <()> {
|
||||||
tracing_subscriber::fmt::init ();
|
tracing_subscriber::fmt::init ();
|
||||||
let rt = tokio::runtime::Runtime::new ()?;
|
let rt = Runtime::new ()?;
|
||||||
|
|
||||||
let opt = Opt::from_args ();
|
let opt = Opt::from_args ();
|
||||||
|
|
||||||
|
@ -53,7 +95,7 @@ fn main () -> anyhow::Result <()> {
|
||||||
let mut x = margin;
|
let mut x = margin;
|
||||||
let mut y = margin;
|
let mut y = margin;
|
||||||
|
|
||||||
let mut frame_status = Frame::new (x, y, 800 - 20, h, "Forwarding 0 ports");
|
let frame_status = Frame::new (x, y, 800 - 20, h, "Forwarding 0 ports");
|
||||||
|
|
||||||
y += h + margin;
|
y += h + margin;
|
||||||
x = margin;
|
x = margin;
|
||||||
|
@ -87,18 +129,25 @@ fn main () -> anyhow::Result <()> {
|
||||||
// y += h + margin;
|
// y += h + margin;
|
||||||
// x = margin;
|
// x = margin;
|
||||||
|
|
||||||
let mut gui_ports = vec! [
|
let gui_ports = vec! [
|
||||||
gui_port_0,
|
gui_port_0,
|
||||||
gui_port_1,
|
gui_port_1,
|
||||||
gui_port_2,
|
gui_port_2,
|
||||||
];
|
];
|
||||||
|
|
||||||
let mut forwarding_instances = vec! [
|
let forwarding_instances = vec! [
|
||||||
None,
|
None,
|
||||||
None,
|
None,
|
||||||
None,
|
None,
|
||||||
];
|
];
|
||||||
|
|
||||||
|
let mut gui_client = GuiClient {
|
||||||
|
rt: &rt,
|
||||||
|
frame_status,
|
||||||
|
forwarding_instances,
|
||||||
|
gui_ports,
|
||||||
|
};
|
||||||
|
|
||||||
// y += h + margin;
|
// y += h + margin;
|
||||||
|
|
||||||
wind.end ();
|
wind.end ();
|
||||||
|
@ -132,27 +181,13 @@ fn main () -> anyhow::Result <()> {
|
||||||
while app.wait () {
|
while app.wait () {
|
||||||
match fltk_rx.recv () {
|
match fltk_rx.recv () {
|
||||||
Some (Message::OpenPort (port_idx)) => {
|
Some (Message::OpenPort (port_idx)) => {
|
||||||
if let Ok (params) = gui_ports [port_idx].get_params () {
|
match gui_client.open_port (connection_p2_p3.clone (), port_idx) {
|
||||||
let connection_p2_p3 = connection_p2_p3.clone ();
|
Err (e) => error! ("{:?}", e),
|
||||||
|
_ => (),
|
||||||
let _guard = rt.enter ();
|
};
|
||||||
forwarding_instances [port_idx].replace (ForwardingInstance::new (
|
|
||||||
connection_p2_p3,
|
|
||||||
params,
|
|
||||||
));
|
|
||||||
|
|
||||||
gui_ports [port_idx].set_forwarding (true);
|
|
||||||
|
|
||||||
frame_status.set_label ("Forwarding 1 port");
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
Some (Message::ClosePort (port_idx)) => {
|
Some (Message::ClosePort (port_idx)) => {
|
||||||
if let Some (old_instance) = forwarding_instances [port_idx].take () {
|
gui_client.close_port (port_idx)?;
|
||||||
rt.block_on (old_instance.close ())?;
|
|
||||||
}
|
|
||||||
|
|
||||||
gui_ports [port_idx].set_forwarding (false);
|
|
||||||
frame_status.set_label ("Forwarding 0 ports");
|
|
||||||
},
|
},
|
||||||
None => (),
|
None => (),
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue