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()); }
/// <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()); }