public void HandleRequestAsync(RequestModel requestModel, IOutputBoundary <ResponseModel> outputBoundary) { _ = requestModel?.PlayerId ?? throw new ArgumentNullException(nameof(requestModel.PlayerId)); var avitar = AvitarRepository.ReadAsync(requestModel.PlayerId); var currentPlayer = new BlackJackPlayer(avitar, HandIdProvider, requestModel.HandCount); var keyAndGame = GameRepository.FindByStatusFirstOrDefault(GameStatus.Waiting, requestModel.MaxPlayers); string gameIdentifier; BlackJackGame game; if (string.IsNullOrEmpty(keyAndGame.Key)) { gameIdentifier = GameIdProviders.GenerateGameId(); game = new BlackJackGame(CardProvider, DealerProvider.Dealer, requestModel.MaxPlayers); } else { gameIdentifier = keyAndGame.Key; game = keyAndGame.Value; } game.AddPlayer(currentPlayer); GameRepository.UpdateAsync(gameIdentifier, game); outputBoundary.HandleResponse(new ResponseModel() { GameIdentifier = gameIdentifier }); }
public BlackJackGame FindOpenGame(GameStatus status, int maxPlayers) { //TODO: This could use some work. aka not efficient var gameRecord = games .Where(x => x.Value.Status == status && x.Value.Players.Count() <= maxPlayers) .Select(x => x.Value) .FirstOrDefault(); if (gameRecord != null) { return(gameRecord); } var gameId = _gameIdProvider.GenerateGameId(); var dealer = _dealerProvider.Dealer; var game = new BlackJackGame(gameId, _cardProvider, dealer, maxPlayers); games.Add(game.Id, game); return(game); }