diff --git a/server/src/lib.rs b/server/src/lib.rs index 8c41538..fa5e268 100644 --- a/server/src/lib.rs +++ b/server/src/lib.rs @@ -361,5 +361,5 @@ pub struct AppState { pub offline_users: RwLock>>>, pub packs: CardPacks, pub packs_meta: CardPacksMeta, - pub games: RwLock>, + pub games: RwLock>>, } diff --git a/server/src/main.rs b/server/src/main.rs index db3ba70..2e17cbd 100644 --- a/server/src/main.rs +++ b/server/src/main.rs @@ -30,7 +30,7 @@ async fn main() -> Result<()> { let online_users = RwLock::new(HashMap::>>::new()); let offline_users = RwLock::new(HashMap::>>::new()); let (packs, packs_meta) = load_cards_from_json("data/cah-cards-full.json")?; - let games = RwLock::new(vec![]); + let games = RwLock::new(HashMap::new()); let app_state = Arc::new(AppState { tx, diff --git a/server/src/websocket.rs b/server/src/websocket.rs index 0a40adb..9876ff5 100644 --- a/server/src/websocket.rs +++ b/server/src/websocket.rs @@ -15,7 +15,10 @@ use axum::{ use futures::{SinkExt, StreamExt}; use lib::*; use serde_json::{from_str, to_string}; -use std::{net::SocketAddr, sync::Arc}; +use std::{ + net::SocketAddr, + sync::{Arc, RwLock}, +}; use tokio::sync::broadcast::Sender; pub mod meta; pub mod user; @@ -131,7 +134,11 @@ fn game_handle_new_game( // create game if let Ok(new_game_object) = Game::new(manifest) { - state.games.write().unwrap().push(new_game_object); + state + .games + .write() + .unwrap() + .insert(new_game_object.name.clone(), RwLock::new(new_game_object)); tx.send(meta_games_browser_update(state))?; tx.send(meta_server_summary_update(state))?; } diff --git a/server/src/websocket/meta.rs b/server/src/websocket/meta.rs index 88a4f76..6cefeb7 100644 --- a/server/src/websocket/meta.rs +++ b/server/src/websocket/meta.rs @@ -49,11 +49,11 @@ pub fn meta_games_browser_update(state: &Arc) -> String { // this may get expensive if there are many games let mut names = vec![]; - for game in state.games.read().unwrap().iter() { + for game in state.games.read().unwrap().values() { names.push(format!( "Name: {} Host: {}", - game.name, - game.host.read().unwrap().name + game.read().unwrap().name, + game.read().unwrap().host.read().unwrap().name )); }