From de398c0208ccc95db017157cd476582790139afe Mon Sep 17 00:00:00 2001 From: Lambdax <91626975+OfficialLambdax@users.noreply.github.com> Date: Wed, 22 Nov 2023 14:02:23 +0100 Subject: [PATCH] welcome & leave --- src/server/mod.rs | 20 +++++++++++++++++--- src/server/packet.rs | 2 ++ 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/src/server/mod.rs b/src/server/mod.rs index dde5435..2924507 100644 --- a/src/server/mod.rs +++ b/src/server/mod.rs @@ -512,11 +512,19 @@ impl Server { } info!("Disconnecting client {}...", id); + for client in &self.clients { + if client.id == i as u8 {continue} + client.queue_packet(Packet::Notification(NotificationPacket::left( + self.clients[i].info.as_ref().unwrap().username.clone() + ))).await; + } + if i == self.clients.len() - 1 { self.clients.remove(i); } else { self.clients.swap_remove(i); } + info!("Client {} disconnected!", id); } } @@ -795,9 +803,8 @@ impl Server { } else { let packet_identifier = packet.data[0] as char; match packet_identifier { - 'H' => { - // Full sync with server - self.clients[client_idx] + 'H' => { // Player Full sync with server + self.clients[client_idx] // tell the new player their playername .queue_packet(Packet::Raw(RawPacket::from_str(&format!( "Sn{}", self.clients[client_idx] @@ -809,6 +816,13 @@ impl Server { )))) .await; + for client in &self.clients { // welcome the player + if client.id == client_idx as u8 {continue} + client.queue_packet(Packet::Notification(NotificationPacket::welcome( + self.clients[client_idx].info.as_ref().unwrap().username.clone() + ))).await; + } + // TODO: Sync all existing cars on server (this code is broken) for client in &self.clients { let pid = client.id as usize; diff --git a/src/server/packet.rs b/src/server/packet.rs index 27ffb2b..84b4e3d 100644 --- a/src/server/packet.rs +++ b/src/server/packet.rs @@ -54,6 +54,8 @@ impl NotificationPacket { pub fn new>(msg: S) -> Self { Self(format!("J{}", msg.into())) } + pub fn welcome>(msg: S) -> Self { Self(format!("JWelcome {}!", msg.into()))} + pub fn left>(msg: S) -> Self { Self(format!("L{} left the server!", msg.into()))} } /// Protocol: