From a7b690ec9ff9bec246f9b17f888df7d00b107b0d Mon Sep 17 00:00:00 2001 From: Sofia Date: Thu, 16 Jul 2026 01:59:31 +0300 Subject: [PATCH] Iron out some bugs --- rust/src/network_manager.rs | 14 ++++++++++++++ rust/src/ui/cli.rs | 18 ++++++++++++++++++ teanet-rust | 2 +- 3 files changed, 33 insertions(+), 1 deletion(-) diff --git a/rust/src/network_manager.rs b/rust/src/network_manager.rs index f5313ff..ad13b70 100644 --- a/rust/src/network_manager.rs +++ b/rust/src/network_manager.rs @@ -32,6 +32,10 @@ impl INode for NetworkManager { .signals() .on_join() .connect_other(self, |s, addr| s.join(addr.parse().unwrap())); + cli.bind_mut() + .signals() + .on_disconnect() + .connect_other(self, |s| s.disconnect()); } fn process(&mut self, delta: f64) { @@ -60,6 +64,7 @@ impl INode for NetworkManager { CliColor::Error, ); } + self.peer = None; } } } @@ -144,6 +149,15 @@ impl NetworkManager { } } } + + pub fn disconnect(&mut self) { + if let Some(peer) = &mut self.peer { + match peer { + PeerKind::Client(peer, _) => peer.close(), + PeerKind::Server(peer, _) => peer.close(), + } + } + } } pub enum PeerKind { diff --git a/rust/src/ui/cli.rs b/rust/src/ui/cli.rs index 813c0ed..147d88f 100644 --- a/rust/src/ui/cli.rs +++ b/rust/src/ui/cli.rs @@ -52,6 +52,10 @@ impl IPanel for CommandLinePanel { commands.insert("help".to_owned(), Rc::new(Box::new(HelpCommand))); commands.insert("host".to_string(), Rc::new(Box::new(HostCommand))); commands.insert("join".to_string(), Rc::new(Box::new(JoinCommand))); + commands.insert( + "disconnect".to_string(), + Rc::new(Box::new(DisconnectCommand)), + ); CommandLinePanel { input_field: None, @@ -88,6 +92,8 @@ impl CommandLinePanel { pub fn on_host(port: u16); #[signal] pub fn on_join(port: String); + #[signal] + pub fn on_disconnect(); pub fn input_command(&mut self, command: String) { self.publish_message(format!("> {}", command), CliColor::Command); @@ -192,3 +198,15 @@ impl Command for JoinCommand { "Joins server at a given address:port" } } + +#[derive(Clone)] +struct DisconnectCommand; +impl Command for DisconnectCommand { + fn execute(&self, cli: &mut CommandLinePanel, _params: &[&str]) { + cli.signals().on_disconnect().emit(); + } + + fn help(&self) -> &str { + "Disconnects from the server, or stops hosting the server" + } +} diff --git a/teanet-rust b/teanet-rust index d8781b5..f3429ff 160000 --- a/teanet-rust +++ b/teanet-rust @@ -1 +1 @@ -Subproject commit d8781b55d02060077ab52bfbe625343dd4caac9a +Subproject commit f3429ff4e86bb68b1fe42f908aaf561b3a9f3976