un player di eventi per lead
DESCRIPTION
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 . - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: Un Player di Eventi per LEAD](https://reader036.vdocumenti.com/reader036/viewer/2022070500/5681680f550346895ddd9ca6/html5/thumbnails/1.jpg)
Un Player di Eventi per LEAD
Angelo Cafaro
![Page 2: Un Player di Eventi per LEAD](https://reader036.vdocumenti.com/reader036/viewer/2022070500/5681680f550346895ddd9ca6/html5/thumbnails/2.jpg)
22/04/23 Angelo Cafaro - ISIS Lab. 2
Argomenti
1. Un breve riepilogo.
2. Il Player di eventi.
3. Implementazione del Player.
4. Un esempio di “replay”.
![Page 3: Un Player di Eventi per LEAD](https://reader036.vdocumenti.com/reader036/viewer/2022070500/5681680f550346895ddd9ca6/html5/thumbnails/3.jpg)
22/04/23 Angelo Cafaro - ISIS Lab. 3
Un breve riepilogo (1)
Nel precedente seminario abbiamo parlato di:• Gestione dei client ritardatari.• Gestione dello Stato in LEAD:
ChatState; TreeChatState; CoreState;
• Salvataggio dello stato con XML.
1
![Page 4: Un Player di Eventi per LEAD](https://reader036.vdocumenti.com/reader036/viewer/2022070500/5681680f550346895ddd9ca6/html5/thumbnails/4.jpg)
22/04/23 Angelo Cafaro - ISIS Lab. 4
Un breve riepilogo (2)
1
![Page 5: Un Player di Eventi per LEAD](https://reader036.vdocumenti.com/reader036/viewer/2022070500/5681680f550346895ddd9ca6/html5/thumbnails/5.jpg)
22/04/23 Angelo Cafaro - ISIS Lab. 5
Il concetto di sessione
1 Per tenere traccia di tutte
gli eventi:• Ingresso/uscita client;• Avvio/Chiusura tool;• Contenuti dei tool.
L’ArrayList Content
![Page 6: Un Player di Eventi per LEAD](https://reader036.vdocumenti.com/reader036/viewer/2022070500/5681680f550346895ddd9ca6/html5/thumbnails/6.jpg)
22/04/23 Angelo Cafaro - ISIS Lab. 6
Cosa conteneva “content”?
content: ArrayListM M M M M M ME E E E E E
Campo content all’interno di ToolSession:1
![Page 7: Un Player di Eventi per LEAD](https://reader036.vdocumenti.com/reader036/viewer/2022070500/5681680f550346895ddd9ca6/html5/thumbnails/7.jpg)
22/04/23 Angelo Cafaro - ISIS Lab. 7
Cosa contiene ora “content”?
content: ArrayListE1 E E E E E E E E E E E
![Page 8: Un Player di Eventi per LEAD](https://reader036.vdocumenti.com/reader036/viewer/2022070500/5681680f550346895ddd9ca6/html5/thumbnails/8.jpg)
22/04/23 Angelo Cafaro - ISIS Lab. 8
Il Player di Eventi -Le origini
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
1
![Page 9: Un Player di Eventi per LEAD](https://reader036.vdocumenti.com/reader036/viewer/2022070500/5681680f550346895ddd9ca6/html5/thumbnails/9.jpg)
22/04/23 Angelo Cafaro - ISIS Lab. 9
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
![Page 10: Un Player di Eventi per LEAD](https://reader036.vdocumenti.com/reader036/viewer/2022070500/5681680f550346895ddd9ca6/html5/thumbnails/10.jpg)
22/04/23 Angelo Cafaro - ISIS Lab. 10
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
![Page 11: Un Player di Eventi per LEAD](https://reader036.vdocumenti.com/reader036/viewer/2022070500/5681680f550346895ddd9ca6/html5/thumbnails/11.jpg)
22/04/23 Angelo Cafaro - ISIS Lab. 11
Implementazione – L’idea di base (cont.)
1. L’applicazione può essere avviata solo in modalità server (Moderatore).
• Vengono ignorati i parametri passati da linea di comando.
2. La GUI permette di scegliere il tool del quale vogliamo effettuare il replay mediante un combo-box.
Non compare più la “InstalledToolView”.3. Viene effettuato un login “nascosto” che può
essere definito un “login fittizio” (vedremo di cosa si tratta e a cosa serve).
4. Viene effettuato il parsing del file XML relativo al tool scelto.
3
2
![Page 12: Un Player di Eventi per LEAD](https://reader036.vdocumenti.com/reader036/viewer/2022070500/5681680f550346895ddd9ca6/html5/thumbnails/12.jpg)
22/04/23 Angelo Cafaro - ISIS Lab. 12
Implementazione – L’idea di base (2)
5. L’utente sceglie una tra le sessioni disponibili (trovate nel file XML).
6. Viene avviato il server del tool ed il client.• Si ha un unico client.
7. 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
![Page 13: Un Player di Eventi per LEAD](https://reader036.vdocumenti.com/reader036/viewer/2022070500/5681680f550346895ddd9ca6/html5/thumbnails/13.jpg)
22/04/23 Angelo Cafaro - ISIS Lab. 13
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
![Page 14: Un Player di Eventi per LEAD](https://reader036.vdocumenti.com/reader036/viewer/2022070500/5681680f550346895ddd9ca6/html5/thumbnails/14.jpg)
22/04/23 Angelo Cafaro - ISIS Lab. 14
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
![Page 15: Un Player di Eventi per LEAD](https://reader036.vdocumenti.com/reader036/viewer/2022070500/5681680f550346895ddd9ca6/html5/thumbnails/15.jpg)
22/04/23 Angelo Cafaro - ISIS Lab. 15
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
![Page 16: Un Player di Eventi per LEAD](https://reader036.vdocumenti.com/reader036/viewer/2022070500/5681680f550346895ddd9ca6/html5/thumbnails/16.jpg)
22/04/23 Angelo Cafaro - ISIS Lab. 16
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
![Page 17: Un Player di Eventi per LEAD](https://reader036.vdocumenti.com/reader036/viewer/2022070500/5681680f550346895ddd9ca6/html5/thumbnails/17.jpg)
22/04/23 Angelo Cafaro - ISIS Lab. 17
Implementazione – Il parsing del file XML
Operazione opposta al salvataggio. Andiamo a rispolverare vecchi ricordi…
3
![Page 18: Un Player di Eventi per LEAD](https://reader036.vdocumenti.com/reader036/viewer/2022070500/5681680f550346895ddd9ca6/html5/thumbnails/18.jpg)
22/04/23 Angelo Cafaro - ISIS Lab. 18
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
![Page 19: Un Player di Eventi per LEAD](https://reader036.vdocumenti.com/reader036/viewer/2022070500/5681680f550346895ddd9ca6/html5/thumbnails/19.jpg)
22/04/23 Angelo Cafaro - ISIS Lab. 19
Implementazione – L’interazione tra la ActionView ed il Server del tool (2)
ActionView e <tool>Server comunicano mediante due interfacce:
3
![Page 20: Un Player di Eventi per LEAD](https://reader036.vdocumenti.com/reader036/viewer/2022070500/5681680f550346895ddd9ca6/html5/thumbnails/20.jpg)
22/04/23 Angelo Cafaro - ISIS Lab. 20
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
![Page 21: Un Player di Eventi per LEAD](https://reader036.vdocumenti.com/reader036/viewer/2022070500/5681680f550346895ddd9ca6/html5/thumbnails/21.jpg)
22/04/23 Angelo Cafaro - ISIS Lab. 21
Implementazione – ActionManager…perché?
3
![Page 22: Un Player di Eventi per LEAD](https://reader036.vdocumenti.com/reader036/viewer/2022070500/5681680f550346895ddd9ca6/html5/thumbnails/22.jpg)
22/04/23 Angelo Cafaro - ISIS Lab. 22
Implementazione – Interfaccia ActionControllerViewer
3
![Page 23: Un Player di Eventi per LEAD](https://reader036.vdocumenti.com/reader036/viewer/2022070500/5681680f550346895ddd9ca6/html5/thumbnails/23.jpg)
22/04/23 Angelo Cafaro - ISIS Lab. 23
Implementazione – Interfaccia ActionServerPlayer
3
![Page 24: Un Player di Eventi per LEAD](https://reader036.vdocumenti.com/reader036/viewer/2022070500/5681680f550346895ddd9ca6/html5/thumbnails/24.jpg)
22/04/23 Angelo Cafaro - ISIS Lab. 24
Implementazione – L’uso del timer (cont.)
3
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.
![Page 25: Un Player di Eventi per LEAD](https://reader036.vdocumenti.com/reader036/viewer/2022070500/5681680f550346895ddd9ca6/html5/thumbnails/25.jpg)
22/04/23 Angelo Cafaro - ISIS Lab. 25
Implementazione – L’uso del timer (2)
3
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”…
![Page 26: Un Player di Eventi per LEAD](https://reader036.vdocumenti.com/reader036/viewer/2022070500/5681680f550346895ddd9ca6/html5/thumbnails/26.jpg)
22/04/23 Angelo Cafaro - ISIS Lab. 26
Implementazione – Iniz. per il timer
3
Evento 117:17:10
Evento 217:17:13
Evento 317:17:40
Evento 417:18:02
Evento 517:18:06
Lista degli eventi da visualizzare (ArrayList)
Array di differenze, in ms, dei tempi
0 msEvento 1 Evento 2 Evento 3 Evento 4 Evento 5
3000
27000 22000 4000
![Page 27: Un Player di Eventi per LEAD](https://reader036.vdocumenti.com/reader036/viewer/2022070500/5681680f550346895ddd9ca6/html5/thumbnails/27.jpg)
22/04/23 Angelo Cafaro - ISIS Lab. 27
Implementazione – Come vengono usate le differenze?
3
Array di differenze, in ms, dei tempi
0 msEvento 1 Evento 2 Evento 3 Evento 4 Evento 5
27000 22000 40003000
ToolServerTimer
0Evento 1
View
Evento 23000
![Page 28: Un Player di Eventi per LEAD](https://reader036.vdocumenti.com/reader036/viewer/2022070500/5681680f550346895ddd9ca6/html5/thumbnails/28.jpg)
22/04/23 Angelo Cafaro - ISIS Lab. 28
Un esempio di “replay”di una conversazione di Chat
4
3
<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>
![Page 29: Un Player di Eventi per LEAD](https://reader036.vdocumenti.com/reader036/viewer/2022070500/5681680f550346895ddd9ca6/html5/thumbnails/29.jpg)
22/04/23 Angelo Cafaro - ISIS Lab. 29
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
![Page 30: Un Player di Eventi per LEAD](https://reader036.vdocumenti.com/reader036/viewer/2022070500/5681680f550346895ddd9ca6/html5/thumbnails/30.jpg)
22/04/23 Angelo Cafaro - ISIS Lab. 30
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
![Page 31: Un Player di Eventi per LEAD](https://reader036.vdocumenti.com/reader036/viewer/2022070500/5681680f550346895ddd9ca6/html5/thumbnails/31.jpg)
22/04/23 Angelo Cafaro - ISIS Lab. 31
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