private Teitoku ParseRankingData(Collector collector, dynamic eachTeitou) { try { var decodedData = KeyGen.DecodeRankAndMedal(collector.MemberId, (int)eachTeitou.api_mxltvkpyuklh, (long)eachTeitou.api_wuhnhojjxmke, (long)eachTeitou.api_itslcqtmrxtf); Teitoku tetoku = new Teitoku(); tetoku.Nickname = eachTeitou.api_mtjmdcwtvhdr; tetoku.Comment = eachTeitou.api_itbrdpdbkynm; tetoku.MedalNum = (int)decodedData["medal"]; tetoku.Senka = (int)decodedData["rate"]; tetoku.RankNo = (int)eachTeitou.api_mxltvkpyuklh; tetoku.Rank = RANK_NAME[(int)eachTeitou.api_pcumlrymlujh]; tetoku.Server = collector.ServerName; return(tetoku); } catch (Exception e) { Utils.Log("Critical Error at ParseRankingData: " + e.Message, "SenkaModule", ConsoleColor.Red); throw; } }
private async Task <Teitoku> DeepCachingForEachTeitokuAsync(Collector collector, Teitoku teitoku) { try { if (!collector.ServerName.Equals(teitoku.Server)) { throw new ArgumentException( string.Format("Collector and target Teitoku mismatch.{0} != {1}", collector.ServerName, teitoku.Server)); } using (HttpClient subClient = new HttpClient(new HttpClientHandler { AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate } )) { var postContent = new Dictionary <string, string> { { "api_verno", "1" }, { "api_token", collector.Token }, { "api_member_id", teitoku.MemberId.ToString() }, }; var httpReqMsg = Utils.CreateHttpRequestMessage( string.Format(API_GET_ENEMY_INFO, collector.ServerAddress), new FormUrlEncodedContent(postContent)); var respones = await Utils.RequestAsync(() => subClient.SendAsync(httpReqMsg)); var rawResult = await respones.Content.ReadAsStringAsync(); var rawJson = rawResult.Substring(7); // delete "svdata=" dynamic json = JToken.Parse(rawJson); if ((int)json.api_result != 1) { string msg = json.api_result_msg; Utils.Log(string.Format("Error on acquiring Teitoku details, code: {0}.", json.api_result), "SenkaModule", ConsoleColor.Red); throw new NotSupportedException(); // TO-DO acquire a new token } dynamic api_data = json.api_data; teitoku.Rank = RANK_NAME[(int)api_data.api_rank]; teitoku.Comment = api_data.api_cmt; teitoku.HeadquarterLevel = api_data.api_level; teitoku.Experiences = (long)api_data.api_experience[0]; teitoku.DeckName = api_data.api_deckname; teitoku.DeckShips = new List <PracticeShip>(); dynamic ships = api_data.api_deck.api_ships; foreach (dynamic ship in ships) { if (ship.api_level == null) { continue; } var ds = new PracticeShip(); ds._id = ship.api_id; ds.Level = ship.api_level; ds.ShipId = ship.api_ship_id; ds.Star = ship.api_star; teitoku.DeckShips.Add(ds); } teitoku.ShipSlots = (int)api_data.api_ship[1]; teitoku.CurrentShips = (int)api_data.api_ship[0]; teitoku.ItemSlots = (int)api_data.api_slotitem[1]; teitoku.CurrentItems = (int)api_data.api_slotitem[0]; teitoku.Furnitures = (int)api_data.api_furniture; //teitoku.LastUpdate = DateTime.UtcNow; return(teitoku); } } catch (Exception e) { Utils.Log("Critical Error at DeepCachingForEachTeitokuAsync: " + e.Message, "SenkaModule", ConsoleColor.Red); throw; } }
private async Task <Teitoku> DeepDistinctTeitokuAsync(Collector collector, Teitoku teitoku) { try { if (!collector.ServerName.Equals(teitoku.Server)) { throw new ArgumentException( string.Format("Collector and target Teitoku mismatch.{0} != {1}", collector.ServerName, teitoku.Server)); } List <RawMember> prevCandidates = new List <RawMember>(); using (HttpClient subClient = new HttpClient(new HttpClientHandler { AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate } )) { for (int i = 0; i < teitoku.Candidates.Count(); i++) { var candidate = teitoku.Candidates[i]; var postContent = new Dictionary <string, string> { { "api_verno", "1" }, { "api_token", collector.Token }, { "api_member_id", candidate.memberId.ToString() }, }; var httpReqMsg = Utils.CreateHttpRequestMessage( string.Format(API_GET_ENEMY_INFO, collector.ServerAddress), new FormUrlEncodedContent(postContent)); var respones = await Utils.RequestAsync(() => subClient.SendAsync(httpReqMsg)); var rawResult = await respones.Content.ReadAsStringAsync(); var rawJson = rawResult.Substring(7); // delete "svdata=" dynamic json = JToken.Parse(rawJson); if ((int)json.api_result != 1) { string msg = json.api_result_msg; Utils.Log(string.Format("Error on acquiring Candidate details, code: {0}.", json.api_result), "SenkaModule", ConsoleColor.Red); throw new NotSupportedException(); // TO-DO acquire a new token } dynamic api_data = json.api_data; RawMember m = new RawMember(); m.memberId = candidate.memberId; m.nickname = candidate.nickname; m.comment = api_data.api_cmt; m.level = (int)api_data.api_level; m.rank = RANK_NAME[(int)api_data.api_rank]; prevCandidates.Add(m); } var newCandidates = prevCandidates.FindAll(x => x.comment.Equals(teitoku.Comment) && x.rank.Equals(teitoku.Rank)); if (newCandidates.Count() == 1) { teitoku.MemberId = newCandidates.First().memberId; Utils.Log(string.Format("{0} from {1} has been successfully distinguished from {2}.", teitoku.Nickname, teitoku.Server, teitoku.Candidates.Count()), "SenkaModule"); teitoku.Candidates.Clear(); teitoku.Candidates = null; } else { teitoku.Candidates = newCandidates; Utils.Log(string.Format("{0} from {1} reduced number of cadidates by {2} from {3}.", teitoku.Nickname, teitoku.Server, (prevCandidates.Count() - newCandidates.Count()), prevCandidates.Count()), "SenkaModule", ConsoleColor.Magenta); } return(teitoku); } } catch (Exception e) { Utils.Log("Critical Error at DeepDistinctTeitokuAsync: " + e.Message, "SenkaModule", ConsoleColor.Red); throw; } }