public DMS.JobProgressInfo GetProgressInfo(DMS.Job job)
        {
            // Downcast der Job- Referenz in eine Referenz vom Typ PageDownloadJob
            PickLinksJob pJob = job as PickLinksJob;

            Debug.Assert(pJob != null);

            DMS.JobProgressInfo pinfo = new DMS.JobProgressInfo(pJob.JobId, pJob.JobState);
            return(pinfo);
        }
        public void doIt(DMS.Job currentJob)
        {
#if (DEBUG)
            Debug.Assert(System.Text.RegularExpressions.Regex.IsMatch("href   =\"http://www.mkoit.de\"", HRefRegEx));
            Debug.Assert(System.Text.RegularExpressions.Regex.IsMatch("href = http://www.mkoit.de", HRefRegEx));
            Debug.Assert(System.Text.RegularExpressions.Regex.IsMatch("href=http://www.mkoit.de", HRefRegEx));

            Debug.Assert(System.Text.RegularExpressions.Regex.IsMatch("href=\"http://www.mkoit.de\"", HRefRegEx));

            //Debug.Assert(!System.Text.RegularExpressions.Regex.IsMatch("href=\"https:/www.mkoit.de\"", HRefRegEx));
#endif


            // Downcast in PickLinksJob
            PickLinksJob pJob = currentJob as PickLinksJob;
            Debug.Assert(pJob != null);

            int NewDeept = pJob.ActDeept - 1;

            // Alle Urls aus dem HTML- Text extrahieren
            System.Text.RegularExpressions.Regex regEx = new System.Text.RegularExpressions.Regex(
                HRefRegEx,
                RegexOptions.IgnoreCase | RegexOptions.Compiled);

            MatchCollection mc = regEx.Matches(pJob.HtmlText);
            Debug.WriteLine("PC: Deept= " + pJob.ActDeept + " JobId= " + pJob.JobId + " #Urls = " + mc.Count);

            // Iteration durch alle Treffer des regulären Ausdrucks
            foreach (System.Text.RegularExpressions.Match match in mc)
            {
                // Für jede Url einen neuen PageDownload Job erzeugen
                Debug.Assert(pageDownloadQueue != null);

                string Url;
                if (GetInternetLink(match.Captures[0].Value, out Url))
                {
                    PageDownloadJob downloadJob = new PageDownloadJob();

                    // Job wird nach der Fertigstellung automatisch entfernt
                    downloadJob.OneWay = true;
                    downloadJob.JobId  = pageDownloadQueue.NewJobId();
                    downloadJob.Url    = Url;

                    downloadJob.ActDeept = NewDeept;

                    // Rückkopplung: Herunterladen der Seite, auf die der Link aus der aktuellen verweist
                    pageDownloadQueue.pushJob(downloadJob);
                }
            }

            pJob.SetFinished();
        }
        public void doIt(DMS.Job currentJob)
        {
            // Downcast der Job- Referenz in eine Referenz vom Typ PageDownloadJob
            PageDownloadJob downloadJob = currentJob as PageDownloadJob;

            Debug.Assert(downloadJob != null);
            Debug.WriteLine("PD: Deept= " + downloadJob.ActDeept + " JobId= " + downloadJob.JobId + " Url=" + downloadJob.Url);

            try
            {
                // Prüfen, ob die max. Tiefe beim crawlen erreicht wurde
                if (downloadJob.ActDeept <= 0)
                {
                    if (EventEndOfCrawl != null)
                    {
                        lock (Visited)
                        {
                            EventEndOfCrawl(
                                new PageDownloadJobProgressInfo(
                                    downloadJob.Url,
                                    Visited.Count,
                                    downloadJob.JobId,
                                    downloadJob.JobState));
                        }
                    }
                    return;
                }

                // Prüfen, ob Seite bereits besucht wurde
                if (Visited.Any(r => r == downloadJob.Url))
                {
                    return;
                }

                // Seite herunterladen
                System.Net.WebRequest  request  = null;
                System.Net.WebResponse response = null;

                System.Net.NetworkCredential cred = new NetworkCredential(
                    //System.Security.Principal.WindowsIdentity.GetCurrent().Name,
                    "Administrator",
                    "schulung");

                //System.Net.WebProxy myProxy = new System.Net.WebProxy("http://10.7.252.34:80", true);
                //myProxy.Credentials = cred;


                request = System.Net.WebRequest.Create(downloadJob.Url);
                //request.Proxy = myProxy;
                response = request.GetResponse();

                // Seite als besucht verzeichnen
                Visited.Add(downloadJob.Url);

                // Inhalt der Seite auslesen

                System.IO.StreamReader reader = new System.IO.StreamReader(response.GetResponseStream());
                string HtmlText = reader.ReadToEnd();

                // Neuen PickLinJob in die Queue von PickLinks stellen
                PickLinksJob pickJob = new PickLinksJob();

                // Job wird nach der Fertigstellung automatisch entfernt
                pickJob.OneWay   = true;
                pickJob.JobId    = pickLinksBp.NewJobId();
                pickJob.HtmlText = HtmlText;
                pickJob.ActDeept = downloadJob.ActDeept;

                pickLinksBp.pushJob(pickJob);
            }
            catch (Exception ex)
            {
                Debug.WriteLine("Fehler beim Herunterladen: " + ex.Message);
            }
            finally
            {
                downloadJob.SetFinished();
            }
        }