Esempio n. 1
0
        private static HttpMove GetEmptyHttpMove(string pName, HttpMoveResponse response, HttpRequestException ex = null)
        {
            var pMove = new PlayerMoves()
            {
                Moves      = new BotletMove[0],
                PlayerName = pName
            };
            var httpMove = new HttpMove()
            {
                PlayerMoves      = pMove,
                HttpMoveResponse = response,
                Exception        = ex
            };

            return(httpMove);
        }
Esempio n. 2
0
        public static async Task <HttpMove> GetPlayerMovesAsync(BotPlayer player, GameState gameState)
        {
            try
            {
                MoveRequest moveRequest = new MoveRequest()
                {
                    State = gameState, Player = player.PlayerName
                };
                string     jsonMoveRequest = JsonConvert.SerializeObject(moveRequest);
                HttpClient client          = GetClient(player.Uri);
                var        content         = new StringContent(jsonMoveRequest, Encoding.UTF8, "application/json");
                var        response        = await client.PostAsync(player.Uri, content);

                response.EnsureSuccessStatusCode();
                var responseJson = await response.Content.ReadAsStringAsync();

                var moves      = JsonConvert.DeserializeObject <List <BotletMove> >(responseJson);
                var playerMove = new PlayerMoves()
                {
                    Moves = moves, PlayerName = player.PlayerName
                };
                var httpMove = new HttpMove()
                {
                    HttpMoveResponse = HttpMoveResponse.OK,
                    PlayerMoves      = playerMove
                };
                return(httpMove);
            }
            catch (TaskCanceledException ex)
            {
                //This means the Http Client timed out. We return an empy move list instead.
                return(GetEmptyHttpMove(player.PlayerName, HttpMoveResponse.Timeout));
            }
            catch (HttpRequestException ex)
            {
                //This means a 400 returned or something like that, which is a disqualification.
                return(GetEmptyHttpMove(player.PlayerName, HttpMoveResponse.Error, ex));
            }
        }