UserRank IUserDataProcessingService.ProcessUserRankFromLadder(string jsonResponse, Ladders ladder, AoeNetAPIStringResources apiStringResources) { var ratingResponse = JsonConvert.DeserializeObject <UserLadderDataResponse>(jsonResponse); //response to UserRank model var userRank = new UserRank { //we always want to use .First() becouse api don't allow for multiple requests between multiple leadboards Elo = ratingResponse.Leaderboard.First().Rating, Ladder = ratingResponse.Leaderboard.First().Rank }; var userRankData = new UserData(); userRankData.UserRatings.Add(ladder, userRank); return(userRank); }
UserLadderData IUserDataProcessingService.ProcessUserDataFromLadder(string jsonResponse, AoeNetAPIStringResources apiStringResources) { var leadbord = JsonConvert.DeserializeObject <UserLadderDataResponse>(jsonResponse);//.Leaderboard.First(); var ladderData = leadbord.Leaderboard.First(); return(new UserLadderData() { Country = ladderData.Country, PreviousRating = ladderData.PreviousRating, HighestRating = ladderData.HighestRating, Streak = ladderData.Streak, LowestStreak = ladderData.LowestStreak, HighestStreak = ladderData.HighestStreak, Games = ladderData.Games, Wins = ladderData.Wins, Losses = ladderData.Losses, Drops = ladderData.Drops }); }
Match IUserDataProcessingService.ProcessMatch(string jsonResponse, AoeNetAPIStringResources apiStringResources) { var matchResponse = JsonConvert.DeserializeObject <MatchResponse>( jsonResponse ); var match = new Match { //todo: handle opened as separate state independent then start Opened = matchResponse.last_match.started, Finished = matchResponse.last_match.finished, MatchId = matchResponse.last_match.match_id, Users = new List <UserMatchData>(), MatchType = (MatchType)matchResponse.last_match.leaderboard_id }; //create user match data models from response model foreach (var player in matchResponse.last_match.players) { //assign basic data UserMatchData userMatchData = new UserMatchData { Name = player.name, Team = player.team, Color = ((UserColors)player.color).ToString() }; //for compatibility with: MatchMinimalResponse set, cause API is returning null civs sometimes string civilization = ""; try { civilization = apiStringResources.Civ //find matching civilization from API resources .First(id => id.Id == player.civ) .String; } catch (Exception e) { if ( e is StackOverflowException || e is ThreadAbortException || e is AccessViolationException ) { throw e; } civilization = "Unknown uivilization"; } finally { userMatchData.Civilization = civilization; } //assign game profile id var userGameProfileId = new UserGameProfileId { ProfileId = player.profile_id.ToString() }; userMatchData.UserGameProfileId = userGameProfileId; userMatchData.UserRankData = new UserData(); userMatchData.MatchType = (MatchType)matchResponse.last_match.leaderboard_id; //assign ratings if aviable if (player.rating != null) { var ratingType = (Ladders)matchResponse.last_match.leaderboard_id; var userRank = new UserRank { Elo = player.rating.Value, Ladder = null //we have to send separate request to check ladder }; userMatchData.UserRankData.UserRatings.Add(ratingType, userRank); } match.Users.Add(userMatchData); } return(match); }