public ActionResult <ExecuteMoveResponse> executeMove([FromBody] MessagePayload messagePayload) { // Check the format of the given message payload. // Return status 400 to the client if the format is incorrect. try { messagePayload.IsExpectedFormat(); } catch (ArgumentException error) { return(BadRequest(error.Message)); } // Check the initial state of the given game board. // // If the given game board contains a conclusive state, // return the result to the client without taking another turn. GameBoard gameBoard = new GameBoard(messagePayload.gameBoard); string earlyGameState = gameBoard.GetGameState(); if (earlyGameState != Constants.INCONCLUSIVE) { return(GenerateExecuteMoveResponse(earlyGameState, messagePayload.move, gameBoard, true, messagePayload.azurePlayerSymbol, messagePayload.humanPlayerSymbol)); } // If the given game board has an inconclusive state, tell Azure to take its turn. Player azure = new Player(messagePayload.azurePlayerSymbol, messagePayload.humanPlayerSymbol, gameBoard); GameBoard newGameBoard = azure.ExecuteMove(); // Check the state of the game board after Azure's turn. // Use the new game state to generate and return the result to the client. string gameState = newGameBoard.GetGameState(); return(GenerateExecuteMoveResponse(gameState, azure.lastMove, newGameBoard, false, messagePayload.azurePlayerSymbol, messagePayload.humanPlayerSymbol)); }