310 likes | 426 Views
Un Player di Eventi per LEAD. Angelo Cafaro. Argomenti. Un breve riepilogo. Il Player di eventi. Implementazione del Player. Un esempio di “replay”. Un breve riepilogo (1). 1. Nel precedente seminario abbiamo parlato di: Gestione dei client ritardatari .
E N D
Un Player di Eventi per LEAD Angelo Cafaro
Argomenti • Un breve riepilogo. • Il Player di eventi. • Implementazione del Player. • Un esempio di “replay”. Angelo Cafaro - ISIS Lab.
Un breve riepilogo (1) 1 • Nel precedente seminario abbiamo parlato di: • Gestione dei clientritardatari. • Gestione dello Stato in LEAD: • ChatState; • TreeChatState; • CoreState; • Salvataggio dello stato con XML. Angelo Cafaro - ISIS Lab.
Un breve riepilogo (2) 1 Angelo Cafaro - ISIS Lab.
Il concetto di sessione 1 • Per tenere traccia di tutte gli eventi: • Ingresso/uscita client; • Avvio/Chiusura tool; • Contenuti dei tool. L’ArrayList Content Angelo Cafaro - ISIS Lab.
Cosa conteneva “content”? 1 content: ArrayList • Campo content all’interno di ToolSession: M M E M E E M M M E E M E Angelo Cafaro - ISIS Lab.
Cosa contiene ora “content”? content: ArrayList 1 E E E E E E E E E E E E Angelo Cafaro - ISIS Lab.
Il Player di Eventi -Le origini 1 • Per ciascun tool offerto da LEAD abbiamo a disposizione un file XML: • ChatState.xml; • TreeChatState.xml. • All’interno di ciascun file possiamo trovare tutte le informazioni necessarie per poter “ricostruire” una o più sessioni del tool a cui è legato il file: • Data/ora di inizio/fine della sessione; • Ingresso/Uscita dei client; • Messaggi scambiati. 2 Angelo Cafaro - ISIS Lab.
Il Player di Eventi -L’obiettivo • Utilizzare le informazioni contenute nei file XML per poter effettuare il “replay” di una sessione (di Chat o TreeChat). • Il “replay” deve avvenire nello stesso modo in cui è avvenuta la conversazione originale. • Bisogna rispettare la stessa tempistica degli eventi così come sono stati generati nella conversazione reale. • Possibile farlo perché ad ogni evento, nel file xml, è stato associato il tempo in cui è avvenuto. • Dare la possibiltà di gestire il replay con i pulsanti standard di un comune “player” (Play – Pause – Stop). 2 Angelo Cafaro - ISIS Lab.
Il Player di Eventi -Il riutilizzo di LEAD • Il player è stato creato “utilizzando” LEAD. • Vantaggi: • Funzionalità offerte da LEAD (avvio tool, ecc…). • UI già pronta e completamente adattabile (quasi). • Svantaggi: • Individuare le parti di codice da: • Modifiare per adattare al Player; • Eliminare. 2 Angelo Cafaro - ISIS Lab.
Implementazione – L’idea di base (cont.) • L’applicazione può essere avviata solo in modalità server (Moderatore). • Vengono ignorati i parametri passati da linea di comando. • La GUI permette di scegliere il tool del quale vogliamo effettuare il replay mediante un combo-box. • Non compare più la “InstalledToolView”. • Viene effettuato un login “nascosto” che può essere definito un “loginfittizio” (vedremo di cosa si tratta e a cosa serve). • Viene effettuato il parsing del file XML relativo al tool scelto. 2 3 Angelo Cafaro - ISIS Lab.
Implementazione – L’idea di base (2) • L’utente sceglie una tra le sessioni disponibili (trovate nel file XML). • Viene avviato il server del tool ed il client. • Si ha un unico client. • Il server “legge” le informazioni da inviare al client quando l’utente avvia il replay (rispettando la tempistica degli eventi). • La UI offre una nuova view chiamata “ActionView” dove sono presenti i comandi: play – pause – stop. • Il client riceve gli eventi dal server (sostanzialmente i messaggi) e li visualizza nella view del tool. 3 Angelo Cafaro - ISIS Lab.
Implementazione – Le parti modificate/eliminate • Modalità di avvio solo server (Moderatore). • Lo stato non deve essere più gestito. • Neanche il salvataggio, ovviamente. • La “InstalledToolView non viene mostrata nella UI. • La view usata per il login (LogView) è stata modificata: • Nascoste le parti relative al login (eseguito implicitamente quando l’utente sceglie un tool di cui vuole vedere un replay). • Aggiunti i pulsanti per il replay. 3 Angelo Cafaro - ISIS Lab.
Implementazione – Il “login fittizio” (cont.) • Per poter avviare i tool, usando lo schema base di LEAD, è necessario effettuare il login. • Lanciando l’applicazione in modalità server. • Problema: quando si effettua il login, la “PresenceView” mostra il nickname dell’utente appena entrato. • Soluzione: viene effettuato il così detto “login fittizio”. 3 Angelo Cafaro - ISIS Lab.
Implementazione – Il “login fittizio” (2) • Necessario caratterizzare gli utenti in base al ruolo che essi assumono. • Fatta in modo standard mediante l’interfaccia UserRoles: 3 Angelo Cafaro - ISIS Lab.
Implementazione – Il “login fittizio” (3) • All’interno della “PresenceView” l’utente PLAYER viene filtrato, ossia non viene visualizzato tra gli utenti online if(((PersonalData)obj).getRole() == UserRoles.PLAYER) 3 Angelo Cafaro - ISIS Lab.
Implementazione – Il parsing del file XML • Operazione opposta al salvataggio. • Andiamo a rispolverare vecchi ricordi… 3 New Angelo Cafaro - ISIS Lab.
Implementazione – L’interazione tra la ActionView ed il Server del tool (cont.) • Due ruoli fondamentali: • ActionView: • Riceve i comandi dall’utente. • Avvio del replay. • Pausa del replay. • Interruzione. • Il server del tool: • Attraverso l’oggetto <tool>State ricava le sessioni del tool salvate in memoria secondaria. • L’oggetto <tool>State mette a disposizione il proprio StateSerializer. • Invia al client del tool le informazioni da visualizzare per il replay. 3 Angelo Cafaro - ISIS Lab.
Implementazione – L’interazione tra la ActionView ed il Server del tool (2) • ActionView e <tool>Server comunicano mediante due interfacce: 3 Angelo Cafaro - ISIS Lab.
Implementazione – Il ruolo di ActionManager • ActionManager mantiene i riferimenti di: • ActionView. • Il server lo usa per inviare notifiche alla view, ad esempio la fine del replay. • Server del tool di cui si deve effettuare il replay. • La ActionView lo usa per interagire con il “server di turno” ed avviare (terminare o mettere in pausa) il replay. • Ovviamente i server e la view implementano le rispettive interfacce… 3 Angelo Cafaro - ISIS Lab.
Implementazione – ActionManager…perché? 3 Angelo Cafaro - ISIS Lab.
Implementazione – Interfaccia ActionControllerViewer 3 Angelo Cafaro - ISIS Lab.
Implementazione – Interfaccia ActionServerPlayer 3 Angelo Cafaro - ISIS Lab.
Implementazione – L’uso del timer (cont.) • Il player ricostruisce fedelmente le conversazioni di Chat (TreeChat). • I tempi che intercorrono tra un evento e l’altro, nel replay, sono gli stessi della conversazione originale. • Necessario l’ausilio della temporizzazione mediante il Timer. 3 Angelo Cafaro - ISIS Lab.
Implementazione – L’uso del timer (2) • All’interno del server abbiamo a disposizione la lista degli eventi da visualizzare. • Ad ogni evento è associato il tempo in cui è avvenuto. • Il server, in fase di inizializzazione del replay, costruisce un “array di differenze”… 3 Angelo Cafaro - ISIS Lab.
Implementazione – Iniz. per il timer Lista degli eventi da visualizzare (ArrayList) Evento 1 17:17:10 Evento 2 17:17:13 Evento 3 17:17:40 Evento 4 17:18:02 Evento 5 17:18:06 3 3000 Evento 1 Evento 2 Evento 3 Evento 4 Evento 5 0 ms 4000 27000 22000 Array di differenze, in ms, dei tempi Angelo Cafaro - ISIS Lab.
Implementazione – Come vengono usate le differenze? Array di differenze, in ms, dei tempi Evento 1 Evento 2 Evento 3 Evento 4 Evento 5 0 ms 3000 4000 27000 22000 3 View Timer ToolServer Evento 1 0 3000 Evento 2 Angelo Cafaro - ISIS Lab.
Un esempio di “replay”di una conversazione di Chat <chatSession id="4"> <info> <startDate>2006-10-03</startDate> <startTime>21:41:31</startTime> <endDate>2006-10-03</endDate> <endTime>21:41:50</endTime> </info> <content> <chatEvent action="enter" seqNum="0" time="21:41:31"> <nickname>Lupin</nickname> </chatEvent> <chatEvent action="enter" seqNum="1" time="21:41:34"> <nickname>Margot</nickname> </chatEvent> <chatMessage seqNum="2" time="21:41:36"> <nickname>Lupin</nickname> <text>Ciao tesoro!!!</text> </chatMessage> 3 4 Angelo Cafaro - ISIS Lab.
Un esempio di “replay”di una conversazione di Chat (2) … <chatMessage seqNum="3" time="21:41:39"> <nickname>Margot</nickname> <text>Ciao!!!</text> </chatMessage> <chatMessage seqNum="4" time="21:41:45"> <nickname>Lupin</nickname> <text>allora hai pensato alle prossime vacanze?</text> </chatMessage> <chatMessage seqNum="5" time="21:41:50"> <nickname>Margot</nickname> <text>certo che si!!!</text> </chatMessage> … </content> </chatSession> 4 Angelo Cafaro - ISIS Lab.
Un esempio di “replay”di una conversazione di TreeChat <treeChatSession id="1"> <info> <startDate>2006-09-12</startDate> <startTime>19:26:40</startTime> <endDate>2006-09-12</endDate> <endTime>19:27:46</endTime> </info> <content> <treeChatEvent action="enter" seqNum="0" time="19:26:41"> <nickname>Lupin</nickname> </treeChatEvent> <treeChatEvent action="enter" seqNum="1" time="19:27:03"> <nickname>Margot</nickname> </treeChatEvent> <treeChatMessage id="1" parentID="0" seqNum="2" time="19:27:16"> <nickname>Lupin</nickname> <text>Prossimo colpo</text> </treeChatMessage> … 4 Angelo Cafaro - ISIS Lab.
Un esempio di “replay”di una conversazione di TreeChat (2) … <treeChatMessage id="1.1" parentID="1" seqNum="3" time="19:27:25"> <nickname>Margot</nickname> <text>Dobbiamo aspettare jigen</text> </treeChatMessage> <treeChatMessage id="2" parentID="0" seqNum="4" time="19:27:37"> <nickname>Lupin</nickname> <text>Parliamo di altro...</text> </treeChatMessage> <treeChatMessage id="2.1" parentID="2" seqNum="5" time="19:27:46"> <nickname>Margot</nickname> <text>Allora mi ragali un diamante???</text> </treeChatMessage> … </content> </treeChatSession> 4 Angelo Cafaro - ISIS Lab.