示例#1
0
        public async Task <GetTurnPromptResponse> GetTurnPromptAsync(GetTurnPromptRequest request)
        {
            var response = ServiceMessageFactory <GetTurnPromptResponse> .CreateFrom(request);

            var gameSessionRequest = ServiceMessageFactory <GetGameSessionRequest> .CreateFrom(request);

            gameSessionRequest.GameSessionId = request.GameSessionId;
            var gameSessionResponse = await gameSessionAccess.GetGameSessionAsync(gameSessionRequest);

            var gameDefinitionRequest = ServiceMessageFactory <GetGameDefinitionRequest> .CreateFrom(request);

            gameDefinitionRequest.GameDefinitionId = gameSessionResponse.GameSession.GameDefinitionId;

            var gameDefinitionResponse = await gameDefinitionAccess.GetGameDefinitionAsync(gameDefinitionRequest);

            response.Prompt = gameDefinitionResponse.GameDefinition.TurnPrompt;
            return(response);
        }
示例#2
0
        public async Task <InitializeGameResponse> InitializeGameAsync(InitializeGameRequest request)
        {
            var response = ServiceMessageFactory <InitializeGameResponse> .CreateFrom(request);

            var gameDefinitionRequest = ServiceMessageFactory <GetGameDefinitionRequest> .CreateFrom(request);

            gameDefinitionRequest.GameDefinitionId = request.GameDefinitionId;

            var gameDefinitionResponse = await gameDefinitionAccess.GetGameDefinitionAsync(gameDefinitionRequest);

            // Create Players
            var players = new List <Player>();

            for (var idx = 0; idx < gameDefinitionResponse.GameDefinition.GamePieces.Length; idx++)
            {
                var name      = $"Player {idx + 1}";
                var gamePiece = gameDefinitionResponse.GameDefinition.GamePieces[idx];
                var isMachine = request.NumberOfPlayers <= idx;

                var player = PlayerFactory.Create(name, gamePiece, isMachine);
                players.Add(player);
            }

            var createPlayersRequest = ServiceMessageFactory <CreatePlayersRequest> .CreateFrom(request);

            createPlayersRequest.Players = players.Convert();
            var createPlayerResponse = await playerAccess.CreatePlayersAsync(createPlayersRequest);

            if (createPlayerResponse.HasErrors)
            {
                logger.LogError($"{createPlayerResponse.Errors}");
            }


            var playerIds   = players.Select(i => i.Id).ToArray();
            var gameSession = GameSessionFactory.Create(request.GameDefinitionId, playerIds);

            var gameSessionRequest = ServiceMessageFactory <CreateGameSessionRequest> .CreateFrom(request);

            gameSessionRequest.GameSession = gameSession.Convert();

            var gameSessionResponse = await gameSessionAccess.CreateGameSessionAsync(gameSessionRequest);

            if (!gameSessionResponse.HasErrors)
            {
                response.GameSession = gameSessionResponse.GameSession.Convert();
            }
            else
            {
                response.Errors += "Unable to create game session.";
                logger.LogError($"Unable to create game session ({response.GameSession.Id}).");
            }

            var tilesRequest = ServiceMessageFactory <CreateTilesRequest> .CreateFrom(request);

            var tiles = TicTacToeBoardFactory.Create(gameSession.Id, new[] { "A1", "A2", "A3", "B1", "B2", "B3", "C1", "C2", "C3" });

            tilesRequest.Tiles = tiles.Convert();

            var tilesResponse = await tileAccess.CreateTilesAsync(tilesRequest);

            if (!tilesResponse.HasErrors)
            {
                return(response);
            }

            response.Errors += "Unable to create game tiles.";
            logger.LogError($"Unable to create game tiles for game session ({response.GameSession.Id}).");

            return(response);
        }