From 1e5ef3b801be6803b2c09a74ade2e855e97e0d7d Mon Sep 17 00:00:00 2001 From: Adam <24621027+adoyle0@users.noreply.github.com> Date: Thu, 15 Aug 2024 00:34:36 -0400 Subject: [PATCH] cleanup --- server/src/game_handler.rs | 49 +++++++++++++++++++------------------- 1 file changed, 25 insertions(+), 24 deletions(-) diff --git a/server/src/game_handler.rs b/server/src/game_handler.rs index 323ff35..2d3501a 100644 --- a/server/src/game_handler.rs +++ b/server/src/game_handler.rs @@ -15,6 +15,7 @@ use std::{ }; use uuid::Uuid; +/// For interacting with the game handler pub enum GameHandlerMessage { NewGame { addr: SocketAddr, @@ -25,15 +26,19 @@ pub enum GameHandlerMessage { id: String, }, } + +/// Handles game stuff pub struct GameHandler { state: Arc, } impl GameHandler { + /// Returns a new game handler pub fn new(state: Arc) -> Self { GameHandler { state } } + /// Handles incoming messages pub async fn handle(&self, message: GameHandlerMessage) { match message { NewGame { addr, new_game } => self.new_game(addr, new_game).await, @@ -41,6 +46,7 @@ impl GameHandler { } } + /// Puts a user in a game async fn join_game(&self, addr: SocketAddr, id: String) { // Get pointers let this_game = self.state.games.read().unwrap().get(&id).unwrap().clone(); @@ -98,6 +104,7 @@ impl GameHandler { .unwrap(); } + /// Creates a new game async fn new_game(&self, addr: SocketAddr, new_game: NewGameRequest) { if new_game.packs.is_empty() { tracing::error!("New game cards are empty!"); @@ -205,8 +212,7 @@ pub struct CardPacks { } /// A white card -// TODO: Remove this clone! -#[derive(Debug, Deserialize, Clone)] +#[derive(Debug, Deserialize)] struct CardWhite { /// Card text text: String, @@ -215,8 +221,7 @@ struct CardWhite { } /// A black card -// TODO: Remove this clone! -#[derive(Debug, Deserialize, Clone)] +#[derive(Debug, Deserialize)] struct CardBlack { /// Card text text: String, @@ -239,7 +244,7 @@ struct CardPack { black: Option>, } -/// New game request structure +/// Internal manifest for making a new game #[derive(Debug)] struct NewGameManifest { /// Game name @@ -250,7 +255,7 @@ struct NewGameManifest { packs: Vec, } -/// A struct that represents a player +/// A player #[derive(Debug)] pub struct Player { /// Pointer to user @@ -261,7 +266,7 @@ pub struct Player { black: Vec>, } -/// The game master +/// The game object #[derive(Debug)] pub struct Game { /// Game's UUID @@ -281,13 +286,8 @@ pub struct Game { } impl Game { + /// Returns a new game object fn new(state: Arc, request: NewGameManifest) -> Self { - tracing::debug!( - "Creating game {} with {} as host", - &request.name, - &request.host.read().unwrap().name - ); - // Build the decks let mut white = vec![]; let mut black = vec![]; @@ -309,10 +309,14 @@ impl Game { } } + // Draw first black card let current_black = black.swap_remove((0..black.len()).choose(&mut thread_rng()).unwrap()); + + // These are at the largest size they should ever be white.shrink_to_fit(); black.shrink_to_fit(); + // Return game object Game { uuid: Uuid::now_v7(), name: request.name, @@ -362,19 +366,19 @@ impl Game { /// Parse json for card data pub fn load_cards_from_json(path: &str) -> Result<(CardPacks, CardPacksMeta)> { - // TODO: Repack these cards so every card is stored once and pointers are passed around instead of - // cloning stuff + // Load in json let data: String = read_to_string(path).with_context(|| format!("Invalid JSON path: \"{}\"", path))?; let jayson: Vec = serde_json::from_str(&data) .with_context(|| format!("The contents of \"{path}\" is not valid JSON."))?; + // For global state let mut official: HashMap = HashMap::new(); let mut unofficial: HashMap = HashMap::new(); - let mut official_meta: Vec = vec![]; let mut unofficial_meta: Vec = vec![]; + // Unpack the json for set in jayson { let mut num_white = 0; let mut num_black = 0; @@ -387,6 +391,7 @@ pub fn load_cards_from_json(path: &str) -> Result<(CardPacks, CardPacksMeta)> { // No safe default for this so make it an Option let mut pack: Option = Option::None; + // Process white cards if there are any if let Some(ref white) = set.white { num_white = white.len(); if num_white > 0 { @@ -406,6 +411,7 @@ pub fn load_cards_from_json(path: &str) -> Result<(CardPacks, CardPacksMeta)> { } } + // Process black cards if there are any if let Some(ref black) = set.black { num_black = black.len(); if num_black > 0 { @@ -426,6 +432,7 @@ pub fn load_cards_from_json(path: &str) -> Result<(CardPacks, CardPacksMeta)> { } } + // Start repackaging let meta = CardPackMeta { name: set.name, pack: pack.expect("No card pack number!"), @@ -442,24 +449,18 @@ pub fn load_cards_from_json(path: &str) -> Result<(CardPacks, CardPacksMeta)> { } } + // These are now the largest size they should ever be official.shrink_to_fit(); unofficial.shrink_to_fit(); - official_meta.shrink_to_fit(); unofficial_meta.shrink_to_fit(); - tracing::debug!("{} official", official.len()); - tracing::debug!("{} official meta", official_meta.len()); - tracing::debug!("{} unofficial", unofficial.len()); - tracing::debug!("{} unofficial meta", unofficial_meta.len()); - tracing::debug!("{:#?}", official_meta[0]); - tracing::debug!("{:#?}", unofficial_meta[0]); + // Package for export let packs = CardPacks { official, unofficial, }; - let packs_meta = CardPacksMeta { official_meta, unofficial_meta,