diff --git a/prototypes/quic_demo/src/bin/client_gui.rs b/prototypes/quic_demo/src/bin/client_gui.rs index cd65b5e..1273420 100644 --- a/prototypes/quic_demo/src/bin/client_gui.rs +++ b/prototypes/quic_demo/src/bin/client_gui.rs @@ -27,8 +27,8 @@ struct Opt { #[derive (Clone, Copy)] enum Message { - OpenPort, - ClosePort, + OpenPort (usize), + ClosePort (usize), } fn main () -> anyhow::Result <()> { @@ -49,33 +49,51 @@ fn main () -> anyhow::Result <()> { let mut x = margin; let mut y = margin; - let mut frame_status; - - { - frame_status = Frame::new (10, 10, 800 - 20, 30, "Forwarding 0 ports"); - } + let mut frame_status = Frame::new (x, y, 800 - 20, h, "Forwarding 0 ports"); y += h + margin; x = margin; { let w = 80; - let frame_client_port = Frame::new (x, y, w, h, "Local port"); + Frame::new (x, y, w, h, "Local port"); x += w + margin; let w = 120; - let frame_server_id = Frame::new (x, y, w, h, "Server ID"); + Frame::new (x, y, w, h, "Server ID"); x += w + margin; let w = 80; - let frame_server_port = Frame::new (x, y, 80, h, "Server port"); + Frame::new (x, y, w, h, "Server port"); // x += w + margin; } y += h + margin; x = margin; - let mut gui_port = GuiPort::new (fltk_tx, &mut x, y); + let gui_port_0 = GuiPort::new (fltk_tx, &mut x, y, 0); + y += h + margin; + x = margin; + + let gui_port_1 = GuiPort::new (fltk_tx, &mut x, y, 1); + y += h + margin; + x = margin; + + let gui_port_2 = GuiPort::new (fltk_tx, &mut x, y, 2); + // y += h + margin; + // x = margin; + + let mut gui_ports = vec! [ + gui_port_0, + gui_port_1, + gui_port_2, + ]; + + let mut forwarding_instances = vec! [ + None, + None, + None, + ]; // y += h + margin; @@ -99,12 +117,10 @@ fn main () -> anyhow::Result <()> { Ok::<_, anyhow::Error> (connection) })?; - let mut forwarding_instance = None; - while app.wait () { match fltk_rx.recv () { - Some (Message::OpenPort) => { - if let Ok (params) = gui_port.get_params () { + Some (Message::OpenPort (port_idx)) => { + if let Ok (params) = gui_ports [port_idx].get_params () { let connection_p2_p3 = connection_p2_p3.clone (); let (shutdown_flag, shutdown_flag_rx) = tokio::sync::watch::channel (true); @@ -114,18 +130,18 @@ fn main () -> anyhow::Result <()> { shutdown_flag_rx )); - forwarding_instance.replace (ForwardingInstance { + forwarding_instances [port_idx].replace (ForwardingInstance { task, shutdown_flag, }); - gui_port.set_forwarding (true); + gui_ports [port_idx].set_forwarding (true); frame_status.set_label ("Forwarding 1 port"); } }, - Some (Message::ClosePort) => { - if let Some (mut old_instance) = forwarding_instance.take () { + Some (Message::ClosePort (port_idx)) => { + if let Some (old_instance) = forwarding_instances [port_idx].take () { rt.block_on (async { old_instance.shutdown_flag.send (false)?; old_instance.task.await??; @@ -133,7 +149,7 @@ fn main () -> anyhow::Result <()> { })?; } - gui_port.set_forwarding (false); + gui_ports [port_idx].set_forwarding (false); frame_status.set_label ("Forwarding 0 ports"); }, None => (), @@ -286,7 +302,7 @@ struct ForwardingParams { } impl GuiPort { - fn new (fltk_tx: fltk::app::Sender , x: &mut i32, y: i32) -> Self { + fn new (fltk_tx: fltk::app::Sender , x: &mut i32, y: i32, port_idx: usize) -> Self { let margin = 10; let h = 30; @@ -315,9 +331,9 @@ impl GuiPort { input_server_port.set_value ("5900"); but_open.set_trigger (CallbackTrigger::Changed); - but_open.emit (fltk_tx, Message::OpenPort); + but_open.emit (fltk_tx, Message::OpenPort (port_idx)); but_close.set_trigger (CallbackTrigger::Changed); - but_close.emit (fltk_tx, Message::ClosePort); + but_close.emit (fltk_tx, Message::ClosePort (port_idx)); set_active (&mut but_open, true); set_active (&mut but_close, false);