Esempio n. 1
0
 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;
     }
 }
Esempio n. 2
0
        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;
            }
        }
Esempio n. 3
0
        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;
            }
        }