fix: revert bedrock buffer read
This commit is contained in:
parent
d9312141f6
commit
100b8791cf
@ -9,7 +9,6 @@ use crate::net::java::{JavaClient, PacketHandlerResult};
|
|||||||
use crate::net::{ClientPlatform, DisconnectReason};
|
use crate::net::{ClientPlatform, DisconnectReason};
|
||||||
use crate::net::{lan_broadcast::LANBroadcast, query, rcon::RCONServer};
|
use crate::net::{lan_broadcast::LANBroadcast, query, rcon::RCONServer};
|
||||||
use crate::server::{Server, ticker::Ticker};
|
use crate::server::{Server, ticker::Ticker};
|
||||||
use bytes::BytesMut;
|
|
||||||
use plugin::server::server_command::ServerCommandEvent;
|
use plugin::server::server_command::ServerCommandEvent;
|
||||||
use pumpkin_config::{AdvancedConfiguration, BasicConfiguration};
|
use pumpkin_config::{AdvancedConfiguration, BasicConfiguration};
|
||||||
use pumpkin_macros::send_cancellable;
|
use pumpkin_macros::send_cancellable;
|
||||||
@ -19,7 +18,7 @@ use rustyline::Editor;
|
|||||||
use rustyline::history::FileHistory;
|
use rustyline::history::FileHistory;
|
||||||
use rustyline::{Config, error::ReadlineError};
|
use rustyline::{Config, error::ReadlineError};
|
||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
use std::io::{ErrorKind, IsTerminal, stdin};
|
use std::io::{Cursor, ErrorKind, IsTerminal, stdin};
|
||||||
use std::process::exit;
|
use std::process::exit;
|
||||||
use std::str::FromStr;
|
use std::str::FromStr;
|
||||||
use std::sync::atomic::{AtomicBool, AtomicI32, Ordering};
|
use std::sync::atomic::{AtomicBool, AtomicI32, Ordering};
|
||||||
@ -425,7 +424,7 @@ impl PumpkinServer {
|
|||||||
tasks: &Arc<TaskTracker>,
|
tasks: &Arc<TaskTracker>,
|
||||||
bedrock_clients: &Arc<Mutex<HashMap<SocketAddr, Arc<BedrockClient>>>>,
|
bedrock_clients: &Arc<Mutex<HashMap<SocketAddr, Arc<BedrockClient>>>>,
|
||||||
) -> bool {
|
) -> bool {
|
||||||
let mut udp_buf = BytesMut::with_capacity(1496);
|
let mut udp_buf = [0; 1496]; // Buffer for UDP receive
|
||||||
|
|
||||||
select! {
|
select! {
|
||||||
// Branch for TCP connections (Java Edition)
|
// Branch for TCP connections (Java Edition)
|
||||||
@ -491,10 +490,7 @@ impl PumpkinServer {
|
|||||||
},
|
},
|
||||||
|
|
||||||
// Branch for UDP packets (Bedrock Edition)
|
// Branch for UDP packets (Bedrock Edition)
|
||||||
udp_result = resolve_some(self.udp_socket.as_ref(), |sock: &Arc<UdpSocket>| {
|
udp_result = resolve_some(self.udp_socket.as_ref(), |sock: &Arc<UdpSocket>| sock.recv_from(&mut udp_buf)) => {
|
||||||
unsafe { udp_buf.set_len(1496) };
|
|
||||||
sock.recv_from(&mut udp_buf[..])
|
|
||||||
}) => {
|
|
||||||
match udp_result {
|
match udp_result {
|
||||||
Ok((len, client_addr)) => {
|
Ok((len, client_addr)) => {
|
||||||
if len > 0 {
|
if len > 0 {
|
||||||
@ -518,19 +514,24 @@ impl PumpkinServer {
|
|||||||
new_client
|
new_client
|
||||||
}).clone();
|
}).clone();
|
||||||
|
|
||||||
let packet_bytes = udp_buf.split_to(len).freeze();
|
let packet_bytes = udp_buf[..len].to_vec();
|
||||||
udp_buf.clear();
|
|
||||||
let server = self.server.clone();
|
let server = self.server.clone();
|
||||||
|
|
||||||
tasks.spawn(async move {
|
tasks.spawn(async move {
|
||||||
client.process_packet(&server, packet_bytes).await;
|
client.process_packet(&server, packet_bytes.into()).await;
|
||||||
});
|
});
|
||||||
|
} else if let Some(sock) = self.udp_socket.as_ref() {
|
||||||
|
let _ = BedrockClient::handle_offline_packet(
|
||||||
|
&self.server,
|
||||||
|
id,
|
||||||
|
&mut Cursor::new(&udp_buf[1..len]),
|
||||||
|
client_addr,
|
||||||
|
sock
|
||||||
|
).await;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Err(e) => {
|
Err(e) => error!("UDP socket error: {e}"),
|
||||||
error!("Failed to receive UDP packet: {e}");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user