Semestrální práce (2004/2005):

Vytvoøte systém pro distribuci zpráv zpravodajskou agenturou.

Základní úloha:

Vytvoøte CORBA server, který bude zaji¹»ovat distribuci zpráv zpravodajskou agenturou skrz jednotlivé zpravodajské kanály, jednoduchého klienta pro pøíjem zpráv a administrátorskou konzoli pro správu serveru a rozesílání zpráv.

Server bude implementovat nìkolik druhù rozhraní:
  1. RozhranĂ­ zastupujĂ­cĂ­ server jako celek. Referenci na implementaci tohoto rozhranĂ­ server zaregistruje u sluÂľby Naming Service.
    Operace tohoto rozhraní budou umo¾òovat:
  2. Rozhraní reprezentující jeden zpravodajský kanál. Od tohoto rozhraní bude v jednom procesu více objektù. Toto rozhraní bude poskytovat operace pro:
  • RozhranĂ­ urèenĂ© pro zprávu serveru. Toto rozhranĂ­ je urèenĂ© pouze pro pouÂľitĂ­ administrátorskou konzolĂ­. Toto rozhranĂ­ bude taktĂ©Âľ registrovanĂ© u Naming Service. Toto rozhranĂ­ bude poskytovat operace pro:
  • Technická poznámka: Toto rozhranĂ­ mù¾e bĂ˝t definováno jako roz¹íøenĂ­ rozhranĂ­ (1). Administrátorská konzole bude pøedev¹ím vyu¾ívat administrátorskĂ© rozhranĂ­ serveru, ale bude implementovat i svĂ© CORBA rozhranĂ­. NenĂ­ nutnĂ© k nĂ­ vytváøet sloÂľitĂ© uÂľivatelskĂ© rozhranĂ­, jednoduchĂ© textovĂ© rozhranĂ­ vyu¾ívajĂ­cĂ­ standardnĂ­ vstup a vĂ˝stup plnì postaèí.
    1. Administrátorská konzole musí poskytovat operace pro:
    2. Administrátorská konzole dále bude implementovat CORBA rozhraní, kterým ji server bude informovat o dùle¾itých událostech. Toto rozhraní bude zejména pøijímat události o:
    Hlavními úkoly klienta je pøihlásit se do vybraných zpravodajských kanálù a pøijímat z nich zprávy. Pro implementaci klienta staèí té¾ velmi jednoduché u¾ivatelské rozhraní pomocí standardního vstupu a výstupu. Klient bude také implementovat CORBA rozhraní, které bude umo¾òovat následující operace:
    O¹etøete v serveru pøípad, kdy klient pøestane pøijímat CORBA volání (byl ukonèen) ani¾ by se odhlásil ze zpravodajských kanálù - tento fakt by nemìl výraznì ovlivnit zasílání zpráv ostatním klientùm. Opakovanou chybu pøi doruèení je mo¾né pova¾ovat za ¾ádost o odhlá¹ení.

    Roz¹íøená úloha (varianta A - roz¹íøení funkcionality):

    Roz¹iøte základní úlohu o alespoò dva z tìchto bodù:
    1. Základní úloha pøedpokládá, ¾e klient bude pracovat pouze s jednou zpravodajskou agenturou, její¾ CORBA referenci získá z NamingService na základì pøedem známého jména. Roz¹iøte klienta o souèasnou práci s více zpravodajskými agenturami (více instancemi serveru. Tedy, aby napø. klient mohl být souèasnì pøihlá¹en do více kanálù na rùzných serverech. Toto samozøejmì musí být podporováno i u¾ivatelským rozhraním. Reference mù¾e klient napøíklad získat prohledáváním NamingService a výbìrem podle kind.
    2. Rozdìlení rozhraní ke kanálu na administrátorskou a u¾ivatelskou èást. Hodnocenou souèástí tohoto roz¹íøení úlohy je i správný výbìr operací do jednotlivých rozhraní.
    3. Poskytnìte na rozhraní zpravodajského kanálu operaci pro obnovení pøihlá¹ení, která klientovi za¹le v¹echny zprávy, které byly kanálem rozeslány v dobì, kdy klient nebyl schopen pøijímat zprávy. Poskytnìte i operaci pro pozastavení pøihlá¹ení (napø. pøed odpojením od sítì) . Ukládejte zprávy, které mìly být zaslány klientovi s pozastaveným pøihlá¹ením. Systémová výjimka pøi pokusu doruèit klientovi zprávu se implicitnì pova¾uje také za ¾ádost o pozastavení pøihlá¹ení - které se vztahuje u¾ i na zprávu, pøi jejím¾ doruèování výjimka nastala.

    Roz¹íøená úloha (varianta B - persistentní reference):

    Zajistìte, aby si klient i server externì ukládali stavová data (zejména server seznam zpravodajských kanálù a seznam klientù do nich pøihlá¹ených) tak, aby restart jednoho procesu (klienta, serveru) byl pro server (klienta) transparentní.

    Tj., po restartu serveru na nìm budou existovat v¹echny pùvodní zpravodajské kanály v nich budou pøihlá¹ení v¹ichni klienti, kteøí tam byli pùvodnì pøihlá¹eni. Po restartu klienta budou dál korektnì doruèovány zprávy (pokud server nezdetekoval chybu bìhem restartu klienta, nemìl by se o restartu dozvìdìt).

    Staèí, kdy¾ budete podporovat úmyslný restart, nemusíte být schopni øe¹it pád v libovolný okam¾ik.

    Datum zadání úlohy: 29.3.2005

    Datum odevzdání pøedbì¾né verze IDL specifikace rozhraní: 10.4.2005

    Datum odevzdání: 3.5.2005

    Nahlá¹ení slo¾ení týmù: do 5.4.2005

    Zpùsob odevzdání:

    Vypracované zápoètové úlohy mi za¹lete e-mailem. Proto¾e zadání zámìrnì nespecifikuje v¹echny detaily, musí odevzdaná práce obsahovat dokumentaci (tedy struèný popis toho co vá¹ program dìlá, jak to dìlá, jakým zpùsobem se program pou¹tí a ovládá). Rozsah dokumentace by nemìl pøekroèit 1 strana A4.

    Hodnocení, podmínky udìlení zápoètu:

    Za základní úlohu lze získat maximálnì 40 bodù, za bonusovou úlohu pak maximálnì dal¹ích 13 bodù. Za ka¾dý den zpo¾dìní oproti datu odevzdání se strhávají 4 body. Nutnou a postaèující podmínkou udìlení zápoètu je vyøe¹ení alespoò základní úlohy. U zkou¹ky bude 100 bodù "tvoøit" 40% známky (tj. maximálnì mo¾ných 53 bodù bude tvoøit 53% známky).