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); } } } }
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); } }
/// <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); }
protected override void OnStop() { obrada.Zaustavi(); obrada = null; string poruka = "Servis je zaustavljen."; EventLogger.WriteEventInfo(poruka); Dnevnik.PisiSaThredom(poruka); Dnevnik.Isprazni(); base.OnStop(); }
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(); }
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); } } } }
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(); }
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."); } } }
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(); } }
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); } }
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."); } }
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."); } }
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); }