Fix: Wrong polling logic
This commit is contained in:
parent
f74f77a1f0
commit
a9f645488d
@ -387,7 +387,6 @@ impl Client {
|
|||||||
let mut dec = self.dec.lock().await;
|
let mut dec = self.dec.lock().await;
|
||||||
if let Ok(packet) = dec.decode() {
|
if let Ok(packet) = dec.decode() {
|
||||||
if let Some(packet) = packet {
|
if let Some(packet) = packet {
|
||||||
dbg!("a");
|
|
||||||
self.add_packet(packet).await;
|
self.add_packet(packet).await;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -22,7 +22,6 @@ use client::Client;
|
|||||||
use pumpkin_protocol::client::play::CKeepAlive;
|
use pumpkin_protocol::client::play::CKeepAlive;
|
||||||
use pumpkin_protocol::ConnectionState;
|
use pumpkin_protocol::ConnectionState;
|
||||||
use server::Server;
|
use server::Server;
|
||||||
use std::collections::HashMap;
|
|
||||||
use std::io::{self};
|
use std::io::{self};
|
||||||
use std::time::Duration;
|
use std::time::Duration;
|
||||||
|
|
||||||
@ -128,9 +127,6 @@ async fn main() -> io::Result<()> {
|
|||||||
let use_console = ADVANCED_CONFIG.commands.use_console;
|
let use_console = ADVANCED_CONFIG.commands.use_console;
|
||||||
let rcon = ADVANCED_CONFIG.rcon.clone();
|
let rcon = ADVANCED_CONFIG.rcon.clone();
|
||||||
|
|
||||||
let players: Arc<tokio::sync::Mutex<HashMap<usize, Arc<Player>>>> =
|
|
||||||
Arc::new(tokio::sync::Mutex::new(HashMap::new()));
|
|
||||||
|
|
||||||
let server = Arc::new(Server::new());
|
let server = Arc::new(Server::new());
|
||||||
log::info!("Started Server took {}ms", time.elapsed().as_millis());
|
log::info!("Started Server took {}ms", time.elapsed().as_millis());
|
||||||
log::info!("You now can connect to the server, Listening on {}", addr);
|
log::info!("You now can connect to the server, Listening on {}", addr);
|
||||||
@ -212,28 +208,9 @@ async fn main() -> io::Result<()> {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
let players = players.clone();
|
|
||||||
let server = server.clone();
|
let server = server.clone();
|
||||||
tokio::spawn(async move {
|
tokio::spawn(async move {
|
||||||
let mut players = players.lock().await; // Move ownership of players
|
|
||||||
let server = &server; // Reference to server
|
let server = &server; // Reference to server
|
||||||
// poll Player
|
|
||||||
if let Some(player) = players.get_mut(&id) {
|
|
||||||
while !player
|
|
||||||
.client
|
|
||||||
.closed
|
|
||||||
.load(std::sync::atomic::Ordering::Relaxed)
|
|
||||||
{
|
|
||||||
dbg!("a");
|
|
||||||
player.process_packets(server).await;
|
|
||||||
player.client.poll().await;
|
|
||||||
}
|
|
||||||
if let Some(player) = players.remove(&id) {
|
|
||||||
dbg!("removed player");
|
|
||||||
player.remove().await;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// Poll current Clients (non players)
|
|
||||||
while !client.closed.load(std::sync::atomic::Ordering::Relaxed)
|
while !client.closed.load(std::sync::atomic::Ordering::Relaxed)
|
||||||
&& !client
|
&& !client
|
||||||
.make_player
|
.make_player
|
||||||
@ -248,9 +225,17 @@ async fn main() -> io::Result<()> {
|
|||||||
{
|
{
|
||||||
let id = client.id;
|
let id = client.id;
|
||||||
let (player, world) = server.add_player(id, client).await;
|
let (player, world) = server.add_player(id, client).await;
|
||||||
players.insert(id, player.clone());
|
world.spawn_player(&BASIC_CONFIG, player.clone()).await;
|
||||||
world.spawn_player(&BASIC_CONFIG, player).await;
|
// poll Player
|
||||||
|
while !player
|
||||||
|
.client
|
||||||
|
.closed
|
||||||
|
.load(std::sync::atomic::Ordering::Relaxed)
|
||||||
|
{
|
||||||
|
player.process_packets(server).await;
|
||||||
|
player.client.poll().await;
|
||||||
}
|
}
|
||||||
|
player.remove().await;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user