From f91ee4e9eb917c00ef2edc8915ddeb077a687a98 Mon Sep 17 00:00:00 2001 From: lukas0008 Date: Wed, 7 Aug 2024 21:16:33 +0200 Subject: [PATCH 1/2] Reapply "Reapply "Tokio"" This reverts commit fc4c9b3b989c75e2cb59cf4e9c20720f2d1877c4. --- Cargo.lock | 13 +++++++++++++ Cargo.toml | 3 +++ pumpkin/Cargo.toml | 3 +-- pumpkin/src/main.rs | 3 ++- 4 files changed, 19 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 55ce38c49..3523957da 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1177,6 +1177,7 @@ dependencies = [ "sha1", "simple_logger", "thiserror", + "tokio", "toml", "uuid", ] @@ -1788,9 +1789,21 @@ dependencies = [ "mio", "pin-project-lite", "socket2", + "tokio-macros", "windows-sys 0.52.0", ] +[[package]] +name = "tokio-macros" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", +] + [[package]] name = "tokio-native-tls" version = "0.3.1" diff --git a/Cargo.toml b/Cargo.toml index 7ce9d72cc..158cf41d4 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -8,3 +8,6 @@ edition = "2021" [profile.release] lto = true + +[workspace.dependencies] +tokio = { version = "1.39.2", features = ["net", "macros", "rt-multi-thread", "fs", "io-util"] } diff --git a/pumpkin/Cargo.toml b/pumpkin/Cargo.toml index 3f9fe1c1a..2572cf185 100644 --- a/pumpkin/Cargo.toml +++ b/pumpkin/Cargo.toml @@ -49,5 +49,4 @@ crossbeam-channel = "0.5.13" uuid = { version = "1.10", features = ["serde"]} - - +tokio.workspace = true \ No newline at end of file diff --git a/pumpkin/src/main.rs b/pumpkin/src/main.rs index 66bae804f..84b445fb9 100644 --- a/pumpkin/src/main.rs +++ b/pumpkin/src/main.rs @@ -23,7 +23,8 @@ pub mod server; pub mod util; #[cfg(not(target_os = "wasi"))] -fn main() -> io::Result<()> { +#[tokio::main] +async fn main() -> io::Result<()> { use std::{cell::RefCell, time::Instant}; let time = Instant::now(); From b9de0839fa782fdd1597928c84453e1fe2961b38 Mon Sep 17 00:00:00 2001 From: lukas0008 Date: Wed, 7 Aug 2024 21:16:40 +0200 Subject: [PATCH 2/2] Reapply "Remove reqwest blocking feature" This reverts commit 33df6b0b1f68fb7399246ef218ffbf5685d3bf0e. --- Cargo.lock | 13 +------------ pumpkin-world/Cargo.toml | 3 ++- pumpkin/Cargo.toml | 2 +- pumpkin/src/client/authentication.rs | 5 +++-- pumpkin/src/client/client_packet.rs | 6 ++++-- pumpkin/src/client/mod.rs | 12 ++++++------ pumpkin/src/main.rs | 2 +- pumpkin/src/server.rs | 8 ++++---- 8 files changed, 22 insertions(+), 29 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 3523957da..c9d4122fa 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -455,7 +455,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" dependencies = [ "futures-core", - "futures-sink", ] [[package]] @@ -464,12 +463,6 @@ version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" -[[package]] -name = "futures-io" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" - [[package]] name = "futures-sink" version = "0.3.30" @@ -489,13 +482,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" dependencies = [ "futures-core", - "futures-io", - "futures-sink", "futures-task", - "memchr", "pin-project-lite", "pin-utils", - "slab", ] [[package]] @@ -1236,6 +1225,7 @@ dependencies = [ "fastnbt 2.5.0 (git+https://github.com/owengage/fastnbt.git)", "fastsnbt", "pumpkin-protocol", + "tokio", ] [[package]] @@ -1295,7 +1285,6 @@ dependencies = [ "base64", "bytes", "encoding_rs", - "futures-channel", "futures-core", "futures-util", "h2", diff --git a/pumpkin-world/Cargo.toml b/pumpkin-world/Cargo.toml index 56e82b443..c100edab9 100644 --- a/pumpkin-world/Cargo.toml +++ b/pumpkin-world/Cargo.toml @@ -7,4 +7,5 @@ edition.workspace = true pumpkin-protocol = { path = "../pumpkin-protocol"} fastanvil = "0.31" fastnbt = { git = "https://github.com/owengage/fastnbt.git" } -fastsnbt = "0.2" \ No newline at end of file +fastsnbt = "0.2" +tokio.workspace = true \ No newline at end of file diff --git a/pumpkin/Cargo.toml b/pumpkin/Cargo.toml index 2572cf185..0239c0f19 100644 --- a/pumpkin/Cargo.toml +++ b/pumpkin/Cargo.toml @@ -28,7 +28,7 @@ rsa-der = "0.3.0" flate2 = "1.0.30" # authentication -reqwest = { version = "0.12.5", features = ["json", "blocking"]} +reqwest = { version = "0.12.5", features = ["json"]} sha1 = "0.10.6" digest = "=0.11.0-pre.9" diff --git a/pumpkin/src/client/authentication.rs b/pumpkin/src/client/authentication.rs index eaff1611b..e87619931 100644 --- a/pumpkin/src/client/authentication.rs +++ b/pumpkin/src/client/authentication.rs @@ -46,7 +46,7 @@ pub struct GameProfile { pub profile_actions: Option>, } -pub fn authenticate( +pub async fn authenticate( username: &str, server_hash: &str, ip: &IpAddr, @@ -69,13 +69,14 @@ pub fn authenticate( .unwrap() .get(address) .send() + .await .map_err(|_| AuthError::FailedResponse)?; match response.status() { StatusCode::OK => {} StatusCode::NO_CONTENT => Err(AuthError::UnverifiedUsername)?, other => Err(AuthError::UnknownStatusCode(other.as_str().to_string()))?, } - let profile: GameProfile = response.json().map_err(|_| AuthError::FailedParse)?; + let profile: GameProfile = response.json().await.map_err(|_| AuthError::FailedParse)?; Ok(profile) } diff --git a/pumpkin/src/client/client_packet.rs b/pumpkin/src/client/client_packet.rs index 8a82ca917..52d8c072d 100644 --- a/pumpkin/src/client/client_packet.rs +++ b/pumpkin/src/client/client_packet.rs @@ -71,7 +71,7 @@ impl Client { self.send_packet(packet); } - pub fn handle_encryption_response( + pub async fn handle_encryption_response( &mut self, server: &mut Server, encryption_response: SEncryptionResponse, @@ -96,7 +96,9 @@ impl Client { &hash, &ip, server, - ) { + ) + .await + { Ok(p) => { // Check if player should join if let Some(p) = &p.profile_actions { diff --git a/pumpkin/src/client/mod.rs b/pumpkin/src/client/mod.rs index e0359722a..b7ddd230f 100644 --- a/pumpkin/src/client/mod.rs +++ b/pumpkin/src/client/mod.rs @@ -156,17 +156,17 @@ impl Client { self.send_packet(CGameEvent::new(3, gamemode.to_f32().unwrap())); } - pub fn process_packets(&mut self, server: &mut Server) { + pub async fn process_packets(&mut self, server: &mut Server) { let mut i = 0; while i < self.client_packets_queue.len() { let mut packet = self.client_packets_queue.remove(i).unwrap(); - self.handle_packet(server, &mut packet); + self.handle_packet(server, &mut packet).await; i += 1; } } /// Handles an incoming decoded Packet - pub fn handle_packet(&mut self, server: &mut Server, packet: &mut RawPacket) { + pub async fn handle_packet(&mut self, server: &mut Server, packet: &mut RawPacket) { // TODO: handle each packet's Error instead of calling .unwrap() let bytebuf = &mut packet.bytebuf; match self.connection_state { @@ -198,7 +198,7 @@ impl Client { SEncryptionResponse::PACKET_ID => self.handle_encryption_response( server, SEncryptionResponse::read(bytebuf).unwrap(), - ), + ).await, SLoginPluginResponse::PACKET_ID => self .handle_plugin_response(server, SLoginPluginResponse::read(bytebuf).unwrap()), SLoginAcknowledged::PACKET_ID => self @@ -267,7 +267,7 @@ impl Client { // Reads the connection until our buffer of len 4096 is full, then decode /// Close connection when an error occurs - pub fn poll(&mut self, server: &mut Server, event: &Event) { + pub async fn poll(&mut self, server: &mut Server, event: &Event) { if event.is_readable() { let mut received_data = vec![0; 4096]; let mut bytes_read = 0; @@ -302,7 +302,7 @@ impl Client { Ok(packet) => { if let Some(packet) = packet { self.add_packet(packet); - self.process_packets(server); + self.process_packets(server).await; } } Err(err) => self.kick(&err.to_string()), diff --git a/pumpkin/src/main.rs b/pumpkin/src/main.rs index 84b445fb9..2746444a6 100644 --- a/pumpkin/src/main.rs +++ b/pumpkin/src/main.rs @@ -131,7 +131,7 @@ async fn main() -> io::Result<()> { // Maybe received an event for a TCP connection. let done = if let Some(client) = connections.get_mut(&token) { let mut client = client.borrow_mut(); - client.poll(&mut server, event); + client.poll(&mut server, event).await; client.closed } else { // Sporadic events happen, we can safely ignore them. diff --git a/pumpkin/src/server.rs b/pumpkin/src/server.rs index c13c1b3e8..61066f86b 100644 --- a/pumpkin/src/server.rs +++ b/pumpkin/src/server.rs @@ -56,7 +56,7 @@ pub struct Server { pub advanced_config: AdvancedConfiguration, /// Used for Authentication, None is Online mode is disabled - pub auth_client: Option, + pub auth_client: Option, } impl Server { @@ -75,7 +75,7 @@ impl Server { ) .into_boxed_slice(); let auth_client = if config.0.online_mode { - Some(reqwest::blocking::Client::new()) + Some(reqwest::Client::new()) } else { None }; @@ -99,9 +99,9 @@ impl Server { } // Returns Tokens to remove - pub fn poll(&mut self, client: &mut Client, _poll: &Poll, event: &Event) { + pub async fn poll(&mut self, client: &mut Client, _poll: &Poll, event: &Event) { // TODO: Poll players in every world - client.poll(self, event) + client.poll(self, event).await } pub fn add_client(&mut self, token: Rc, client: Rc>) {