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 1/3] 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: From 3376eb748296cddb23df5e4c62727c98937e7445 Mon Sep 17 00:00:00 2001 From: Lambdax <91626975+OfficialLambdax@users.noreply.github.com> Date: Wed, 22 Nov 2023 14:05:06 +0100 Subject: [PATCH 2/3] formatting --- src/server/mod.rs | 1 - src/server/packet.rs | 8 ++++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/server/mod.rs b/src/server/mod.rs index 2924507..f30e8c8 100644 --- a/src/server/mod.rs +++ b/src/server/mod.rs @@ -524,7 +524,6 @@ impl Server { } else { self.clients.swap_remove(i); } - info!("Client {} disconnected!", id); } } diff --git a/src/server/packet.rs b/src/server/packet.rs index 84b4e3d..9314554 100644 --- a/src/server/packet.rs +++ b/src/server/packet.rs @@ -54,8 +54,12 @@ 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()))} + 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: From 478bf48a5a598d7cf4b9e753878e8f3e52a5c709 Mon Sep 17 00:00:00 2001 From: Lambdax <91626975+OfficialLambdax@users.noreply.github.com> Date: Thu, 23 Nov 2023 09:44:49 +0100 Subject: [PATCH 3/3] to broadcast --- src/server/mod.rs | 18 ++++++------------ src/server/packet.rs | 4 ++-- 2 files changed, 8 insertions(+), 14 deletions(-) diff --git a/src/server/mod.rs b/src/server/mod.rs index 84bc645..3f2eb16 100644 --- a/src/server/mod.rs +++ b/src/server/mod.rs @@ -507,12 +507,9 @@ 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; - } + self.broadcast(Packet::Notification(NotificationPacket::player_left( // broadcast left message + self.clients[i].info.as_ref().unwrap().username.clone() + )), Some(i as u8)).await; if i == self.clients.len() - 1 { self.clients.remove(i); @@ -810,12 +807,9 @@ 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; - } + self.broadcast(Packet::Notification(NotificationPacket::player_welcome( // welcome the player + self.clients[client_idx].info.as_ref().unwrap().username.clone() + )), Some(client_idx as u8)).await; // TODO: Sync all existing cars on server (this code is broken) for client in &self.clients { diff --git a/src/server/packet.rs b/src/server/packet.rs index 9314554..a4ecb8b 100644 --- a/src/server/packet.rs +++ b/src/server/packet.rs @@ -54,10 +54,10 @@ impl NotificationPacket { pub fn new>(msg: S) -> Self { Self(format!("J{}", msg.into())) } - pub fn welcome>(msg: S) -> Self { + pub fn player_welcome>(msg: S) -> Self { Self(format!("JWelcome {}!", msg.into())) } - pub fn left>(msg: S) -> Self { + pub fn player_left>(msg: S) -> Self { Self(format!("L{} left the server!", msg.into())) } }