Implement sending a simple Hello-package
This commit is contained in:
parent
0e3fac5a12
commit
a849904535
1
Cargo.lock
generated
1
Cargo.lock
generated
@ -179,6 +179,7 @@ name = "quakeball"
|
|||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"godot",
|
"godot",
|
||||||
|
"serde",
|
||||||
"teanet",
|
"teanet",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|||||||
@ -8,4 +8,5 @@ crate-type = ["cdylib"] # Compile this crate to a dynamic C library.
|
|||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
godot = "0.5.4"
|
godot = "0.5.4"
|
||||||
|
serde = "1.0.228"
|
||||||
teanet = { path = "../teanet-rust" }
|
teanet = { path = "../teanet-rust" }
|
||||||
|
|||||||
@ -1,6 +1,10 @@
|
|||||||
use std::net::SocketAddr;
|
use std::{
|
||||||
|
net::SocketAddr,
|
||||||
|
time::{Duration, Instant},
|
||||||
|
};
|
||||||
|
|
||||||
use godot::{prelude::*, tools::get_autoload_by_name};
|
use godot::{prelude::*, tools::get_autoload_by_name};
|
||||||
|
use serde::{Deserialize, Serialize};
|
||||||
use teanet::{Peer, PeerConfig};
|
use teanet::{Peer, PeerConfig};
|
||||||
|
|
||||||
use crate::ui::cli::{CLI_GLOBAL_NAME, CliColor, CommandLinePanel};
|
use crate::ui::cli::{CLI_GLOBAL_NAME, CliColor, CommandLinePanel};
|
||||||
@ -10,6 +14,8 @@ use crate::ui::cli::{CLI_GLOBAL_NAME, CliColor, CommandLinePanel};
|
|||||||
pub struct NetworkManager {
|
pub struct NetworkManager {
|
||||||
peer: Option<PeerKind>,
|
peer: Option<PeerKind>,
|
||||||
|
|
||||||
|
last_hello: Instant,
|
||||||
|
|
||||||
base: Base<Node>,
|
base: Base<Node>,
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -18,7 +24,11 @@ pub const NETWORK_SINGLETON_NAME: &str = "NetworkManagerGlob";
|
|||||||
#[godot_api]
|
#[godot_api]
|
||||||
impl INode for NetworkManager {
|
impl INode for NetworkManager {
|
||||||
fn init(base: Base<Node>) -> Self {
|
fn init(base: Base<Node>) -> Self {
|
||||||
NetworkManager { peer: None, base }
|
NetworkManager {
|
||||||
|
last_hello: Instant::now(),
|
||||||
|
peer: None,
|
||||||
|
base,
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn ready(&mut self) {
|
fn ready(&mut self) {
|
||||||
@ -42,6 +52,17 @@ impl INode for NetworkManager {
|
|||||||
if let Some(peer) = &mut self.peer {
|
if let Some(peer) = &mut self.peer {
|
||||||
let mut cli = get_autoload_by_name::<CommandLinePanel>(CLI_GLOBAL_NAME);
|
let mut cli = get_autoload_by_name::<CommandLinePanel>(CLI_GLOBAL_NAME);
|
||||||
|
|
||||||
|
match peer {
|
||||||
|
PeerKind::Client(..) => {}
|
||||||
|
PeerKind::Server(peer, _) => {
|
||||||
|
let now = Instant::now();
|
||||||
|
if now - self.last_hello > Duration::from_millis(2000) {
|
||||||
|
self.last_hello = now;
|
||||||
|
peer.broadcast_reliable(Package::Hello);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
match peer {
|
match peer {
|
||||||
PeerKind::Client(peer, _) => match peer.poll() {
|
PeerKind::Client(peer, _) => match peer.poll() {
|
||||||
Ok(message) => {
|
Ok(message) => {
|
||||||
@ -69,6 +90,14 @@ impl INode for NetworkManager {
|
|||||||
teanet::PeerMessage::Closed => {
|
teanet::PeerMessage::Closed => {
|
||||||
self.peer = None;
|
self.peer = None;
|
||||||
}
|
}
|
||||||
|
teanet::PeerMessage::Message(msg) => match msg {
|
||||||
|
Package::Hello => {
|
||||||
|
cli.bind_mut().publish_message(
|
||||||
|
format!("Got \"Hello\"!"),
|
||||||
|
CliColor::Info,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -104,6 +133,14 @@ impl INode for NetworkManager {
|
|||||||
.publish_message(format!("Server closed"), CliColor::Info);
|
.publish_message(format!("Server closed"), CliColor::Info);
|
||||||
self.peer = None;
|
self.peer = None;
|
||||||
}
|
}
|
||||||
|
teanet::PeerMessage::Message(msg) => match msg {
|
||||||
|
Package::Hello => {
|
||||||
|
cli.bind_mut().publish_message(
|
||||||
|
format!("Got \"Hello\"!"),
|
||||||
|
CliColor::Info,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -168,7 +205,12 @@ impl NetworkManager {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub enum PeerKind {
|
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||||
Client(Peer, SocketAddr),
|
pub enum Package {
|
||||||
Server(Peer, u16),
|
Hello,
|
||||||
|
}
|
||||||
|
|
||||||
|
pub enum PeerKind {
|
||||||
|
Client(Peer<Package>, SocketAddr),
|
||||||
|
Server(Peer<Package>, u16),
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1 +1 @@
|
|||||||
Subproject commit 97230a23be7758450551f4baa8077208d06f4ba3
|
Subproject commit 44122d77d6382043be85ff0a72398748b9ab3493
|
||||||
Loading…
Reference in New Issue
Block a user