public function onClose(WebSocketConnection $connection) { if ($this->isSubscribed($connection)) { $this->unsubscribe($connection); } $this->connections = $this->connections->filter(function ($c) use($connection) { return $c !== $connection; }); }
public function __construct($seats = 5) { if ($seats <= 0) { throw new \LogicException('Table must have at least 1 seat'); } $this->seats = new Vector(); for ($seat = 0; $seat < $seats; $seat++) { $this->seats->pushBack(new TableSeat($seat, $this)); } $this->id = md5(uniqid('', true)); }
public function closeTable(Table $table) { $tableLoop = $this->getTableLoop($table); if ($tableLoop) { $tableLoop->cancel(); } $this->logger->info('Closing table', ['id' => $table->getId()]); $this->tables = $this->tables->filter(function (Table $t) use($table) { return $t !== $table; }); }
public function restockDeck() { $this->cards = new Vector(); $suit = [Card::SUIT_CLUBS, Card::SUIT_SPADES, Card::SUIT_HEARTS, Card::SUIT_DIAMONDS]; foreach ($suit as $cardSuit) { for ($rank = Card::RANK_ACE; $rank <= Card::RANK_KING; $rank++) { if ($rank === 11) { continue; } $this->cards->pushBack(new Card($rank, $cardSuit)); } } $cards = clone $this->cards; for ($deck = 0; $deck < $this->decks; $deck++) { $this->cards->append($cards); } }
/** * @param string $class * @param int $timeout * * @return Promise */ public function waitOnMessage($class, $timeout = 3) { $deferred = new Deferred(); $this->messageQueue[] = ['class' => $class, 'deferred' => $deferred]; return \Blackjack\Promise\timeout($deferred->promise(), $timeout)->otherwise(function (\Exception $e) use($deferred) { $this->messageQueue = $this->messageQueue->filter(function ($entry) use($deferred) { return $entry['deferred'] !== $deferred; }); return \React\Promise\reject($e); }); }
private function handlePlayerDisconnection(Connection $connection) { $player = $connection->getPlayer(); $seat = $player->getSeat(); $playerConnection = $this->getPlayerConnection($player); $this->connections = $this->connections->filter(function ($c) use($playerConnection) { return $c !== $playerConnection; }); $this->removePlayerFromSeat($seat, $assignBot = true); if (!$seat->getTable()->onlySeatedByBots() || count($this->tableManager->getTables()) === 1) { // Skip destroying table if this table is the last one standing // Or there's at least one computer bot connected via TCP return; } $this->destroyTable($seat->getTable()); }
/** * @param Card $card */ public function addCard(Card $card) { $this->cards->pushBack($card); }
public function removeConnection(WebSocketConnection $connection) { $this->connections = $this->connections->filter(function ($c) use($connection) { return $c !== $connection; }); }