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(); } }
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)); }