@@ -22,7 +22,6 @@ use client::Client;
22
22
use pumpkin_protocol:: client:: play:: CKeepAlive ;
23
23
use pumpkin_protocol:: ConnectionState ;
24
24
use server:: Server ;
25
- use std:: collections:: HashMap ;
26
25
use std:: io:: { self } ;
27
26
use std:: time:: Duration ;
28
27
@@ -128,9 +127,6 @@ async fn main() -> io::Result<()> {
128
127
let use_console = ADVANCED_CONFIG . commands . use_console ;
129
128
let rcon = ADVANCED_CONFIG . rcon . clone ( ) ;
130
129
131
- let players: Arc < tokio:: sync:: Mutex < HashMap < usize , Arc < Player > > > > =
132
- Arc :: new ( tokio:: sync:: Mutex :: new ( HashMap :: new ( ) ) ) ;
133
-
134
130
let server = Arc :: new ( Server :: new ( ) ) ;
135
131
log:: info!( "Started Server took {}ms" , time. elapsed( ) . as_millis( ) ) ;
136
132
log:: info!( "You now can connect to the server, Listening on {}" , addr) ;
@@ -212,45 +208,34 @@ async fn main() -> io::Result<()> {
212
208
} ) ;
213
209
}
214
210
215
- let players = players. clone ( ) ;
216
211
let server = server. clone ( ) ;
217
212
tokio:: spawn ( async move {
218
- let mut players = players. lock ( ) . await ; // Move ownership of players
219
213
let server = & server; // Reference to server
220
- // poll Player
221
- if let Some ( player) = players. get_mut ( & id) {
214
+ while !client. closed . load ( std:: sync:: atomic:: Ordering :: Relaxed )
215
+ && !client
216
+ . make_player
217
+ . load ( std:: sync:: atomic:: Ordering :: Relaxed )
218
+ {
219
+ client. process_packets ( server) . await ;
220
+ client. poll ( ) . await ;
221
+ }
222
+ if client
223
+ . make_player
224
+ . load ( std:: sync:: atomic:: Ordering :: Relaxed )
225
+ {
226
+ let id = client. id ;
227
+ let ( player, world) = server. add_player ( id, client) . await ;
228
+ world. spawn_player ( & BASIC_CONFIG , player. clone ( ) ) . await ;
229
+ // poll Player
222
230
while !player
223
231
. client
224
232
. closed
225
233
. load ( std:: sync:: atomic:: Ordering :: Relaxed )
226
234
{
227
- dbg ! ( "a" ) ;
228
235
player. process_packets ( server) . await ;
229
236
player. client . poll ( ) . await ;
230
237
}
231
- if let Some ( player) = players. remove ( & id) {
232
- dbg ! ( "removed player" ) ;
233
- player. remove ( ) . await ;
234
- }
235
- } else {
236
- // Poll current Clients (non players)
237
- while !client. closed . load ( std:: sync:: atomic:: Ordering :: Relaxed )
238
- && !client
239
- . make_player
240
- . load ( std:: sync:: atomic:: Ordering :: Relaxed )
241
- {
242
- client. process_packets ( server) . await ;
243
- client. poll ( ) . await ;
244
- }
245
- if client
246
- . make_player
247
- . load ( std:: sync:: atomic:: Ordering :: Relaxed )
248
- {
249
- let id = client. id ;
250
- let ( player, world) = server. add_player ( id, client) . await ;
251
- players. insert ( id, player. clone ( ) ) ;
252
- world. spawn_player ( & BASIC_CONFIG , player) . await ;
253
- }
238
+ player. remove ( ) . await ;
254
239
}
255
240
} ) ;
256
241
}
0 commit comments