From f47b8a1ed146a983259dcfe23ae6f8b87854e57f Mon Sep 17 00:00:00 2001 From: StripedMonkey Date: Mon, 2 Sep 2024 16:03:36 -0400 Subject: [PATCH] Eliminate Unnecessary Arc Tokens already implement copy and clone, keeping a shared reference to the token doesn't actually do anything, and is larger than a token is to begin with. clone copies --- pumpkin/src/client/mod.rs | 5 ++--- pumpkin/src/client/player_packet.rs | 2 +- pumpkin/src/main.rs | 10 ++++------ pumpkin/src/server.rs | 4 ++-- pumpkin/src/world/mod.rs | 10 +++++----- 5 files changed, 14 insertions(+), 17 deletions(-) diff --git a/pumpkin/src/client/mod.rs b/pumpkin/src/client/mod.rs index 131e12df9..c100dae3f 100644 --- a/pumpkin/src/client/mod.rs +++ b/pumpkin/src/client/mod.rs @@ -1,7 +1,6 @@ use std::{ io::{self, Write}, net::SocketAddr, - sync::Arc, }; use crate::{ @@ -71,7 +70,7 @@ pub struct Client { pub connection_state: ConnectionState, pub encryption: bool, pub closed: bool, - pub token: Arc, + pub token: Token, pub connection: TcpStream, pub address: SocketAddr, enc: PacketEncoder, @@ -82,7 +81,7 @@ pub struct Client { } impl Client { - pub fn new(token: Arc, connection: TcpStream, address: SocketAddr) -> Self { + pub fn new(token: Token, connection: TcpStream, address: SocketAddr) -> Self { Self { protocol_version: 0, gameprofile: None, diff --git a/pumpkin/src/client/player_packet.rs b/pumpkin/src/client/player_packet.rs index 45fb667a5..32f328e79 100644 --- a/pumpkin/src/client/player_packet.rs +++ b/pumpkin/src/client/player_packet.rs @@ -340,7 +340,7 @@ impl Player { let world = world.lock().await; let attacked_player = world.get_by_entityid(self, entity_id.0 as EntityId); if let Some(mut player) = attacked_player { - let token = player.client.token.clone(); + let token = player.client.token; let velo = player.velocity; if config.protect_creative && player.gamemode == GameMode::Creative { return; diff --git a/pumpkin/src/main.rs b/pumpkin/src/main.rs index 8b9d8ef82..a0e76eeab 100644 --- a/pumpkin/src/main.rs +++ b/pumpkin/src/main.rs @@ -81,7 +81,7 @@ fn main() -> io::Result<()> { let rcon = ADVANCED_CONFIG.rcon.clone(); let mut clients: HashMap = HashMap::new(); - let mut players: HashMap, Arc>> = HashMap::new(); + let mut players: HashMap>> = HashMap::new(); let server = Arc::new(tokio::sync::Mutex::new(Server::new())); log::info!("Started Server took {}ms", time.elapsed().as_millis()); @@ -150,8 +150,7 @@ fn main() -> io::Result<()> { token, Interest::READABLE.add(Interest::WRITABLE), )?; - let rc_token = Arc::new(token); - let client = Client::new(Arc::clone(&rc_token), connection, addr); + let client = Client::new(token, connection, addr); clients.insert(token, client); }, @@ -195,10 +194,9 @@ fn main() -> io::Result<()> { if done { poll.registry().deregister(&mut client.connection)?; } else if make_player { - let token = client.token.clone(); + let token = client.token; let mut server = server.lock().await; - let (player, world) = - server.add_player(token.clone(), client).await; + let (player, world) = server.add_player(token, client).await; players.insert(token, player.clone()); let mut world = world.lock().await; world.spawn_player(&BASIC_CONFIG, player).await; diff --git a/pumpkin/src/server.rs b/pumpkin/src/server.rs index 8082b1daf..d765f7cf9 100644 --- a/pumpkin/src/server.rs +++ b/pumpkin/src/server.rs @@ -107,7 +107,7 @@ impl Server { pub async fn add_player( &mut self, - token: Arc, + token: Token, client: Client, ) -> (Arc>, Arc>) { let entity_id = self.new_entity_id(); @@ -129,7 +129,7 @@ impl Server { } /// Sends a Packet to all Players in all worlds - pub fn broadcast_packet_all

(&self, expect: &[&Arc], packet: &P) + pub fn broadcast_packet_all

(&self, expect: &[&Token], packet: &P) where P: ClientPacket, { diff --git a/pumpkin/src/world/mod.rs b/pumpkin/src/world/mod.rs index 0761acf0d..967368d01 100644 --- a/pumpkin/src/world/mod.rs +++ b/pumpkin/src/world/mod.rs @@ -26,7 +26,7 @@ use crate::{client::Client, entity::player::Player}; pub struct World { pub level: Arc>, - pub current_players: HashMap, Arc>>, + pub current_players: HashMap>>, // entities, players... } @@ -39,7 +39,7 @@ impl World { } /// Sends a Packet to all Players, Expect some players. Because we can't lock them twice - pub fn broadcast_packet

(&self, expect: &[&Arc], packet: &P) + pub fn broadcast_packet

(&self, expect: &[&Token], packet: &P) where P: ClientPacket, { @@ -139,7 +139,7 @@ impl World { for (_, playerr) in self .current_players .iter() - .filter(|c| c.0 != &player.client.token) + .filter(|(c, _)| **c != player.client.token) { let playerr = playerr.as_ref().lock().unwrap(); let gameprofile = &playerr.gameprofile; @@ -184,7 +184,7 @@ impl World { ), ); // spawn players for our client - let token = player.client.token.clone(); + let token = player.client.token; for (_, existing_player) in self.current_players.iter().filter(|c| c.0 != &token) { let existing_player = existing_player.as_ref().lock().unwrap(); let entity = &existing_player.entity; @@ -277,7 +277,7 @@ impl World { None } - pub fn add_player(&mut self, token: Arc, player: Arc>) { + pub fn add_player(&mut self, token: Token, player: Arc>) { self.current_players.insert(token, player); }