diff --git a/src/net/io.rs b/src/net/io.rs index d02a3da..6d6759b 100644 --- a/src/net/io.rs +++ b/src/net/io.rs @@ -4,7 +4,6 @@ use bevy::prelude::*; use uuid::Uuid; use super::{ - packet::{InboundPacket, OutboundPacket, Packet}, peer::{Peer, PeerChangeEvent, PeerMap, PeerReceiveTiming, PeerSendTiming}, queues::{NetworkReceive, NetworkSend}, }; @@ -19,13 +18,10 @@ pub fn handle_network_input( ) -> Result { for (mut message, address) in from_socket.iter() { if message.len() < 16 { - return Err(format!( - "Message of length {} is not large enough to contain UUID", - message.len() - ) - .into()); + return Err(format!("Message of length {} cannot contain UUID", message.len()).into()); } let uuid = Uuid::from_slice(message.split_off(message.len() - 16).as_slice())?; + info!("Receiving: {:?} from {}", message, uuid); to_app.write(InboundPacket(Packet::new(message, uuid))); if let Some(peer_id) = peer_map.get(&uuid) { let (peer, mut last) = peers.get_mut(*peer_id)?; @@ -50,6 +46,7 @@ pub fn handle_network_output( for packet in from_app.read() { let peer_id = peer_map.try_get(&packet.0.peer)?; let (peer, mut last) = peers.get_mut(*peer_id)?; + warn!("Sending: {:?} to {}", packet.0.message, peer.uuid); // Append our UUID for client identification let message = [packet.0.message.as_slice(), config.id.as_bytes()].concat(); to_socket.send(message, peer.addr)?; @@ -66,9 +63,11 @@ pub fn heartbeat( mut outbound: EventWriter, ) { for (peer, last) in peers { - // Allow for 2 consecutive missed heartbeats without timing out - if last.time() + TIMEOUT / 3 > time.elapsed() { - continue; + if let Some(previous) = last.timestamp() { + // Allow for 2 consecutive missed heartbeats without timing out + if previous + TIMEOUT / 3 > time.elapsed() { + continue; + } } outbound.write(OutboundPacket(Packet::new(Vec::new(), peer.uuid))); } @@ -80,7 +79,7 @@ pub fn timeouts( mut delete: EventWriter, ) { for (peer, last) in peers { - if let Some(previous) = last.time() { + if let Some(previous) = last.timestamp() { if previous + TIMEOUT < time.elapsed() { warn!("Peer {} timed out", peer.uuid); delete.write(PeerChangeEvent::new(peer.uuid, None)); @@ -99,3 +98,21 @@ impl Config { Self { id: Uuid::new_v4() } } } + +#[derive(Debug)] +pub struct Packet { + pub message: Vec, + pub peer: Uuid, +} + +impl Packet { + pub fn new(message: Vec, peer: Uuid) -> Self { + Self { peer, message } + } +} + +#[derive(Debug, Event)] +pub struct OutboundPacket(pub Packet); + +#[derive(Debug, Event)] +pub struct InboundPacket(pub Packet); diff --git a/src/net/mod.rs b/src/net/mod.rs index c310356..c7d405c 100644 --- a/src/net/mod.rs +++ b/src/net/mod.rs @@ -1,5 +1,4 @@ mod io; -mod packet; mod peer; mod plugin; mod queues; @@ -8,7 +7,7 @@ mod thread; #[allow(unused_imports)] pub mod prelude { - pub use super::packet::{InboundPacket, OutboundPacket, Packet}; + pub use super::io::{InboundPacket, OutboundPacket, Packet}; pub use super::peer::Peer; pub use super::plugin::{NetIOPlugin, NetworkState}; } diff --git a/src/net/packet.rs b/src/net/packet.rs deleted file mode 100644 index d9bf240..0000000 --- a/src/net/packet.rs +++ /dev/null @@ -1,20 +0,0 @@ -use bevy::prelude::*; -use uuid::Uuid; - -#[derive(Debug)] -pub struct Packet { - pub message: Vec, - pub peer: Uuid, -} - -impl Packet { - pub fn new(message: Vec, peer: Uuid) -> Self { - Self { peer, message } - } -} - -#[derive(Debug, Event)] -pub struct OutboundPacket(pub Packet); - -#[derive(Debug, Event)] -pub struct InboundPacket(pub Packet); diff --git a/src/net/peer.rs b/src/net/peer.rs index 650ee32..2247ebe 100644 --- a/src/net/peer.rs +++ b/src/net/peer.rs @@ -3,35 +3,40 @@ use std::{collections::HashMap, net::SocketAddr, time::Duration}; use bevy::prelude::*; use uuid::Uuid; -use super::packet::{OutboundPacket, Packet}; +#[derive(Debug, Default)] +struct Timing { + timestamp: Option, +} #[derive(Component, Debug, Default)] -pub struct PeerSendTiming(Duration); +pub struct PeerSendTiming(Timing); impl PeerSendTiming { pub fn update(&mut self, time: &Res