Chat-quiz Reti di Calcolatori L-S AA. 2003/2004 Rossella Rubino Obiettivi • realizzare chat-quiz – comunicazione e sincronizzazione – replicazione 2 Cosa è una chat-quiz? • Applicazione che da la possibilità ai suoi utenti di chattare e contemporaneamente di partecipare ad un quiz. – le domande vengono inviate solo agli utenti che si iscrivono al quiz – l’utente che per primo risponde correttamente accumula 1 punto. 3 Fasi di sviluppo dell’applicazione • Analisi – casi d’uso – scenari • Progetto – scelta del modello – protocollo di comunicazione – replicazione • Implementazione – linguaggio – sistema di supporto 4 Analisi: casi d’uso Progetto: modello (1) msg(from(Bob),text(ciao)) …. …. msg(from(Alice),text(come va?)) … … msg(from(Bob),text(ho mal di denti)) … + Tuple C/S spazio di tuple client server 6 Progetto: modello (2) • Modello a tuple – meccanismo di comunicazione e sincronizzazione – asimmetrico – qualità • persistenza spazi di tuple • assenza di interferenze • Modello C/S – Entità che gestisce gli utenti e il quiz 7 • • • • Progetto: modello (3) soluzione distribuita vs centralizzata 1 server n client 3+n spazi di tuple – 1 per ogni utente – 1 per la chat • chat_room – 2 per il quiz • quiz • pool 8 Progetto: protocollo di comunicazione (1) • primitive degli spazi di tuple – in – out – rd • tuple logiche: strutture dati costituite da un nome e da una lista di argomenti – Es. msg(from(Bob),text(ciao)) 9 Accesso alla chat in(join(_,_)) rdAll(user(_,_)) out(join(user(Bob),host(localhost))) 2 1 chat_room 4 bob in(accepted(_,_)) 3 out(accepted(Bob,true)) Invio messaggi out(msg(from(Bob),host(localhost),text(ciao alice))) in(msg(_,_,_)) 2 1 chat_room bob out(msg(from(Bob),host(localhost),text(ciao))) 4 3 in(msg(_,_,_)) alice Partecipazione al quiz in(msg(_,_,_)) out(msg(from(Bob),host(localhost),text(quizStart))) 2 1 chat_room bob 3 quiz out(user(Bob,host(localhost),score(0),status(online)) Invio domande out(msg(from(Quiz),host(localhost),text(Chi è il regista di “Marnie”?)) in(msg(_,_,_)) 4 3 bob 1 2 pool quiz rdAll(user(_,_,_,_)) rd(quiz(question(Chi è il regista di “Marnie”?),answer(Alfred Hitchcock))) Invio risposta out(msg(from(Bob),host(localhost),text(Alfred Hitchcock))) in(msg(_,_,_)) 1 chat_room 2 4 3 bob out(msg(from(Quiz),host(localhost),text(Indovinato…il tuo punteggio ora è 1))) quiz out(user(Bob,host(localhost),score(1),status(online)) Uscita dal quiz in(msg(_,_,_)) out(msg(from(Bob),host(localhost),text(quizStop))) 2 1 chat_room bob 3 quiz out(user(Bob,host(localhost),score(0),status(offline)) Replicazione • ipotesi di guasto singolo • Modello a copie calde – si lavora in parallelo su due nodi in cui ognuno ha i centri di tuple chat_room, quiz e pool • Ripristino coerenza – il nodo riparato rientra solo al successivo startup 16 Implementazione (1) • Spazi di tuple – Tucson • Java – portabilità – interfaccia di accesso a Tucson 17 Implementazione (2) JFrame ObserverLeave ChatAgent ChatServer 1..* 1 AgentObserverJoin AgentObserverLeave QuizManager AgentObserverMsg ObserverJoin Interfaccia Conclusioni • Il modello a tuple risulta utile perché – meccanismo di comunicazione e di sincronizzazione – Stato disaccoppiato dai processi • Sviluppi futuri – Algoritmo di scelta random e inserimento delle domande nel centro di tuple pool – Meccanismo di ripristino coerenza tra i due nodi 20