Remove reqwest blocking feature

This commit is contained in:
lukas0008
2024-08-07 21:11:13 +02:00
parent f1b7d649db
commit 76ce44e58d
8 changed files with 22 additions and 29 deletions

13
Cargo.lock generated
View File

@@ -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",

View File

@@ -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"
fastsnbt = "0.2"
tokio.workspace = true

View File

@@ -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"

View File

@@ -46,7 +46,7 @@ pub struct GameProfile {
pub profile_actions: Option<Vec<ProfileAction>>,
}
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)
}

View File

@@ -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 {

View File

@@ -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()),

View File

@@ -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.

View File

@@ -56,7 +56,7 @@ pub struct Server {
pub advanced_config: AdvancedConfiguration,
/// Used for Authentication, None is Online mode is disabled
pub auth_client: Option<reqwest::blocking::Client>,
pub auth_client: Option<reqwest::Client>,
}
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<Token>, client: Rc<RefCell<Client>>) {