diff --git a/rust/src/lib.rs b/rust/src/lib.rs index b5cf20a..c14d399 100644 --- a/rust/src/lib.rs +++ b/rust/src/lib.rs @@ -1,3 +1,5 @@ +use std::net::SocketAddr; + use godot::prelude::*; mod ui; @@ -13,9 +15,21 @@ struct NetworkManager { base: Base, } +pub const NETWORK_SINGLETON_NAME: &str = "NetworkManagerGlob"; + #[godot_api] impl INode for NetworkManager { fn init(base: Base) -> Self { NetworkManager { base } } } + +impl NetworkManager { + pub fn host(&mut self, port: u32) { + godot_print!("Hosting server at {}", port); + } + + pub fn join(&mut self, addr: SocketAddr) { + godot_print!("Joining server at {:?}", addr); + } +} diff --git a/rust/src/ui/cli.rs b/rust/src/ui/cli.rs index f9ff172..b7711f7 100644 --- a/rust/src/ui/cli.rs +++ b/rust/src/ui/cli.rs @@ -3,15 +3,18 @@ use std::net::SocketAddr; use std::ops::DerefMut; use std::rc::Rc; -use godot::classes::{RichTextLabel, ScrollContainer}; +use godot::classes::{Engine, RichTextLabel, ScrollContainer}; use godot::prelude::*; +use godot::tools::get_autoload_by_name; use godot::{ classes::{IPanel, Panel, TextEdit}, obj::Base, register::{GodotClass, godot_api}, }; +use crate::{NETWORK_SINGLETON_NAME, NetworkManager}; + pub enum CliColor { Command, Info, @@ -154,7 +157,9 @@ impl Command for HostCommand { if let Some(port_str) = params.first() { if let Ok(port) = u32::from_str_radix(*port_str, 10) { cli.publish_message(format!("Server hosted at {}", port), CliColor::Info); - // TODO host server + get_autoload_by_name::(NETWORK_SINGLETON_NAME) + .bind_mut() + .host(port); } else { cli.publish_message(format!("Invalid port: {}", port_str), CliColor::Error); } @@ -175,7 +180,9 @@ impl Command for JoinCommand { if let Some(address_str) = params.first() { if let Ok(address) = address_str.parse::() { cli.publish_message(format!("Joining server at {}", address), CliColor::Info); - // TODO join server + get_autoload_by_name::(NETWORK_SINGLETON_NAME) + .bind_mut() + .join(address); } else { cli.publish_message(format!("Invalid address: {}", address_str), CliColor::Error); }