diff --git a/crates/lavina-core/src/player.rs b/crates/lavina-core/src/player.rs index 763a82a..aa8ed10 100644 --- a/crates/lavina-core/src/player.rs +++ b/crates/lavina-core/src/player.rs @@ -155,6 +155,7 @@ enum PlayerCommand { GetRooms(Promise>), /** Events from rooms */ Update(Updates), + Stop, } pub enum Cmd { @@ -241,9 +242,8 @@ impl PlayerRegistry { pub async fn shutdown_all(&mut self) -> Result<()> { let mut inner = self.0.write().unwrap(); - let mut players = HashMap::new(); - std::mem::swap(&mut players, &mut inner.players); for (i, (k, j)) in inner.players.drain() { + k.send(PlayerCommand::Stop).await; drop(k); j.await?; log::debug!("Player stopped #{i:?}") @@ -325,6 +325,7 @@ impl Player { } } PlayerCommand::Cmd(cmd, connection_id) => self.handle_cmd(cmd, connection_id).await, + PlayerCommand::Stop => break, } } log::debug!("Shutting down player actor #{:?}", self.player_id);