예제 #1
0
 public void TrackJob(HtmlRecord record)
 {
     lock (jobSet)
     {
         jobSet.Add(record.recordid, record);
     }
 }
예제 #2
0
 public void Enqueue(HtmlRecord page)
 {
     lock (workQueue)
     {
         workQueue.Enqueue(page);
     }
 }
예제 #3
0
 public void EnqueueResult(HtmlRecord record)
 {
     lock (messageQueue)
     {
         Message message = new RecordMessage(record);
         messageQueue.Enqueue(PriorityLevel.Normal, message);
         allowSend.Set();
     }
 }
예제 #4
0
 public void EnqueueWork(HtmlRecord record)
 {
     lock (domainDictionary)
     {
         string key = record.domain.Host;
         if (domainDictionary.ContainsKey(key))
         {
             domainDictionary[key].Enqueue(record);
         }
         else
         {
             domainDictionary[key] = new Domain(key);
             domainDictionary[key].Enqueue(record);
             domainDictionary[key].InitTimer();
         }
         //PrintDomains();
     }
 }
예제 #5
0
        public void Update(object stateInfo)
        {
            if (workQueue.Count != 0)
            {
                HtmlRecord record = Dequeue();

                if (record.waitTime != 0)
                {
                    ThreadPool.QueueUserWorkItem(new WaitCallback(record.SleepThenUpdate));
                }
                else
                {
                    record.BeginUpdate();
                }
            }
            else
            {
                timer.Dispose();
                WebCrawler.Instance.RemoveDomain(this.domainName);
            }
        }
예제 #6
0
 public RecordMessage(HtmlRecord record)
 {
     htmlRecord = record;
 }