コード例 #1
0
        public IReadOnlyList <PvpApiRowModel> Get(BlizzardLocale locale = BlizzardLocale.All, WowPvpBracket bracket = WowPvpBracket.All,
                                                  WowClass wowClass     = WowClass.All, WowSpec spec = WowSpec.All, uint skip = 0, uint take = 100)
        {
            var query = _liteDbRepo.Query <PvpApiRowModel>();

            if (locale != BlizzardLocale.All)
            {
                query = query.Where(row => row.Locale == (byte)locale);
            }

            if (bracket != WowPvpBracket.All)
            {
                query = query.Where(row => row.Bracket == (byte)bracket);
            }

            if (wowClass != WowClass.All)
            {
                query = query.Where(row => row.ClassId == (byte)wowClass);
            }

            if (spec != WowSpec.All)
            {
                query = query.Where(row => row.SpecId == (ushort)spec);
            }

            query = query.Where(Query.All("Rating"))
                    .Where(Query.All("Name"))
                    .Skip((int)skip)
                    .Limit((int)take);

            IReadOnlyList <PvpApiRowModel> result = query.ToList();

            return(result);
        }
コード例 #2
0
        /// <summary>
        /// Return pvp world of warcraft ladder data from official blizzard web api
        /// </summary>
        /// <param name="locale">BlizzardLocale.All is invalid param for this method</param>
        /// <param name="bracket">WowPvpBracket.All is invalid param for this method</param>
        /// <returns></returns>
        public async Task <IReadOnlyList <PvpApiRowModel> > GetPvpLadderRowsAsync(BlizzardLocale locale, WowPvpBracket bracket)
        {
            if (locale == BlizzardLocale.All)
            {
                throw new InvalidEnumArgumentException(nameof(BlizzardLocale.All));
            }

            if (bracket == WowPvpBracket.All)
            {
                throw new InvalidEnumArgumentException(nameof(WowPvpBracket.All));
            }

            var url = $"{BaseUrl}/{bracket.Stringify()}?locale={locale}&apikey={ApiKey}";

            try
            {
                using (var content = await HttpClient.GetStreamAsync(url))
                    using (var streamReader = new StreamReader(content))
                        using (var jsonTextReader = new JsonTextReader(streamReader))
                        {
                            var serializer = new JsonSerializer();
                            var rows       = serializer.Deserialize <PvpApiRowsModel>(jsonTextReader);

                            foreach (var row in rows.Rows)
                            {
                                row.Locale       = (byte)locale;
                                row.DownloadedOn = DateTime.Now;
                                row.Bracket      = (byte)bracket;
                            }

                            return(rows.Rows);
                        }
            }
            catch (Exception ex)
            {
                LogerManager.LogError(ex, $"url: {url}");
                return(null);
            }
        }
コード例 #3
0
 public void RemoveRecords(BlizzardLocale locale, WowPvpBracket wowPvpBracket)
 {
     _liteDbRepo.Delete <PvpApiRowModel>(row => row.Locale == (byte)locale && row.Bracket == (byte)wowPvpBracket);
 }
コード例 #4
0
 public Task <IReadOnlyList <PvpApiRowModel> > GetAsync(BlizzardLocale locale = BlizzardLocale.All, WowPvpBracket bracket = WowPvpBracket.All,
                                                        WowClass wowClass     = WowClass.All, WowSpec spec = WowSpec.All, uint skip = 0, uint take = 100)
 {
     return(Task.Run(() => Get(locale, bracket, wowClass, spec, skip, take)));
 }