HIV aka pre-AIDS

This commit is contained in:
Adam 2024-08-09 02:57:27 -04:00
parent 22b2b58079
commit 1ca31b78c6
5 changed files with 72 additions and 4 deletions

View file

@ -17,9 +17,9 @@ pub fn Browser() -> impl IntoView {
let new_game_name_ref = create_node_ref::<Input>();
let (selected_packs, set_selected_packs) = create_signal::<BTreeSet<u8>>(BTreeSet::new());
create_effect(move |_| {
logging::log!("{:#?}", selected_packs().iter().collect::<Vec<_>>());
});
// create_effect(move |_| {
// logging::log!("{:#?}", selected_packs().iter().collect::<Vec<_>>());
// });
// Game stuff
let new_game = move |_| {

View file

@ -1,11 +1,26 @@
use crate::components::websocket::WebSocketContext;
use leptos::*;
use lib::*;
#[component]
pub fn Game() -> impl IntoView {
let websocket = expect_context::<WebSocketContext>();
let game_meta = expect_context::<ReadSignal<Option<GameMeta>>>();
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! {
<div class="p-1">
<h2 class="text-2xl">Game</h2>
<p>Name:</p>
<p>Name: {move || game_name}</p>
<p>Host:</p>
<p>Players:</p>
<p>Czar:</p>

View file

@ -73,6 +73,7 @@ pub fn Websocket() -> impl IntoView {
let (chat_update, set_chat_update) = create_signal::<Option<ChatUpdate>>(Option::None);
let (chat_message, set_chat_message) = create_signal::<Option<ChatMessage>>(Option::None);
let (active_games, set_active_games) = create_signal::<Option<GamesUpdate>>(Option::None);
let (current_game, set_current_game) = create_signal::<Option<GameMeta>>(Option::None);
let (card_packs_meta, set_card_packs_meta) = create_signal::<CardPacksMeta>(CardPacksMeta {
official_meta: vec![],
unofficial_meta: vec![],
@ -83,6 +84,7 @@ pub fn Websocket() -> impl IntoView {
provide_context::<ReadSignal<Option<ChatUpdate>>>(chat_update);
provide_context::<ReadSignal<Option<ChatMessage>>>(chat_message);
provide_context::<ReadSignal<Option<GamesUpdate>>>(active_games);
provide_context::<ReadSignal<Option<GameMeta>>>(current_game);
provide_context::<ReadSignal<CardPacksMeta>>(card_packs_meta);
provide_context::<ReadSignal<Option<ServerStateSummary>>>(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::<GamesUpdate>(message) {
set_active_games(Some(games_update));
} else if let Ok(game_update) = from_str::<GameMeta>(message) {
set_current_game(Some(game_update));
} else if let Ok(packs_meta_update) = from_str::<CardPacksMeta>(message) {
set_card_packs_meta(packs_meta_update);
} else {

View file

@ -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<String>,
// pub czar: String,
// pub black: String,
// pub white: Vec<String>,
}
/// Card Pack Meta
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct CardPackMeta {

View file

@ -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)),