예제 #1
0
 protected override void RadiObradu()
 {
     while (radi)
     {
         Strana strana = procitaneStrane.Uzmi(typeof(StranaZaglavlja).Name);
         if (strana != null)
         {
             List <string> adreseOglasa = strana.DajAdreseOglasa();
             if (adreseOglasa != null)
             {
                 foreach (string adresa in adreseOglasa)
                 {
                     Strana stranaOglasa = new StranaOglasa(adresa);
                     procitaneStraneOglasa.Dodaj(stranaOglasa);
                     if (!radi)
                     {
                         return;
                     }
                 }
                 Dnevnik.PisiSaThredom("Obrađeno je zaglavlje: " + strana.Adresa);
             }
             else
             {
                 Dnevnik.PisiSaThredomGreska("Nije obrađena strana zaglavlja: " + strana.Adresa);
             }
         }
     }
 }
예제 #2
0
 public void Zaustavi()
 {
     Dnevnik.PisiSaThredom("Zaustavljanje threadova.");
     try
     {
         for (int i = 0; i < pisacZaglavlja.Length; i++)
         {
             pisacZaglavlja[i].Zaustavi();
         }
         for (int i = 0; i < citacZaglavlja.Length; i++)
         {
             citacZaglavlja[i].Zaustavi();
         }
         for (int i = 0; i < citacOglasa.Length; i++)
         {
             citacOglasa[i].Zaustavi();
         }
         //EventLogger.WriteEventInfo("Glavna obrada zaustavljena.");
         Dnevnik.PisiSaThredom("Glavna obrada zaustavljena (poslate komande za zaustavljanje.");
     }
     catch (Exception ex)
     {
         EventLogger.WriteEventError("Glavna obrada nije uspešno zaustavljena.", ex);
     }
 }
예제 #3
0
 /// <summary>
 /// Starter procedura za Thread. Ona poziva proceduru RadiObradu u kojoj se izvrsava petlja obrade.
 /// </summary>
 private void Obrada()
 {
     Dnevnik.PisiSaImenomThreda("Obrada pokrenuta.");
     try
     {
         RadiObradu();
     }
     catch (Exception ex)
     {
         Common.EventLogger.WriteEventError("Greska u RadiObradu().", ex);
     }
     Dnevnik.PisiSaThredom("Obrada završena.", true);
 }
예제 #4
0
        protected override void OnStop()
        {
            obrada.Zaustavi();
            obrada = null;

            string poruka = "Servis je zaustavljen.";

            EventLogger.WriteEventInfo(poruka);
            Dnevnik.PisiSaThredom(poruka);

            Dnevnik.Isprazni();
            base.OnStop();
        }
예제 #5
0
 private void Obrada()
 {
     Dnevnik.PisiSaThredom("Obrada pokrenuta.");
     try
     {
         while (radi)
         {
             ProcitajZaglavlja();
         }
     }
     catch (Exception ex)
     {
         EventLogger.WriteEventError("Greska pri pokretanju obrade zaglavlja", ex);
     }
     Dnevnik.PisiSaThredom("Obrada završena.");
     Dnevnik.Isprazni();
 }
예제 #6
0
 public void NeRadi()
 {
     lock (lokerRadi)
     {
         if (radi)
         {
             radi = false;
             lock (lokerListeStranaZaglavlja)
             {
                 Dnevnik.PisiSaThredom("Budim sve! (zaustavljanje-zaglavlja)");
                 Monitor.PulseAll(lokerListeStranaZaglavlja);
             }
             lock (lokerListeStranaOglasa)
             {
                 Dnevnik.PisiSaThredom("Budim sve! (zaustavljanje-oglasi)");
                 Monitor.PulseAll(lokerListeStranaOglasa);
             }
         }
     }
 }
예제 #7
0
        protected override void RadiObradu()
        {
            AutomobiliDBQueue red = new AutomobiliDBQueue();

            while (radi)
            {
                Strana strana = procitaneStrane.Uzmi(typeof(StranaOglasa).Name);
                if (strana != null)
                {
                    if (strana is StranaOglasa)
                    {
                        try
                        {
                            if (strana.Procitaj())
                            {
                                Common.Vozilo.Automobil auto = ((StranaOglasa)strana).Automobil;
                                if (auto != null)
                                {
                                    autoDB.Snimi(auto); // upis u bazu
                                    //autoDB.Snimi2(auto); // upis u bazu
                                    //red.Dodaj(auto);
                                    Dnevnik.PisiSaThredom("Dodat oglas u bazu: " + auto.ToString());
                                }
                            }
                            else
                            {
                                Dnevnik.PisiSaThredomGreska("Nisam uspeo da pročitam stranu. URL: " + strana.Adresa);
                            }
                        }
                        catch (Exception ex)
                        {
                            Common.Korisno.Korisno.LogujGresku("Nisam uspeo da dodam automobil u bazu. URL: " + strana.Adresa, ex);
                        }
                    }
                }
            }
            red.Snimi();
        }
예제 #8
0
 protected override void RadiObradu()
 {
     while (radi)
     {
         Strana strana = procitaneStrane.Uzmi();
         if (strana != null)
         {
             Common.Vehicle.Automobil auto = null;
             try
             {
                 if (strana.Procitaj())
                 {
                     auto = ((StranaOglasa)strana).Automobil;
                     if (auto != null)
                     {
                         //autoDB.Snimi(auto); // upis u bazu
                         //autoDB.Snimi2(auto); // upis u bazu
                         //red.Dodaj(auto);
                         //autoCSV.DodajMem(auto);
                         Dnevnik.PisiSaThredom("Dodat oglas u bazu: " + auto.ToString());
                     }
                 }
                 else
                 {
                     Dnevnik.PisiSaThredomGreska("Nisam uspeo da pročitam stranu. URL: " + strana.Adresa);
                 }
             }
             catch (Exception ex)
             {
                 EventLogger.WriteEventError(string.Format("Nisam uspeo da dodam automobil (br.ogl.{0}) u bazu.\nURL: {1}", auto.BrojOglasa, strana.Adresa), ex);
             }
         }
         else
         {
             EventLogger.WriteEventWarning("Dobijena null vrednost za stranu iz liste procitanih strana. Proveri zasto.");
         }
     }
 }
예제 #9
0
        private void ProcitajZaglavlja()
        {
            Common.BrojacPisacaZaglavlja.UvecajBrojAktivnihPisacaZaglavlja();
            uint   i;
            string adresa;

            i = brojac.Sledeci();
            try
            {
                adresa = Zaglavlje(i);
                Common.Http.Strana strana = new Common.Http.StranaZaglavlja(adresa);
                while (strana.Procitaj())
                {
                    procitaneStrane.Dodaj(strana);  // dodaje u deljenu listu u memoriju
                    if (!radi)
                    {
                        return;
                    }
                    i      = brojac.Sledeci();
                    adresa = Zaglavlje(i);
                    strana = new Common.Http.StranaZaglavlja(adresa);
                }
                Dnevnik.PisiSaThredom("Više nema zaglavlja za čitanje.");
                brojac.Ponisti();   // ponistavam brojac da krene iz pocetka
            }
            catch (Exception ex)
            {
                string porukaGreske = "Citac zaglavlja nije uspesno zavrsio.";
                EventLogger.WriteEventError(porukaGreske, ex);
                Dnevnik.PisiSaThredom(porukaGreske);
            }
            finally
            {
                Common.BrojacPisacaZaglavlja.SmanjiBrojAktivnihPisacaZaglavlja();
            }
        }
예제 #10
0
        protected override void OnStart(string[] args)
        {
            base.OnStart(args); // Da li je ovo potrebno?
            //pozovi thread
            obrada = new GlavnaObrada();
            try
            {
                string poruka = "Pokrecem servis.";
                //EventLogger.WriteEventInfo(poruka);
                Dnevnik.PisiSaThredom(poruka);

                obrada.Pokreni();

                poruka = "Servis je pokrenut.\n" + obrada.ToString();
                EventLogger.WriteEventInfo(poruka);
                Dnevnik.PisiSaThredom(poruka);
            }
            catch (Exception ex)
            {
                string poruka = "Nisam uspeo da pokrenem servis.";
                EventLogger.WriteEventError(poruka, ex);
                Dnevnik.PisiSaThredomGreska(poruka);
            }
        }
예제 #11
0
        public void Dodaj(Strana strana)
        {
            if (strana is StranaZaglavlja) // ako je strana zaglavlja
            {
                lock (lokerListe)
                {
                    while (Lista.Count == velicina) // provera da li je lista puna
                    {
                        lock (lokerRadi)
                        {
                            if (!radi)
                            {
                                return;
                            }
                        }
                        Dnevnik.PisiSaThredom("Uspavan (dodavanje). Br. el. " + Lista.Count);
                        Monitor.Wait(lokerListe);
                        Dnevnik.PisiSaThredom("Probuđen (dodavanje). Br. el. " + Lista.Count);
                    }
                    Lista.Enqueue(strana);
                    switch (disciplina)
                    {
                    case Disciplina.dPulse:
                        Dnevnik.PisiSaThredom("Budim slecećeg (dodavanje)! Br. el. " + Lista.Count);
                        Monitor.Pulse(lokerListe);
                        break;

                    case Disciplina.dPulseAll:
                        Dnevnik.PisiSaThredom("Budim sve (dodavanje)! Br. el. " + Lista.Count);
                        Monitor.PulseAll(lokerListe);
                        break;
                    }
                }
            }
            else if (strana is StranaOglasa)// ako je Strana oglasa
            {
                lock (lokerListeStranaOglasa)
                {
                    while (Lista.Count == velicina)
                    {
                        lock (lokerRadi)
                        {
                            if (!radi)
                            {
                                return;
                            }
                        }
                        Dnevnik.PisiSaThredom("Uspavan (dodavanje). Br. el. " + Lista.Count);
                        Monitor.Wait(lokerListeStranaOglasa);
                        Dnevnik.PisiSaThredom("Probuđen (dodavanje). Br. el. " + Lista.Count);
                    }
                    Lista.Enqueue(strana);
                    switch (disciplina)
                    {
                    case Disciplina.dPulse:
                        Dnevnik.PisiSaThredom("Budim sledećeg (dodavanje)! Br. el. " + Lista.Count);
                        Monitor.Pulse(lokerListeStranaOglasa);
                        break;

                    case Disciplina.dPulseAll:
                        Dnevnik.PisiSaThredom("Budim sve (dodavanje)! Br. el. " + Lista.Count);
                        Monitor.PulseAll(lokerListeStranaOglasa);
                        break;
                    }
                }
            }
            else // ako je nesto drugo baci exception
            {
                throw new Exception("Poslata strana nije ni strana oglasa ni strana zaglavlja.");
            }
        }
예제 #12
0
        public Strana Uzmi(string klasaKojaUzima)
        {
            Strana s = null;

            if (klasaKojaUzima == typeof(StranaOglasa).Name)
            {
                lock (lokerListeStranaOglasa)
                {
                    while (Lista.Count == 0)
                    {
                        lock (lokerRadi)
                        {
                            if (!radi)
                            {
                                return(null);
                            }
                        }
                        Dnevnik.PisiSaThredom("Uspavan (uzimanje). Br. el. " + Lista.Count);
                        Monitor.Wait(lokerListeStranaOglasa);
                        Dnevnik.PisiSaThredom("Probuđen (uzimanje). Br. el. " + Lista.Count);
                    }
                    s = (Strana)Lista.Dequeue();
                    switch (disciplina)
                    {
                    case Disciplina.dPulse:
                        Dnevnik.PisiSaThredom("Budim sledećeg (uzimanje)! Br. el. " + Lista.Count);
                        Monitor.Pulse(lokerListeStranaOglasa);
                        break;

                    case Disciplina.dPulseAll:
                        Dnevnik.PisiSaThredom("Budim sve (uzimanje)! Br. el. " + Lista.Count);
                        Monitor.PulseAll(lokerListeStranaOglasa);
                        break;
                    }
                }
                return(s);
            }
            else if (klasaKojaUzima == typeof(StranaZaglavlja).Name)
            {
                lock (lokerListe)
                {
                    while (Lista.Count == 0)
                    {
                        lock (lokerRadi)
                        {
                            if (!radi)
                            {
                                return(null);
                            }
                        }
                        Dnevnik.PisiSaThredom("Uspavan (uzimanje). Br. el. " + Lista.Count);
                        Monitor.Wait(lokerListe);
                        Dnevnik.PisiSaThredom("Probuđen (uzimanje). Br. el. " + Lista.Count);
                    }
                    s = (Strana)Lista.Dequeue();
                    switch (disciplina)
                    {
                    case Disciplina.dPulse:
                        Dnevnik.PisiSaThredom("Budim sledećeg (uzimanje)! Br. el. " + Lista.Count);
                        Monitor.Pulse(lokerListe);
                        break;

                    case Disciplina.dPulseAll:
                        Dnevnik.PisiSaThredom("Budim sve (uzimanje)! Br. el. " + Lista.Count);
                        Monitor.PulseAll(lokerListe);
                        break;
                    }
                }
                return(s);
            }
            else
            {
                throw new Exception("Nije prosledjen naziv klase koja uzima stranu.");
            }
        }
예제 #13
0
        private string DajPodatakIzDokumenta(ref HtmlAgilityPack.HtmlDocument dok, PodaciOAutomobilu tipPodatka, string[] nazivPodatka, string podrVred)
        {
            // odredjivanje stringa za pretragu
            string putanja = string.Empty;

            switch (tipPodatka)
            {
            case PodaciOAutomobilu.OpsteInformacije:
            case PodaciOAutomobilu.DodatneInformacije:
                putanja = "//*[@id=\"tbl-details\"]";
                break;

            case PodaciOAutomobilu.Sigurnost:
            case PodaciOAutomobilu.Oprema:
                putanja = string.Empty;
                break;

            case PodaciOAutomobilu.Opis:
                putanja = "//*[@id=\"tab_bg\"]/div[1]";
                break;

            case PodaciOAutomobilu.Kontakt:
                putanja = "//*[@id=\"details-agency\"]/div[1]";
                break;
            }
            if (putanja.Equals(string.Empty))
            {
                return(string.Empty);
            }

            // citanje cvora iz putanje
            HtmlAgilityPack.HtmlNodeCollection nodeColl;
            try
            {
                nodeColl = dok.DocumentNode.SelectNodes(putanja);
            }
            catch (Exception ex)
            {
                Dnevnik.PisiSaThredomGreska("Greska pri citanju HTML cvora na putanji " + putanja);
                return(string.Empty);
            }

            // odredjivanje podatka
            switch (tipPodatka)
            {
            case PodaciOAutomobilu.OpsteInformacije:
                if (nodeColl != null && nodeColl[0].ChildNodes != null)
                {
                    foreach (HtmlAgilityPack.HtmlNode node in nodeColl[0].ChildNodes)
                    {
                        if (node.ChildNodes.Count > 0)
                        {
                            foreach (string nazPod in nazivPodatka)
                            {
                                if (node.ChildNodes[1].InnerHtml.Trim().ToLower().Contains(nazPod.ToLower()))
                                {
                                    return(node.ChildNodes[3].InnerHtml.Trim());
                                }
                            }
                        }
                    }
                }
                else
                {
                    Dnevnik.PisiSaThredom("Nema cele tabele.");
                }
                return(podrVred);

                break;

            case PodaciOAutomobilu.DodatneInformacije:
                if (nodeColl != null && nodeColl[1].ChildNodes != null)
                {
                    foreach (HtmlAgilityPack.HtmlNode node in nodeColl[1].ChildNodes)
                    {
                        if (node.ChildNodes.Count > 0)
                        {
                            foreach (string nazPod in nazivPodatka)
                            {
                                if (node.ChildNodes[1].InnerHtml.Trim().ToLower().Contains(nazPod.ToLower()))
                                {
                                    return(node.ChildNodes[3].InnerHtml.Trim());
                                }
                            }
                        }
                    }
                }
                else
                {
                    Dnevnik.PisiSaThredom("Nema cele tabele.");
                }
                return(podrVred);

                break;

            case PodaciOAutomobilu.Sigurnost:
            case PodaciOAutomobilu.Oprema:
                break;

            case PodaciOAutomobilu.Opis:
                if (nodeColl != null && nodeColl.Count > 0)
                {
                    foreach (HtmlAgilityPack.HtmlNode node in nodeColl[0].ChildNodes)
                    {
                        if (node.ChildNodes != null && node.ChildNodes.Count > 1 &&
                            node.ChildNodes[1].InnerHtml.Trim().ToLower().Equals("opis"))
                        {
                            if (node.ChildNodes.Count >= 3)
                            {
                                return(node.ChildNodes[3].InnerHtml);
                            }
                        }
                    }
                }
                return(podrVred);

            case PodaciOAutomobilu.Kontakt:
                if (nodeColl != null && nodeColl.Count > 0)
                {
                    return(Common.Korisno.Korisno.TrimMultiline(nodeColl[0].InnerText));
                }
                break;
            }
            return(String.Empty);
        }