lavina/crates/lavina-core/src/lib.rs

38 lines
983 B
Rust
Raw Normal View History

2023-02-04 01:01:49 +00:00
//! Domain definitions and implementation of common chat logic.
use anyhow::Result;
use prometheus::Registry as MetricsRegistry;
use crate::player::PlayerRegistry;
use crate::repo::Storage;
use crate::room::RoomRegistry;
2023-02-04 01:01:49 +00:00
pub mod player;
pub mod prelude;
2023-07-07 13:09:24 +00:00
pub mod repo;
2023-02-04 01:01:49 +00:00
pub mod room;
pub mod terminator;
2023-09-30 23:12:11 +00:00
mod table;
#[derive(Clone)]
pub struct LavinaCore {
pub players: PlayerRegistry,
pub rooms: RoomRegistry,
}
impl LavinaCore {
pub async fn new(mut metrics: MetricsRegistry, storage: Storage) -> Result<LavinaCore> {
// TODO shutdown all services in reverse order on error
let rooms = RoomRegistry::new(&mut metrics, storage.clone())?;
let players = PlayerRegistry::empty(rooms.clone(), storage.clone(), &mut metrics)?;
Ok(LavinaCore { players, rooms })
}
pub async fn shutdown(mut self) -> Result<()> {
self.players.shutdown_all().await?;
drop(self.players);
drop(self.rooms);
Ok(())
}
}