public async Task <Games.NinthPlanet> CreateNewGameAsync(
            int ownerId,
            NinthPlanetNewGameOptions newGameOptions,
            CancellationToken cancellationToken)
        {
            await semaphore.WaitAsync(cancellationToken);

            try
            {
                var gameInfo = new DbGameInfo
                {
                    GameType = GameType.NinthPlanet,
                    Name     = newGameOptions.Name,
                    MaximumNumberOfPlayers = newGameOptions.MaxNumberOfPlayers,
                    IsPublic = newGameOptions.IsPublic,
                    OwnerId  = ownerId
                };

                var gameServer = gameServerFactory.CreateNewGame(gameInfo);
                var state      = gameServer.SaveCurrentState();
                NinthPlanetGameState dbGameState = ToStoredState(gameInfo, state);
                dbContext.NinthPlanetGames.Add(dbGameState);
                await dbContext.SaveChangesAsync(cancellationToken);

                var game = new Games.NinthPlanet(gameServer);
                this.gameCache.TryAddGame(gameInfo.Id, game);
                return(game);
            }
            finally
            {
                semaphore.Release();
            }
        }
Example #2
0
        public async Task <GameState> CreateGameAsync(
            [FromBody] NinthPlanetNewGameOptions gameOptions,
            CancellationToken cancellationToken)
        {
            int userId = GetUserId();

            var game = await gameRepository.CreateNewGameAsync(userId, gameOptions, cancellationToken);

            return(await game.GetGameStateAsync(userId));
        }