Пример #1
0
        public Match[] UpdateMatches(Match[] notSortedMatches, CancellationToken token)
        {
            if (notSortedMatches == null)
            {
                throw new ArgumentNullException("notSortedMatches был null");
            }

            DotaPageWorker dotaPageWorker  = new DotaPageWorker();
            List <Match>   matchesNew      = new List <Match>();
            Match          LastoldMatch    = notSortedMatches[0];
            bool           lastMatchloaded = false;

            while (!lastMatchloaded)
            {
                List <Match> matches = new List <Match>();
                if (!TryLoadPage(dotaPageWorker, "Страница с матчами не загружается, если ее не загрузить, то парсинг прервется", token))
                {
                    return(matches.ToArray());
                }

                string[] matchURLs = dotaPageWorker.GetMatchesURLs();
                foreach (var matchURL in matchURLs)
                {
                    if (matchURL == LastoldMatch.URL)
                    {
                        lastMatchloaded = true;
                        break;
                    }
                    DotaMatchPageWorker matchPageWorker = new DotaMatchPageWorker(matchURL);

                    matchPageWorker.AfterLoadPage += (sender, URL) =>
                    {
                        MatchPageLoaded?.Invoke(this, URL);
                    };

                    if (!TryLoadPage(matchPageWorker, "Страница с матчем не загружается", token))
                    {
                        continue;
                    }

                    matches.Add(GetMatch(matchPageWorker));
                    MatchLoaded?.Invoke(this, matchPageWorker.URL);
                }

                PageOfMatchesLoaded?.Invoke(this, dotaPageWorker.URL);


                matchesNew.AddRange(matches);
                if (dotaPageWorker.NextPage == null)
                {
                    break;
                }

                dotaPageWorker = new DotaPageWorker(dotaPageWorker.NextPage);
            }
            matchesNew.AddRange(notSortedMatches);
            return(matchesNew.ToArray());
        }
Пример #2
0
        /// <summary>
        /// Получение матчей по определенной страницу заданной dotaPageWorker
        /// </summary>
        /// <param name="dotaPageWorker">Страница с матчами</param>
        /// <param name="token">Токен отмены</param>
        /// <returns></returns>
        private Match[] GetMatches(DotaPageWorker dotaPageWorker, CancellationToken token)
        {
            if (dotaPageWorker == null)
            {
                throw new ArgumentNullException("dotaPageWorker был пуст");
            }

            List <Match> matches = new List <Match>();

            if (!TryLoadPage(dotaPageWorker, "Страница с матчами не загружается, если ее не загрузить, то парсинг прервется", token))
            {
                return(matches.ToArray());
            }

            string[] matchURLs = dotaPageWorker.GetMatchesURLs();
            foreach (var matchURL in matchURLs)
            {
                DotaMatchPageWorker matchPageWorker = new DotaMatchPageWorker(matchURL);

                matchPageWorker.AfterLoadPage += (sender, URL) =>
                {
                    MatchPageLoaded?.Invoke(this, URL);
                };

                if (!TryLoadPage(matchPageWorker, "Страница с матчем не загружается", token))
                {
                    continue;
                }

                matches.Add(GetMatch(matchPageWorker));
                MatchLoaded?.Invoke(this, matchPageWorker.URL);
            }

            PageOfMatchesLoaded?.Invoke(this, dotaPageWorker.URL);
            return(matches.ToArray());
        }