public void SwapTiles(string playerConnectionId, SwapTilesTurn turn) { var game = _gameRepository.GetGame(turn.GameId); if (game.CurrentTurnPlayerId != playerConnectionId) { //Not this players turn, invalidate player IsEndOfGame(game); _playerBusi.InvalidatePlayer(playerConnectionId, game.GameId.ToString()); return; } //drawTiles if the player tries to draw more tiles than //there are in the bag That is an invalid move. if (game.TileBag.Count() < turn.TurnedInTiles.Count) { _playerBusi.InvalidatePlayer(playerConnectionId, game.GameId.ToString()); if (IsEndOfGame(game)) { return; } StartNextTurn(game, 0, true, null, 0); return; } var newTiles = game.TileBag.DrawTiles(turn.TurnedInTiles.Count); var validMove = _playerBusi.RemoveTilesFromHand(turn.TurnedInTiles, playerConnectionId); if (!validMove) { //invalid turn. They are trying to turn in a tile that wasn't in their hand. _playerBusi.InvalidatePlayer(playerConnectionId, game.GameId.ToString()); IsEndOfGame(game); return; } game.TileBag.ReturnTiles(turn.TurnedInTiles); _playerBusi.AddTilesToHand(newTiles, playerConnectionId); //Send player their new hand _updater.UpdateClientEndTurnEvent(playerConnectionId, new EndTurnEvent { NewTiles = newTiles }); StartNextTurn(game, 0, false, null, turn.TurnedInTiles.Count); }
public void SwapTiles(SwapTilesTurn turn) { _gameBusi.SwapTiles(Context.ConnectionId, turn); }