Ejemplo n.º 1
0
        private async void Worker()
        {
            loader = new HtmlLoader(parserSettings);
            for (int i = parserSettings.StartPoint; i <= parserSettings.EndPoint; i++)
            {
                if (!Program.ParserActive)
                {
                    return;
                }

                var source = await loader.GetSourceByPageId(i);

                var domParser = new HtmlParser();

                var document = await domParser.ParseDocumentAsync(source);

                Parser.Parse(document);
                lock (locker)
                    OnParseOneLink?.Invoke();
            }

            if (Program.ParserActive)
            {
                ParseComplete?.Invoke();
            }
        }
        private static Task RunParsePage(int taskId, int lineIndex)
        {
            return(Task.Run(async() =>
            {
                if (!Program.ParserActive)
                {
                    return;
                }

                var items = lines[lineIndex].Split(' ');
                var client = new HttpClient();
                var response = await client.GetAsync("https://www.g2g.com/" + items[3]);

                string source = null;
                if (response != null && response.StatusCode == HttpStatusCode.OK)
                {
                    source = await response.Content.ReadAsStringAsync();
                }

                var domParser = new HtmlParser();
                var document = await domParser.ParseDocumentAsync(source);
                var count = GetAnnouncementCount(document);

                if (count != 0)
                {
                    if (count > 20)
                    {
                        int requestsCount = count / 20;

                        while (true)
                        {
                            int index = -1;

                            while (!CefSourceLoader.FreeBrowsers.TryDequeue(out index))
                            {
                                await Task.Delay(100);
                            }

                            if (index != -1)
                            {
                                document = await GetCefDocument(items[3], requestsCount, count, index);
                                break;
                            }
                        }
                    }
                    new ParserGamesG2G().Parse(document, SetSpaces(items[0]), SetSpaces(items[1]), SetSpaces(items[2]), count);
                }

                lock (locker)
                    CreateNewTask(taskId, countOfParsedLines++ + beginTasksCount);

                OnParseOneLink?.Invoke();
                //linesList.Remove(lines[lineIndex]);
            }));
        }