diff --git a/.gitignore b/.gitignore index e1b2502..fdb6aed 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,5 @@ godot/.godot/ godot/android/ -rust/target \ No newline at end of file +rust/target +target \ No newline at end of file diff --git a/rust/Cargo.lock b/Cargo.lock similarity index 98% rename from rust/Cargo.lock rename to Cargo.lock index 0a07979..1a35a22 100644 --- a/rust/Cargo.lock +++ b/Cargo.lock @@ -129,6 +129,7 @@ name = "quakeball" version = "0.1.0" dependencies = [ "godot", + "teanet", ] [[package]] @@ -140,6 +141,10 @@ dependencies = [ "proc-macro2", ] +[[package]] +name = "teanet" +version = "0.1.0" + [[package]] name = "unicode-ident" version = "1.0.24" diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..2af50f8 --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,5 @@ +[workspace] +members = [ + "rust", + "teanet-rust" +] diff --git a/rust/Cargo.toml b/rust/Cargo.toml index bf479e6..995e8f9 100644 --- a/rust/Cargo.toml +++ b/rust/Cargo.toml @@ -8,4 +8,4 @@ crate-type = ["cdylib"] # Compile this crate to a dynamic C library. [dependencies] godot = "0.5.4" - +teanet = { path = "../teanet-rust" } diff --git a/rust/src/network_manager.rs b/rust/src/network_manager.rs index 7eb9803..e6c0f27 100644 --- a/rust/src/network_manager.rs +++ b/rust/src/network_manager.rs @@ -1,12 +1,15 @@ use std::net::SocketAddr; use godot::{prelude::*, tools::get_autoload_by_name}; +use teanet::Peer; use crate::ui::cli::{CLI_GLOBAL_NAME, CliColor, CommandLinePanel}; #[derive(GodotClass)] #[class(base=Node)] pub struct NetworkManager { + peer: Option, + base: Base, } @@ -15,7 +18,7 @@ pub const NETWORK_SINGLETON_NAME: &str = "NetworkManagerGlob"; #[godot_api] impl INode for NetworkManager { fn init(base: Base) -> Self { - NetworkManager { base } + NetworkManager { peer: None, base } } fn ready(&mut self) { @@ -34,14 +37,25 @@ impl INode for NetworkManager { impl NetworkManager { pub fn host(&mut self, port: u32) { - get_autoload_by_name::(CLI_GLOBAL_NAME) - .bind_mut() - .publish_message(format!("Hosting server at {}", port), CliColor::Info); + if self.peer.is_none() { + get_autoload_by_name::(CLI_GLOBAL_NAME) + .bind_mut() + .publish_message(format!("Hosting server at {}", port), CliColor::Info); + self.peer = Some(PeerKind::Server(Peer::default(), port)); + } } pub fn join(&mut self, addr: SocketAddr) { - get_autoload_by_name::(CLI_GLOBAL_NAME) - .bind_mut() - .publish_message(format!("Joining server at {}", addr), CliColor::Info); + if self.peer.is_none() { + get_autoload_by_name::(CLI_GLOBAL_NAME) + .bind_mut() + .publish_message(format!("Joining server at {}", addr), CliColor::Info); + self.peer = Some(PeerKind::Client(Peer::default(), addr)); + } } } + +pub enum PeerKind { + Client(Peer, SocketAddr), + Server(Peer, u32), +} diff --git a/teanet-rust b/teanet-rust new file mode 160000 index 0000000..e296000 --- /dev/null +++ b/teanet-rust @@ -0,0 +1 @@ +Subproject commit e2960002a23ee61dccaafd6951de16fc17c0ee19