diff --git a/client/src/components/browser.rs b/client/src/components/browser.rs index 643f1d2..1d00e3b 100644 --- a/client/src/components/browser.rs +++ b/client/src/components/browser.rs @@ -17,9 +17,9 @@ pub fn Browser() -> impl IntoView { let new_game_name_ref = create_node_ref::(); let (selected_packs, set_selected_packs) = create_signal::>(BTreeSet::new()); - create_effect(move |_| { - logging::log!("{:#?}", selected_packs().iter().collect::>()); - }); + // create_effect(move |_| { + // logging::log!("{:#?}", selected_packs().iter().collect::>()); + // }); // Game stuff let new_game = move |_| { diff --git a/client/src/components/game.rs b/client/src/components/game.rs index fcfeb4c..3b0961c 100644 --- a/client/src/components/game.rs +++ b/client/src/components/game.rs @@ -1,11 +1,26 @@ +use crate::components::websocket::WebSocketContext; use leptos::*; +use lib::*; #[component] pub fn Game() -> impl IntoView { + let websocket = expect_context::(); + let game_meta = expect_context::>>(); + + let (game_name, set_game_name) = create_signal("".to_string()); + let (game_host, set_game_host) = create_signal("".to_string()); + + create_effect(move |_| { + if let Some(game) = game_meta() { + set_game_name(game.name.clone()) + set_game_name(game.host.clone()) + } + }); + view! {

Game

-

Name:

+

Name: {move || game_name}

Host:

Players:

Czar:

diff --git a/client/src/components/websocket.rs b/client/src/components/websocket.rs index d10e415..47ae079 100644 --- a/client/src/components/websocket.rs +++ b/client/src/components/websocket.rs @@ -73,6 +73,7 @@ pub fn Websocket() -> impl IntoView { let (chat_update, set_chat_update) = create_signal::>(Option::None); let (chat_message, set_chat_message) = create_signal::>(Option::None); let (active_games, set_active_games) = create_signal::>(Option::None); + let (current_game, set_current_game) = create_signal::>(Option::None); let (card_packs_meta, set_card_packs_meta) = create_signal::(CardPacksMeta { official_meta: vec![], unofficial_meta: vec![], @@ -83,6 +84,7 @@ pub fn Websocket() -> impl IntoView { provide_context::>>(chat_update); provide_context::>>(chat_message); provide_context::>>(active_games); + provide_context::>>(current_game); provide_context::>(card_packs_meta); provide_context::>>(state_summary); @@ -105,6 +107,8 @@ pub fn Websocket() -> impl IntoView { set_chat_update(Some(chat_update)); } else if let Ok(games_update) = from_str::(message) { set_active_games(Some(games_update)); + } else if let Ok(game_update) = from_str::(message) { + set_current_game(Some(game_update)); } else if let Ok(packs_meta_update) = from_str::(message) { set_card_packs_meta(packs_meta_update); } else { diff --git a/lib/src/lib.rs b/lib/src/lib.rs index 07a7242..06ff978 100644 --- a/lib/src/lib.rs +++ b/lib/src/lib.rs @@ -1,5 +1,16 @@ use serde::{Deserialize, Serialize}; +/// Game meta +#[derive(Clone, Debug, Serialize, Deserialize)] +pub struct GameMeta { + pub name: String, + // pub host: String, + // pub players: Vec, + // pub czar: String, + // pub black: String, + // pub white: Vec, +} + /// Card Pack Meta #[derive(Clone, Debug, Serialize, Deserialize)] pub struct CardPackMeta { diff --git a/server/src/game_handler.rs b/server/src/game_handler.rs index 221d47f..025e7b7 100644 --- a/server/src/game_handler.rs +++ b/server/src/game_handler.rs @@ -4,6 +4,7 @@ use crate::Game; use crate::NewGameManifest; use crate::NewGameRequest; use crate::User; +use lib::*; use std::net::SocketAddr; use std::sync::{Arc, RwLock}; @@ -61,6 +62,43 @@ impl GameHandler { // create game if let Ok(new_game_object) = Game::new(manifest) { + tracing::debug!("{:#?}", &new_game_object); + let tx = self + .state + .online_users + .read() + .unwrap() + .get(&addr) + .unwrap() + .read() + .unwrap() + .tx + .clone(); + + tx.send( + serde_json::to_string(&GameMeta { + name: new_game_object.name.clone(), + // host: new_game_object.host.read().unwrap().name.clone(), + // players: new_game_object + // .players + // .iter() + // .map(|player| player.user.read().unwrap().name) + // .collect(), + // czar: new_game_object.host.read().unwrap().name.clone(), + // black: new_game_object + // .current_black + // .clone() + // .unwrap() + // .text + // .clone() + // .to_string() + // .clone(), + // white: new_game_object.white.iter().map(|card| card.text).collect(), + }) + .unwrap(), + ) + .await + .unwrap(); self.state.games.write().unwrap().insert( new_game_object.name.clone(), Arc::new(RwLock::new(new_game_object)),