public ResponseBase CreateGameSession(CreateGameSessionRequest createGameRequest) { var gameDetails = new GameSessionDetails { Name = createGameRequest.Name, Owner = createGameRequest.UserName, TotalPlayerCount = createGameRequest.MaxPlayers, TotalBotCount = createGameRequest.MaxBots, }; gameDetails.Players.Add(new PlayerDetails { ConnectionId = createGameRequest.ConnectionId, UserName = createGameRequest.UserName }); if (createGameRequest.MaxPlayers == 1) { gameDetails.PlayerStarts = createGameRequest.PlayerStarts; gameDetails.Status = GameStatus.Starting; this.gamesAdministrator.AddGame(gameDetails); var playerDetails = gameDetails.Players[0]; return(new LaunchGameResponse(gameDetails.Status, gameDetails.Id, playerDetails.Id, playerDetails.ConnectionId)); } else { gameDetails.Status = GameStatus.Open; this.waitingGameSessionsById.TryAdd(gameDetails.Id, gameDetails); return(new CreateGameSessionResponse(gameDetails.Id)); } }
private GameManagerToken LaunchGame(GameSessionDetails gameSessionDetails) { if (gameSessionDetails == null) { throw new ArgumentNullException(nameof(gameSessionDetails)); } var playerIds = new Queue <Guid>(); var connectionIdsByPlayerId = new Dictionary <Guid, string>(); gameSessionDetails.Players.ForEach(player => { connectionIdsByPlayerId.Add(player.Id, player.ConnectionId); playerIds.Enqueue(player.Id); }); var gameBoard = new GameBoard(BoardSizes.Standard); var gameBoardQuery = new GameBoardQuery(gameBoard); Dictionary <Guid, IEventReceiver> eventReceiversByPlayerId = null; List <Bot> bots = null; if (gameSessionDetails.TotalBotCount > 0) { bots = new List <Bot>(); eventReceiversByPlayerId = new Dictionary <Guid, IEventReceiver>(); while (gameSessionDetails.TotalBotCount-- > 0) { var bot = new Bot("Bot #" + (bots.Count + 1), gameSessionDetails.Id, this, gameBoardQuery); bots.Add(bot); eventReceiversByPlayerId.Add(bot.Id, bot); playerIds.Enqueue(bot.Id); } } var eventSender = new EventSender(this.gameHubContext, connectionIdsByPlayerId, eventReceiversByPlayerId); var gameManager = new GameManager( gameSessionDetails.Id, gameSessionDetails.PlayerStarts ? new PlayerStartsNumberGenerator() : this.numberGenerator, gameBoard, new DevelopmentCardHolder(), new PlayerFactory(), eventSender, new GameOptions { Players = gameSessionDetails.NumberOfPlayers, TurnTimeInSeconds = gameSessionDetails.TurnTimeoutInSeconds } ); gameManager.SetIdGenerator(() => { return(playerIds.Dequeue()); }); gameSessionDetails.Players.ForEach(player => { gameManager.JoinGame(player.UserName); }); if (bots != null) { bots.ForEach(bot => { gameManager.JoinGame(bot.Name); }); } return(new GameManagerToken(gameManager, gameManager.StartGameAsync(), eventSender)); }
public void AddGame(GameSessionDetails gameDetails) { this.gamesToLaunchById.TryAdd(gameDetails.Id, gameDetails); }