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