#![feature(iterator_try_collect)] use config::Config; use game::{server::game_server, Game}; use spectate::server::spectate_server; use std::sync::Arc; use tokio::{ spawn, sync::{broadcast, RwLock}, }; pub mod config; pub mod game; pub mod spectate; pub struct State { tick: broadcast::Sender, // true for new game game: RwLock, } #[tokio::main] async fn main() -> anyhow::Result<()> { env_logger::init_from_env("LOG"); let config = Config::load()?; let state = Arc::new(State { tick: broadcast::channel(16).0, game: Game::new(vec![]).into(), }); spawn(spectate_server(config.spectate, state.clone())); game_server(config.game, state.clone()).await?; Ok(()) }