summaryrefslogtreecommitdiff
path: root/server
diff options
context:
space:
mode:
authorKjetil Orbekk <kj@orbekk.com>2022-12-18 12:38:13 -0500
committerKjetil Orbekk <kj@orbekk.com>2022-12-18 12:38:13 -0500
commite7167b17d96cea1c31ca77e36cc0248c18b818c6 (patch)
tree0f2c4bd1bdafb72164431526e610a297f3c0c43a /server
parentb5940c3ae2b6e23a6373383d5d78958fb23cb611 (diff)
Implement advance_play for passing bidding bot
Diffstat (limited to 'server')
-rw-r--r--server/src/play.rs25
1 files changed, 21 insertions, 4 deletions
diff --git a/server/src/play.rs b/server/src/play.rs
index 17d5819..c4dc5c7 100644
--- a/server/src/play.rs
+++ b/server/src/play.rs
@@ -1,9 +1,10 @@
use async_trait::async_trait;
-use protocol::{bridge_engine::{GameState, Player, Bid, Deal}};
+use protocol::{bridge_engine::{GameState, Player, Bid, Deal, BiddingStatePlayerView}, simple_bots::AlwaysPassBiddingBot, bot::BiddingBot};
use rand::random;
use serde::{Deserialize, Serialize};
use serde_json::json;
use sqlx::{query, PgPool};
+use tracing::error;
use uuid::Uuid;
use crate::error::BridgeError;
@@ -140,8 +141,24 @@ impl<J: Journal> Table<J> {
}
-pub fn advance_play<J: Journal>(table: &mut Table<J>) {
- todo!()
+pub async fn advance_play<J: Journal>(table: &mut Table<J>) -> Result<(), BridgeError> {
+ let current_player = match table.game().current_player() {
+ Some(player) => player,
+ None => {
+ return Err(BridgeError::InvalidRequest(format!("No play to make for game")));
+ },
+ };
+ match table.game() {
+ GameState::Bidding(bidding) => {
+ let player_view = BiddingStatePlayerView::from_bidding_state(bidding, current_player);
+ let bot = AlwaysPassBiddingBot {};
+ let bid = bot.bid(&player_view).await;
+ table.bid(bid).await?;
+ Ok(())
+ },
+ GameState::Play(_) => todo!(),
+ GameState::PassedOut { dealer, deal, bidding } => todo!(),
+ }
}
#[cfg(test)]
@@ -215,7 +232,7 @@ mod test {
async fn test_advance_play() {
let mut t1: Table<TestJournal> = Table::new(Default::default()).await.unwrap();
let player = t1.game().current_player();
- advance_play(&mut t1);
+ advance_play(&mut t1).await.unwrap();
assert_ne!(player, t1.game().current_player());
}
}