From 45ce66a29b3d1c49ef8e86b125701e89d58e8a4a Mon Sep 17 00:00:00 2001 From: Kjetil Orbekk Date: Fri, 23 Dec 2022 16:16:35 -0500 Subject: Generalize table state to include the result of play --- server/src/main.rs | 21 +++++++++++++++------ server/src/play.rs | 40 +++++++++------------------------------- 2 files changed, 24 insertions(+), 37 deletions(-) (limited to 'server/src') diff --git a/server/src/main.rs b/server/src/main.rs index 969bc25..a9e8f69 100644 --- a/server/src/main.rs +++ b/server/src/main.rs @@ -9,7 +9,10 @@ use axum::{ routing::{delete, get, post}, Json, Router, }; -use protocol::{bridge_engine::{Bid, GameStatePlayerView, Player}, card::Card}; +use protocol::{ + bridge_engine::{Bid, GameStatePlayerView, Player, TableStatePlayerView}, + card::Card, +}; use protocol::{Table, UserInfo}; use server::ServerState; use tower_cookies::{Cookie, CookieManagerLayer, Cookies}; @@ -147,17 +150,19 @@ async fn get_table_view( _session: AuthenticatedSession, State(state): ServerState, Path(id): Path, -) -> Result, BridgeError> { +) -> Result, BridgeError> { info!("Getting table state for {id:}"); let player_position = Player::South; let jnl = DbJournal::new(state.db.clone(), id); let mut table = play::Table::new_or_replay(jnl).await?; info!("Advancing play"); - while table.game()?.current_player() != player_position { + while table.game_in_progress() + && table.game()?.current_player() != player_position + { advance_play(&mut table).await?; } - let response = Json(GameStatePlayerView::from_game_state( - table.game()?, + let response = Json(TableStatePlayerView::from_table_state( + &table.state, player_position, )); info!("Response: {response:#?}"); @@ -304,6 +309,10 @@ mod tests { pub fn test_setup() { dotenv::dotenv().ok(); - let _ =env_logger::Builder::from_env(Env::default().default_filter_or("info")).is_test(true).try_init(); + let _ = env_logger::Builder::from_env( + Env::default().default_filter_or("info"), + ) + .is_test(true) + .try_init(); } } diff --git a/server/src/play.rs b/server/src/play.rs index ffb7407..e0d4733 100644 --- a/server/src/play.rs +++ b/server/src/play.rs @@ -3,10 +3,9 @@ use protocol::{ bot::{BiddingBot, PlayingBot}, bridge_engine::{ Bid, BiddingStatePlayerView, Deal, GameResult, GameState, - PlayStatePlayerView, Player, + PlayStatePlayerView, Player, TableState, }, card::Card, - play_result::MoveResult, simple_bots::{AlwaysPassBiddingBot, RandomPlayingBot}, }; use rand::random; @@ -125,35 +124,7 @@ where { journal: J, settings: TableSettings, - state: TableState, -} - -#[derive(PartialEq, Eq, Clone, Debug, Serialize, Deserialize)] -pub enum TableState { - Unknown, - Game(GameState), - Result(GameResult), -} - -impl Default for TableState { - fn default() -> Self { - TableState::Unknown - } -} - -impl Into for MoveResult { - fn into(self) -> TableState { - match self { - MoveResult::Stay(game) => TableState::Game(game), - MoveResult::Go(result) => TableState::Result(result), - } - } -} - -impl Into for GameState { - fn into(self) -> TableState { - TableState::Game(self) - } + pub state: TableState, } impl> Table { @@ -167,6 +138,13 @@ impl> Table { Ok(table) } + pub fn game_in_progress(&self) -> bool { + match &self.state { + TableState::Game(_) => true, + _ => false, + } + } + pub fn game(&self) -> Result<&GameState, BridgeError> { match &self.state { TableState::Game(g) => Ok(g), -- cgit v1.2.3