forked from lavina/lavina
stop player fibers on shutdown
This commit is contained in:
parent
5c07c8368d
commit
b9724cd995
|
@ -261,6 +261,19 @@ impl PlayerRegistry {
|
|||
let player_handle = self.get_or_create_player(id).await;
|
||||
player_handle.subscribe().await
|
||||
}
|
||||
|
||||
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() {
|
||||
drop(k);
|
||||
j.await?;
|
||||
log::debug!("Player stopped #{i:?}")
|
||||
}
|
||||
log::debug!("All players stopped");
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
/// The player registry state representation.
|
||||
|
@ -337,6 +350,7 @@ impl Player {
|
|||
PlayerCommand::Cmd(cmd, connection_id) => self.handle_cmd(cmd, connection_id).await,
|
||||
}
|
||||
}
|
||||
log::debug!("Shutting down player actor #{:?}", self.player_id);
|
||||
self
|
||||
}
|
||||
|
||||
|
|
|
@ -54,7 +54,7 @@ async fn main() -> Result<()> {
|
|||
let mut metrics = MetricsRegistry::new();
|
||||
let storage = Storage::open(storage_config).await?;
|
||||
let rooms = RoomRegistry::new(&mut metrics, storage.clone())?;
|
||||
let players = PlayerRegistry::empty(rooms.clone(), &mut metrics)?;
|
||||
let mut players = PlayerRegistry::empty(rooms.clone(), &mut metrics)?;
|
||||
let telemetry_terminator =
|
||||
util::telemetry::launch(telemetry_config, metrics.clone(), rooms.clone()).await?;
|
||||
let irc = projections::irc::launch(irc_config, players.clone(), rooms.clone(), metrics.clone(), storage.clone()).await?;
|
||||
|
@ -67,6 +67,7 @@ async fn main() -> Result<()> {
|
|||
xmpp.terminate().await?;
|
||||
irc.terminate().await?;
|
||||
telemetry_terminator.terminate().await?;
|
||||
players.shutdown_all().await?;
|
||||
drop(players);
|
||||
drop(rooms);
|
||||
storage.close().await?;
|
||||
|
|
Loading…
Reference in New Issue