1 / 114

Oblikovanje programske potpore

Oblikovanje programske potpore. MODULARIZACIJA I OBJEKTNO USMJERENA ARHITEKTURA 2. dio. Objektno usmjerena arhitektura – 2. dio. Sadržaj prezentacije: Raspodijeljeni (engl. Distributed ) sustavi Arhitektura klijent – poslužitelj Posrednička arhitektura

jody
Download Presentation

Oblikovanje programske potpore

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Oblikovanje programske potpore MODULARIZACIJA I OBJEKTNO USMJERENA ARHITEKTURA 2. dio

  2. Objektno usmjerena arhitektura – 2. dio Sadržaj prezentacije: Raspodijeljeni (engl. Distributed ) sustavi Arhitektura klijent – poslužitelj Posrednička arhitektura Uslužno usmjerena arhitektura – SOA (engl. Servvice oriented architecture) Arhitektura sustava zasnovanih na komponentama Izvor: T.C.Lethbridge, R.Laganiere: Object-Oriented Software Engineering, 2nd ed., McGraw-Hill, 2005.

  3. Objektno usmjerena arhitektura – 2.dio Raspodijeljeni (engl. Distributed ) sustavi

  4. Raspodijeljeni sustavi • Značajke raspodijeljenih sustava: • Obrada podataka i izračunavanja obavljaju odvojeni programi. • Uobičajeno je da su ti odvojeni programi na odvojenom sklopovlju (računalima, čvorovima, stanicama). • Odvojeni programi međusobno komuniciraju (kooperiraju) po računalnoj mreži. • Primjer raspodijeljenog sustava: • Klijent - poslužitelj: • Poslužitelj (engl. server) • Program koji dostavlja uslugu drugim programima koji su spojeni na njega preko komunikacijskog kanala. • Klijent: • Program koji pristupa poslužitelju (ili više njih) tražeći uslugu. • Poslužitelju mogu pristupiti mnogi klijenti simultano.

  5. Raspodijeljeni sustavi – neki primjeri • P2P (Peer-to-Peer) • Svaki čvor u sustavu ima jednake mogućnosti i odgovornosti (čvor je istovremeno poslužitelj i klijent). • Snaga obrade podataka i izračunavanja u P2P sustavu ovisi o pojedinim krajnjim čvorovima, a ne o nekom skupnom radu čvorova. • Afinitetna (društvena) mreža (engl. affinity communities) • Jedan korisnik se povezuje s drugim korisnikom u cilju razmjene informacija ((MP3, video, slike itd.). • Kolaborativno izračunavanje(engl. collaborative computing) • Neiskorišteni resursi (CPU vrijeme, prostor na disku) mnogih računala u mreži kombiniraju se u izvođenju zajedničkog zadatka (GRID computing, SETI@home, …). • Instant Messaging • Izmjena tekstovnih poruka između korisnika u stvarnom vremenu.

  6. Raspodijeljeni sustavi - primjer Dijagram objekata s programskim komponentama klijenti na poslužitelju traže adrese drugih klijenata korišteno (uporabljeno) sučelje klijenti izmjenjuju poruke implementirano sučelje UML oznaka Primjer raspodijeljenog sustava u kojem klijenti preko poslužitelja doznaju za svoje interese te zatim komuniciraju izravno.

  7. Problemi u oblikovanju raspodijeljenih sustava: • Kako se smještaju i pokreću funkcije poslužitelja ? • Kako se definiraju i šalju parametri između klijenta i poslužitelja ? • Kako se rukuje neuspjesima (pogreškama) u komunikaciji ? • Kako se postavlja i rukuje sa sigurnošću ? • Kako klijent pronalazi poslužitelja ? • Koje strukture podataka koristiti i kako rukovati s njima ? • Koja su ograničenja u paralelnom radu dijelova raspodijeljenog sustava ? • Kako se uopće skupina komponenata usaglašava oko zajedničkih pitanja ?

  8. Objektno usmjerena arhitektura – 2.dio Arhitektura klijent – poslužitelj Ciljevi daljnje prezentacije Detaljnije razmatranje aktivnosti klijenata i poslužitelja. Metoda oblikovanja arhitekture klijent-poslužitelj temeljena na ponovnoj i višestrukoj uporabi komponenata (engl. reuse).

  9. Klijent – poslužitelj: sekvenca aktivnosti • Poslužitelj započinje s radom. • Poslužitelj aktivira slušanje i čeka na spajanje klijenta (poslužitelj sluša). • Klijenti započinju s radom i obavljaju razne operacije, • Neke operacije traže zahtjeve (i odgovore) s poslužitelja. • Kada klijent pokuša spajanje na poslužitelja, poslužitelj mu to omogući (ako poslužitelj želi). • Poslužitelj čeka na poruke koje dolaze od spojenih klijenata. • Kada pristigne poruka nekog klijenta poslužitelj poduzima akcije kao odziv na tu poruku. • Klijenti i poslužitelj nastavljaju s navedenim aktivnostima sve do odspajanja ili prestanka rada.

  10. Poslužitelj u komunikaciji s dva klijenta početak rada i slušanje spajanje šalje poruku šalje odgovor odspajanje prestanak slušanja

  11. Alternative klijent – poslužitelj arhitekture • Postoji jedan program na jednom računalu koji obavlja sve. • Računala nisu spojena u mrežu već svako računalo obavlja svoj posao odvojeno. • Ostvaruje se neki drugi mehanizam (osim klijent-poslužitelj) kako bi računala u mreži razmjenjivala informacije. Npr. jedan program upisuje u repozitorij podataka a drugi čita (baze podataka, oglasna ploča, …).

  12. Prednosti klijent – poslužitelj arhitekture • Posao se može raspodijeliti na više računala (strojeva). • Klijenti udaljeno pristupaju funkcionalnostima poslužitelja. • Klijent i poslužitelj mogu se oblikovati odvojeno. • Oba entiteta mogu biti jednostavnija. • Svi podaci mogu se držati na jednom mjestu (na poslužitelju). • Obrnuto, podaci se mogu distribuirati na više udaljenih klijenata i poslužitelja. • Više klijenata može simultano pristupiti poslužitelju. • Klijenti mogu ući u natjecanje (kompeticiju) za uslugu poslužitelja (a i obrnuto).

  13. Primjeri klijent – poslužitelj sustava • The World Wide Web • E-mail • Network File System • Transaction Processing System • Remote Display System • Communication System • Database System • Usluge u oblaku

  14. Funkcionalnosti poslužitelja(UML dijagram stanja) događaj • Poslužitelj se inicijalizira. • Započinje slušati klijentska spajanja. • Rukuje slijedećim tipovima događaja koje potiču klijenti: • Prihvaća spajanje • Odgovara na poruke • Rukuje odspajanjem klijenta • Može prestati slušati. • Mora čisto završiti rad. poslužitelj kao cjelina za svako spajanje: a) rukuje spajanjem, b) reagira na poruku

  15. Funkcionalnosti klijenta(UML dijagram aktivnosti) • Klijent se inicijalizira. • Inicijalizira spajanje na poslužitelja. • Interakcija s korisnikom i šalje poruke poslužitelju. • Rukuje slijedećim tipovima • događaja koje potiče poslužitelj: • Odgovara na poruke. • Rukuje odspajanjem poslužitelja. • Mora čisto završiti rad. • (Dijagram aktivnosti nema asinkrone događaje koji uvjetuju prijelaze) interakcija s poslužiteljem interakcija s korisnikom Paralelne aktivnosti

  16. Tanki i debeli klijent • Sustavtankog klijenta(engl.Thin-client)(a) • Klijent je oblikovan da bude što je moguće više mali i jednostavniji. • Većina posla obavlja se na poslužiteljskoj strani.. • Oblikovnu strukturu klijenta i izvršni kod jednostavno se preuzima preko računalne mreže. • Sustav debelog klijenta(engl. Fat-client) (b) • Što je moguće više posla delegira se klijentima. • Poslužitelj može rukovati s više klijenata. (a) (b) lagano izračunavanje klijent poslužitelj obilno izračunavanje

  17. Komunikacijski protokoli • Poruke koje klijenti šalju poslužitelju formiraju jedan jezik. • Poslužitelj mora biti programiran da razumije taj jezik. • Poruke koje poslužitelj šalje klijentima također formiraju jedan jezik. • Klijenti moraju biti programirani da razumiju taj jezik. • Kada klijent i poslužitelj komuniciraju oni razmjenjuju poruke na ta dva jezika. • Ta dva jezika i pravila konverzacije čine zajedničkim imenom protokol.

  18. Internet protokoli – skupina TCP/IP • Internet Protocol (IP) • Određuje put poruka (paketa, "datagrams") od jednog računala do drugog temeljem njihovih adresa u formatu IPv4 ili IPv6. • Transmission Control Protocol (TCP) • Nalazi se između primjenskog programa ("aplikacije") i IP protokola.. • Razbija veliku poruku na manje dijelove i šalje dijelove uporabom IP protokola. • Osigurava da je poruka uspješno primljena (pojedini IP paketi ispravno sastavljeni). TCP je pouzdan protokol (UDP- User Datagram Protocol nije). • Svako računalo (čvor) u mreži ima jedinstvenuIP addresui ime(host name). Preslikavanje obavlja usluga DNS (engl. Domain Name Service). • Nekoliko poslužitelja mogu raditi na jednom čvornom računalu u mreži. . • Svaki poslužitelj na računalu je identificiran preko jedinstvenog broja ulaznog porta (engl. port number) u rasponu 0 to 65535. • Kako bi započeo komunikaciju s poslužiteljem klijent mora znati host namei port number • Brojevi ulaznih portova 0 – 1023 su rezervirani (npr. port 80 za Web poslužitelj).

  19. Oblikovanje klijent-poslužitelj arhitekture • Specificiraj temeljne poslove poslužitelja i klijenta. • Odredi kako će se posao raspodijeliti (tanki nasuprot debelog klijenta). • Oblikuj detalje skupa poruka koje se razmjenjuju (komunikacijski protokol). • Oblikuj mehanizme (što se mora dogoditi) prilikom: • Inicijalizacije • Rukovanja spajanjima. • Slanja i primanja poruka. • Završetka rada. • U oblikovanju koristi princip “Uporabi postojeće gotove komponente” (princip oblikovanja progr. potpore br. 6)

  20. Oblikovanje temeljem iskustva drugih • Inženjeri koji oblikuju programsku potporu trebaju izbjegavati razvoj programske potpore koja je već bila razvijena. • Tipovi ponovnog korištenja (engl. reuse): • Ponovno koristi ekspertizu (posebna znanja). • Ponovno koristi standardna oblikovanja i algoritme. • Ponovno koristi knjižnice razreda ili procedura. • Ponovno koristi "snažne" naredbe ugrađene u programski jezik ili operacijski sustav (npr. Java: try – catch rukovanje iznimkama). • Ponovno koristi radne okvire (engl. frameworks). • Ponovno koristi cijela primjenska rješenja (a.k.a. aplikacije).

  21. Radni okviri: Podsustavi za ponovno korištenje • Radni okvir(engl.Framework) je učestalo korišten dio programske potpore koji implementira generičko (opće ili zajedničko) rješenje problema. • Osigurava opća (zajednička) sredstva koja se mogu uporabiti u različitim primjenskim programima (aplikacijama). • Princip: • Primjenski programi koji rade različite, ali na neki način povezane stvari imaju slične oblikovne obrasce.

  22. Objektno usmjereni radni okviri • U objektno usmjerenoj paradigmi radni okvir se sastoji iz knjižnice razreda. • Radni okvir dodatno sadrži: • Primjensko sučelje (engl Application programming interface – API) definirano je kao skup svih javnih (engl. public) metoda tih razreda. • Neki od razreda u radnom okviru biti će apstraktni (operacije se moraju implementirati u podrazredima).

  23. Radni okviri i linije proizvoda (engl. product lines) • Linije proizvoda (ili porodica proizvoda) je skup svih produkata izrađenih na zajedničkoj osnovnoj tehnologiji. • Različiti produkti u liniji proizvoda imaju različite značajke kako bi zadovoljili različite segmente tržišta. • Npr. “demo”, “pro”, “lite”, “enterprise” i sl. verzije. • Lokalizirane verzije su također linije proizvoda. • Programska tehnologija zajednička svim proizvodima u liniji proizvoda uključena je u radni okvir (engl. framework). • Svaki proizvod izrađen je temeljem radnog okvira u kojem su popunjena odgovarajuća prazna mjesta. • Iz jednog radnog okvira može se generirati više linija proizvoda.

  24. Vrste radnih okvira • Horizontalni radni okvir osigurava veći broj općih i zajedničkih sredstava koja mogu koristiti mnogi primjenski programi (aplikacije). • Vertikalni radni okvir (primjenski) je mnogo cjelovitiji ali još uvijek traži popunu nekih nedefiniranih mjesta kako bi se prilagodio specifičnoj primjeni. usluge koje nudi radni okvir primjenski program horizontalni radni okvir vertikalni radni okvir dio koda koji se mora dodati

  25. Primjeri radnih okvira • Radni okvir za rukovanje plaćama. • Radni okvir za rukovanje čestih putnika (engl. frequent flyer) u avioprometu. • Radni okvir za rukovanje čestih kupaca. • Radni okvir za upis i registraciju predmeta na fakultetu. • Radni okvir za komercijalno web sjedište (e-dućan). • Radni okvir za mrežnu uslugu XYZ .

  26. Uporaba objektnog klijent-poslužitelj radnog okvira (engl. Object Client-Server Framework -OCSF): • OCSF = skup apstraktnih i konkretnih razreda • Postupak uporabe: • Ne mijenjati apstraktne razrede u OCSF. • Kreirati podrazrede. • Konkretizirati metode u podrazredima. • Nanovo definirati (engl. override) neke metode u podrazredima. • Napisati kod koji kreira instance i inicira akcije. • Izvorni kod OCSF u Javi nalazi se na web stranicama knjige (potrebno proučiti): • T.C.Lethbridge, R.Laganiere: Object-Oriented Software Engineering, 2nd ed., McGraw-Hill, 2005.

  27. OCSF– tri razreda s istaknutim operacijama nula ili više instanci posebne oznakedijele operacije u kategorije

  28. Uporaba OCSF • Programski inženjeri u uporabi OCSF nikada ne modificiraju tri navedena razreda. • Neke implementirane (konkretne) metode su rigorozno provjerene (nadamo se) i nisu predviđene za redefiniranje. • Umjesto modifikacije izvornih razreda treba: • Kreirati podrazrede apstraktnih razreda u radnom okviru i implementiraj apstraktne metode (učiniti ih konkretnima). • Redefiniratineke metode posebno označene u kategorije “hook” i “slot” (vidi raniju sliku apstraktnih razreda) koje su eksplicitno namijenjene da budu redefinirane. • Zvati javne metode koje uključuje radni okvir. Te metode su usluge koje pruža radni okvir (primjensko sučelje – API).

  29. Klijentska strana - apstraktan razred:AbstractClient

  30. Klijentska strana - AbstractClient • Paralelne aktivnosti na klijentskoj strani • - Čekanje na interakciju s korisnikom i odgovor na interakciju. • - Čekanje na poruku od poslužitelja i reakcija kada poruka stigne. • Ove paralelne aktivnosti izvode se kao višestruke niti izvođenja (dretve), engl. threads • Bez toga mehanizma, kada bi klijent čekao na jednu vrst ulaza ne bi mogao raditi ništa drugo niti primati druge vrste ulaza. • U Javi dretva je objekt razreda Thread i uvijek se mora stvoriti: • moja_dretva = new Thread(); • Pokreće se pozivom moja_dretva.start() metode koja dalje aktivira run() metodu unutar koje su funkcionalnosti dretve. To je ustvari "main()" metoda za dretvu.

  31. Paralelne dretve/niti izvođenja – klijentska strana dretva nastala kreiranjem objekta klijenta dretva čitanja clientReader kreirana s openConnection() dretve kreirane s clientConnected() dretva kreirana s listen()

  32. Klijentska strana - AbstractClient • Iz razreda AbstractClientmoraju se izvesti podrazredi. • Podrazred mora osigurati implementaciju operacije:handleMessageFromServer() navedenu u skupu <<slot>> oznake. Metoda je zadužena za odgovarajuću akciju po primitku poruke od poslužitelja. • Kreirani objekt podrazreda AbstractClient se spaja i šalje poruke poslužitelju (prva dretva). • Za čitanje poruka postoji posebna dretva clientReader - vidi sekvencijski dijagram. Dretva započinje izvođenje nakon što upravljačka metoda openConnection() pozove clientReader.start() dretve koja pokreće njenu run() metodu. • run()metoda sadrži petlju koja se izvodi tijekom životnog ciklusa dretve (prima poruke i zove metodu za rukovanje s porukama).

  33. Klijentska strana - AbstractClient • Konstruktor zaAbstractClient: • public AbstractClient(String host, int port) • { • // inicijalizacija host i port varijabli • // koje definiraju poslužitelja • this.host = host; • this.port = port; • } • // u pozivu konstruktora postoje konkretni host • // i port • // host i port mogu se postavljati i na drugi • // način – vidi kasnije

  34. Kreiranje podrazredaAbstractClient • public class MyClient extends AbstractClient { • . . . // varijable instanci – vidi kasnije • // konstruktor objekta MyClient – prva dretva • public MyClient(String host, int port) { super(host, port); // iz superrazreda openConnection();// upravljačka metoda } . . . // druge metode instance // obvezno konkretizirana metoda public void handleMessageFromServer(Object msg) { . . . // implementacija obrade poruke } }

  35. Klijentska strana – metoda openConnection() • // final = ne redefinirati • final public void openConnection(){ • // kreira objekt tipa Socketza vezu prema serveru • // parametri hosti port servera su u konstruktoru • // ili se mogu postaviti posebnim metodama • clientSocket= new Socket(host, port); • // kreira objekte output i input • // koji šalju i čitaju preko objekta clientSocket • output = new • ObjectOutputStream(clientSocket.getOutputStream()); • input = new • ObjectInputStream(clientSocket.getInputStream()); • // getOutputStream() i getInputStream() su definirane • // u razredu Socket i zovu se preko clientSocket

  36. Metoda openConnection()- nastavak • . . . • // kreiraj dretvu za čitanje poruka poslužitelja • // varijabla clientReaderreferencira tu dretvu • clientReader = new Thread(this); • // makni zabranu • readyToStop = false; • // startaj dretvu koja aktivira run metodu • clientReader.start(); • } • //start() aktivira run() metodu dretve • // koja čeka na poruku poslužitelja i predaje • // poruku metodi handleMessageFromServer() • // za ovu run() metodu čitanja poruke slijedi • // nastavak na slijedećoj slici

  37. Klijentska strana – run()prijam poruke final public void run(){// ne redefinirati Object msg; // varijabla za poruku try{ while(!readyToStop){ • // dohvat poruke s poslužitelja i poziv metode • // za obradu poruke • // dretva čeka poruku na slijedećoj naredbi • msg = input.readObject(); • // i kada stigne zove metodu • // handleMessageFromServer() za obradu poruke if (!readyToStop) { handleMessageFromServer(msg); } } } • ________________________________________________________ • U ovom skraćenom prikazu izbačen je dio try-catch za manipulaciju iznimkama: catch(Exception ex) {}

  38. Klijentska strana – slanje poruke i završetak • Ostale <<control>> operacije • public void sendToServer(Object msg) { • output.writeObject(msg); } • // writeObject je definiran u razredu • // ObjectOutputStream • // output preko clientSocket zna kome šalje • final public void closeConnection() { • readyToStop = true; • closeAll(); } • // closeAll() je implementirana u radnom okviru • _________________________________________________________ • U ovom skraćenom prikazu izbačen je catchdio u bloku try- • catch za manipulaciju iznimkama: catch(Exception ex) {}

  39. Privatni dijelovi razreda AbstractClient • Osobe zadužene za oblikovanje programske potpore ne moraju znati te detalje, ali može pomoći (implementacija na slijedećoj slici). • Varijable instanci: • clientSocket (tipa Socket) koja drži sve informacije o vezi s poslužiteljem (kanal komunikacije). • output i input tipa ObjectOutputStreamiObjectInputStreamkoji se koriste za slanje i prijam objekata msg(tipaObject)uporabom varijableclientSocket. • Dretva clientReadertipaThread. Dretva započinje kada openConnectionpozovestart()koja inicirarun(). • Varijabla boolean readyToStop za signalizaciju zaustavljanja dretve čitanja poruka servera (vidi raniji prikaz run() metode). • Sve su deklarirane prije uporabe (vidi slijedeću sliku)

  40. Privatni dijelovi razreda AbstractClient • Varijable instance (sve su private): • // kanal za komunikaciju operacijskog sustava • private Socket clientSocket; • // nizovi za manipulaciju izlaza – ulaza • private ObjectOutputStream output; • private ObjectInputStream input; • // dretva čitanja • private Thread clientReader; • // indikacija kada dretva može završiti • private boolean readyToStop; • // poslužiteljevo ime i broj porta • private String host; • private int port;

  41. Javno (engl. public) sučeljeAbstractClient • Konstructor AbstractClient()pri stvaranju objekta inicijalizira host i port varijable poslužitelja na koje će se klijent spojiti. • Upravljačke (<<control>>) metode • openConnection()(spoj na poslužitelja, koristi host i port varijable koje inicijalizira konstructor ili preko metoda setHost(),setPort() • sendToServer()( šalje poruku koja može biti bilo koji objekt). • closeConnection()(zaustavlja rad dretve u petlji i završava). • Pristupne (<<accessor>>)methode(daju info ili mijenjaju vrijednost): • isConnected()(ispituje da li je klijent spojen) • getHost()(ispituje koji host – server je spojen) • setHost()(omugućuje promjenu hosta - dok je klijent odspojen) • getPort()(ispituje na koji port servera je klijent spojen) • setPort()(omogućuje promjenu porta dok je klijent odspojen). • getInetAddress()(dobavlja neke detaljnije informacije o vezi)

  42. Callback ( <<hook>>) metodeu AbstractClient • Metode koje se mogu redefinirati (ako podrazred ima namjeru poduzeti neke akcije kao odziv na događaj) • “Callback” metode označene su kao skupina «hook». • connectionEstablished() (aktivira se uspostavom veze s poslužiteljem) • connectionClosed()(aktivira se nakon završetka veze) • connectionException() (aktivira se kada nešto pođe krivo, npr. poslužitelj prekida vezu). Callback funkcijesu one koje se ne zovu izravno. (npr. u C++ zovu se preko pokazivača). Najčešće se callback funkcije zovu kao odziv na neki asinkroni događaj (sva moderna grafička korisnička sučelja zasnovana su na callback funkcijama, npr. odziv na miša).

  43. Callback metode u AbstractClient OCSF obično ne implementira te metode. Korisnik ih može redefinirati: protected void connectionEstablished() {} // Aktivira se kad je uspostavljena veza // “Default” implementacije ne čini ništa // Može se ponovo redefinirati ako potrebno // slično za završetak veze protected void connectionClosed() {} // kao i za obradu iznimke protected void connectionException( Exception exception) {}

  44. Sažetak:Uporaba razredaAbstractClient • Kreiraj podrazred od AbstractClient • U podrazredu implementirajhandleMessageFromServer()<<slot>>metodu • Napiši kod koji: • Kreira instancu klijenta (podrazreda, start prve dretve) • Pozove openConnection()(start druge dretve) • Šalje poruku poslužitelju uporabom sendToServer() metode • Implementiraj connectionEstablished() callback metodu (npr. izvijesti korisnika) • ImplementirajconnectionClosed() callback(npr. izvijesti korisnika o čistom završetku veze). • ImplementirajconnectionException() callback(npr. kao odziv na kvar na mreži).

  45. Poslužiteljska strana

  46. Poslužiteljska strana • Poslužiteljska strana sadrži dva razreda pa je nešto složeniji rad. • Potrebne su najmanje dvije niti izvođenja (dretve): • - jedna koja sluša novo spajanje klijenta, • - druga (ili više) koja rukuje vezama s klijentima (vidi sekvencijski dijagram). • Instanca razreda AbstractServer – • Sluša novo spajanje klijenta. • Rukuje s porukom. Ne šalje poruku pojedinom klijentu (to čini instanca od ConnectionToClient), ali može poslati istu poruku svim spojenim klijentima metodom sendToAllClients(). • Jedna ili više instanci razreda ConnectionToClient– • Rukuje komunikacijama s klijentima i šalju im poruke.

  47. Paralelne dretve/niti izvođenja - poslužiteljska strana dretve kreirane kada i objekti od ConnectionToClient dretva connectionListener kreirana s listen()

  48. AbstractServer

  49. Javno (engl. public) sučeljeAbstractServer • ConstructorAbstractServer(),stvara objekt s brojem porta na kojem poslužitelj sluša. Kasnije se može promijeniti sa setPort()metodom. • Upravljačke(<<controll>>) metode: • listen() (kreira varijablu/objekt serverSocketkoja će slušati na portu specificiranom konstruktorom, kreira i inicira dretvu, a run() metoda dretve čeka na spajanje klijenta) • stopListening() (signalizira run() metodi da prestane slušati. Spojeni klijenti i dalje komuniciraju). • close() (kao stopListening()ali odspaja sve klijente) • sendToAllClients() (šalje poruku svim spojenim klijentima, jedina metoda iz ove skupine koja se može redefinirati (nije final). • Pristupne(<<accessor>>)metode (ispituju stanje servera): • isListening() (vraća da li poslužitelj sluša) • getClientConnections() (vraća niz instanci razreda za vezu s klijentima ConnectionToClient, može se iskoristiti za neki rad sa svim klijentima) • getPort()(vraća na kojem portu poslužitelj sluša) • setPort() (koristi se za slijedeći listen(), nakon zaustavljanja) • setBacklog()(postavlja veličinu repa čekanja klijenata na "portu")

  50. Ostale metode uAbstractServer • Metoda koja se mora implementirati (najvažniji dio koda): • handleMessageFromClient()(argumenti su primljena poruka te tko šalje - instanca razreda ConnectionToClient).. • Callback metode koje se mogu redefinirati (aktiviraju se kao odziv na neki događaj). • serverStarted()(aktivira se kada poslužitelj započinje prihvaćati spajanja). • clientConnected()(aktivira se kada se novi klijent spoji) • clientDisconnected()(aktivira se kada poslužitelj odspoji klijenta, argument je instanca razreda ConnectionToClient. • clientException()(aktivira se kada se klijent sam odspoji ili kada nastupi kvar u mreži) • serverStopped() (aktivira se kada poslužitelj prestane prihvaćati povezivanje s klijentima a kao rezultat stopListening()). • listeningException()(aktivira se kada poslužitelj prestane slušati zbog nekog kvara). • serverClosed()(aktiivraa se nakon završetka rada poslužitelja).

More Related