public void Start()
 {
     while (true)
     {
         Console.ReadLine();
         _statisticPort.Post(s => s.GetCrawledCount(this));
         _statisticPort.Post(s => s.GetContent(this, @"http://home.cnblogs.com/q/"));
     }
 }
Example #2
0
        void ICrawlRequestHandler.Crawl(IPort <ICrawlResponseHandler> collector, string url)
        {
            var client = new WebClient();

            client.DownloadStringCompleted += (sender, e) =>
            {
                if (e.Error == null)
                {
                    var links = _processingUnit.Processing(e.Result);
                    collector.Post(c => c.Succeeded(this, url, e.Result, links));
                }
                else
                {
                    collector.Post(c => c.Failed(this, url, e.Error));
                }
            };

            client.DownloadStringAsync(new Uri(url));
        }
Example #3
0
        void IStatisticRequestHandelr.GetContent(IPort <IStatisticResponseHandler> requester, string url)
        {
            string content;

            if (!_urlContent.TryGetValue(url, out content))
            {
                content = null;
            }

            requester.Post(r => r.ReplyContent(url, content));
        }
Example #4
0
        void ICrawlRequestHandler.Crawl(IPort <ICrawlResponseHandler> collector, string url)
        {
            WebClient client = new WebClient();

            client.DownloadStringCompleted += (sender, e) =>
            {
                if (e.Error == null)
                {
                    var matches = Regex.Matches(e.Result, @"href=""(http://[^""]+)""").Cast <Match>();
                    var links   = matches.Select(m => m.Groups[1].Value).Distinct().ToList();
                    collector.Post(c => c.Succeeded(this, url, e.Result, links));
                }
                else
                {
                    collector.Post(c => c.Failed(this, url, e.Error));
                }
            };

            client.DownloadStringAsync(new Uri(url));
        }
Example #5
0
 void ICountResponseHandler.OutCurrentTotal(IPort <ICountRequestHandler> counter, int newValue)
 {
     this.currentValue = newValue;
     this.index++;
     if (this.index <= this.maxValue)
     {
         counter.Post(ct => ct.Count(this, currentValue, index));
     }
     else
     {
         Console.WriteLine("CurrentTotal: {0}", newValue);
     }
 }
Example #6
0
        private void DispatchCrawlingTasks(IPort <ICrawlRequestHandler> reusableCrawler)
        {
            if (_readyToCrawl.Count <= 0)
            {
                WorkingCrawlerCount--;
            }

            var url = _readyToCrawl.Dequeue();

            reusableCrawler.Post(c => c.Crawl(this, url));

            while ((_readyToCrawl.Count > 0) && (WorkingCrawlerCount < MaxCrawlerCount))
            {
                var newUrl = _readyToCrawl.Dequeue();
                IPort <ICrawlRequestHandler> crawler = new Crawler(_processingUnit);
                var a = new Action <ICrawlRequestHandler>(c => c.Crawl(this, newUrl));
                crawler.Post(a);

                WorkingCrawlerCount++;
            }
        }
Example #7
0
        private void DispatchCrawlingTasks(IPort <ICrawlRequestHandler> reusableCrawler)
        {
            if (this.m_readyToCrawl.Count <= 0)
            {
                this.WorkingCrawlerCount--;
            }

            var url = this.m_readyToCrawl.Dequeue();

            reusableCrawler.Post(c => c.Crawl(this, url));

            while (this.m_readyToCrawl.Count > 0 &&
                   this.WorkingCrawlerCount < this.MaxCrawlerCount)
            {
                var newUrl = this.m_readyToCrawl.Dequeue();
                IPort <ICrawlRequestHandler> crawler = new Crawler();
                var a = new Action <ICrawlRequestHandler>(c => c.Crawl(this, newUrl));
                crawler.Post(a);

                this.WorkingCrawlerCount++;
            }
        }
Example #8
0
 public void StartCalculate(int maxValue)
 {
     this.maxValue = maxValue;
     counter       = new Counter();
     counter.Post(ct => ct.Count(this, currentValue, index));
 }
Example #9
0
 void ICountRequestHandler.Count(IPort <ICountResponseHandler> collector, int baseValue, int value)
 {
     collector.Post(c => c.OutCurrentTotal(this, baseValue + value));
 }
Example #10
0
 void IStatisticRequestHandelr.GetCrawledCount(IPort <IStatisticResponseHandler> requester)
 {
     requester.Post(r => r.ReplyCrawledCount(_urlContent.Count));
 }