Example #1
0
 /**
  * Request player bets in parallel.
  * Players which do not respond in time are not allowed to play this hand.
  *
  * @return Promise
  */
 private function requestBets()
 {
     $promises = [];
     foreach ($this->table->getSeats() as $seat) {
         if ($seat->isFree()) {
             continue;
         }
         $player = $seat->getPlayer();
         if ($player->getChips()->getAmount() < $this->table->getMinimumBet()) {
             $this->connectionManager->kickPlayer($player, KickedMessage::REASON_INSUFFICIENT_FUNDS);
             continue;
         }
         $promises[] = $this->table->requestPlayerBet($player)->then(function ($amount) use($seat) {
             $this->table->acceptPlayerBet($seat->getPlayer(), $seat->getHands()[0], $amount);
             $seat->setInPlay(true);
             $this->logger->info('Player bet', ['player' => $seat->getPlayer()->getName(), 'amount' => $amount, 'stack' => $seat->getPlayer()->getChips()->getAmount()]);
             return null;
         })->otherwise(function (\Exception $reason) use($seat) {
             $seat->setInPlay(false);
             $this->logger->info('Player unable to bet', ['player' => $seat->getPlayer()->getName(), 'stack' => $seat->getPlayer()->getChips()->getAmount(), 'reason' => $reason->getMessage()]);
             return null;
         });
     }
     return \React\Promise\all($promises)->then(function () {
         return \Blackjack\Promise\timedResolve(self::PAUSE_SPEED);
     });
 }