Davide Cozzolino, Luigi De Simone, Mauro Faella, Sergio Franco
Gameet: un framework per il multiplayer gaming
Cos' è gameet
Gameet: architettura generale
Fasi di gioco e visualizzazione risulati
Scenari d'uso e interfacce
## DOWNLOAD ##
Cos'è gameet
Gameet, è una piattaforma per lo sviluppo, la gestione e l'utilizzo di videogame, rivolta da un lato agli sviluppatori di videogame e dall'altro agli utenti che possono facilmente registrarsi ed entrare a far parte della comunità di giocatori utilizzando il proprio pc o il proprio smartphone Android.
Gameet è un sistema multipiattaforma, funzionante su sistemi Unix, Mac OS, Windows e Android, è opensource ed è distribuito con licenza GPL. I sorgenti e i file di installazione sono scaricabili all'indirizzo http://sourceforge.net/projects/gameet/.
Oltre alla possibilità di realizzare sessioni di gioco tra utenti, Gameet offre un servizio di classifica generale, alla quale tutti gli utenti registrati partecipano e competono accumulando punteggio in base all'esito delle proprie partite. Se ci fermassimo qui, Gameet non sarebbe altro che una comune piattaforma di gioco online, ne esistono tantissime, molto complesse e articolate, gestite da grandi colossi del gaming mondiale, ma Gameet non è solo questo!
L'idea alla base di Gameet è infatti la possibilità di realizzare sessioni di gioco tra utenti che non necessariamente siano connessi alla rete Internet, ma che magari si trovino nello stesso luogo ma non sono dotati di connessione.
Uno dei principali obiettivi è quindi dare la possibilità ad utenti dotati di terminali connessi tra loro tramite una rete ad Hoc (Es. Bluetooth), di poter giocare insieme utilizzando una connessione tra peer (p2p), senza alcuna necessità di essere connessi ad un server centrale. Un utente può quindi decidere di sfidare un altro utente remoto, sfruttando la connessione ad Internet con il proprio dispositivo desktop o portatile, ma soprattutto può decidere di sfidare i propri amici ïn loco", creando una connessione locale tra due dispositivi tramite Bluetooth e far si che anche le partite disputate öffline", contribuiscano al proprio punteggio. Per fare ciò Gameet offre un sistema che consente di tenere traccia dei punteggi che ogni utente matura sia mediante sessioni di gioco online che offline, in modo da gestire ed aggiornare coerentemente la classifica globale degli utenti della piattaforma.
Gameet è quindi una piattaforma trasversale, un ponte tra una comunità virtuale e il mondo reale, che consente di giocare sia online che offline, tra amici o con utenti sconosciuti, in qualsiasi luogo ci si trovi senza dover necessariamente disporre di una connessione ad Internet.
Per quanto riguarda gli sviluppatori di videogame, Gameet può invece essere considerato un vero e proprio framework che offre un'infrastruttura di supporto agli sviluppatori, mettendo a disposizione una serie di servizi quali:
- comunicazione tra dispositivi che interagiscono durante la sessione di gioco;
- comunicazione ed interazione con il server di gioco;
- registrazione e gestione degli utenti;
- gestione e aggiornamento dei punteggi e della classifica generale.
Compito dello sviluppatore sarà quindi esclusivamente quello di progettare ed implementare la logica della propria applicazione rispettando l'interfaccia per la comunicazione offerta da Gameet, con la possibilità di integrare facilmente la propria applicazione nell'intera piattaforma.
Gameet: architettura generale
Al fine di comprendere il funzionamento di Gameet, di seguito è descritta l’architettura della piattaforma.
Gameet è basato sul protocollo XMPP ( eXtensibile Messaging and Presence Protocol), protocollo di messaggistica istantanea e presenza, basato su XML. XMPP è un protocollo aperto, standardizzato dall'IETF, che offre la possibilità di implementare funzionalità "customizzate". Numerosi sono i punti di forza di tale protocollo: la "decentralizzazione", ovvero la possibilità di usare diversi server XMPP, la diffusione di numerose implementazioni dello standard, la flessibilità ecc.
In accordo all' addressing schema previsto da XMPP definito nell’RFC 3920 [1], ogni entità è univocamente determinata da un JID (Jabber IDentifier), composto da:
[node "@"]domain["/" resource]
(per esempio ad ogni utente sarà associato un JID del tipo bob@meetecho.it).
Prima di addentrarci nella descrizione dell'architettura e dei vari componenti che la costituiscono, è bene riassumere quali sono gli obiettivi della piattaforma, e quindi capire quali sono state le motivazioni che ci hanno indotto a fare le scelte che successivamente illustreremo.
Gameet è stata pensata come modulo integrabile nell'ambito di applicazioni più complesse basate su XMPP, per questo motivo si è scelto di fare in modo che gli utenti potessero utilizzare il proprio account XMPP senza dover effettuare un'ulteriore registrazione.
In secondo luogo, si è scelto di non voler realizzare un'applicazione nella quale il server dovesse essere l'entità principale al quale tutti i client si connettono. Questo principalmente per due motivi: evitare di avere un server statefull che tenesse traccia di tutte le sessioni e consentire sessioni di gioco tra utenti anche in assenza di connessione ad Internet.
Infine idea principale alla base di Gameet era di introdurre un nuovo modello di giochi online e realizzare una piattaforma che fornisse l'infrastruttura necessaria allo sviluppo di giochi secondo questo nuovo paradigma.
Vediamo quindi tali obiettivi a cosa hanno portato, quali sono state le scelte fatte e come è stata progettata l'architettura della piattaforma.
L'architettura di Gameet è costituita da quattro entità fondamentali:
- Un server di gioco
- Uno o più server XMPP per la gestione degli utenti
- Un sito Web
- I client, desktop (Windows,Unix,MacOs) o dispositivi Android
Tali entità sono mostrate di seguito nello schema architetturale generale della piattaforma Gameet:

Figure 1: Gameet:architettura generale
Il server di gioco, in figura chiamato gameet.com, gestisce i vari giochi disponibili sulla piattaforma. Ad ogni gioco è associato un JID fittizio, con il quale è univocamente identificato come risorsa XMPP, nell'esempio abbiamo tris@gameet.com e dama@gameet.com. Altri compiti del server di gioco sono la gestione dei dati degli utenti, delle credenziali di accesso e dei punteggi di ciascun utente al fine di poter stilare le classifiche. Inoltre è compito del server di gioco tenere traccia dell'esito delle partite effettuate da ciascun utente, in modo da poterne gestire in modo affidabile e coerente il punteggio. Nei capitoli successivi saranno illustrate le soluzioni adottate per risolvere problemi di autenticazione degli utenti, gestione della coerenza, affidabilità e sicurezza dei risultati.
Il server di gioco si interfaccia con il sito web dell'applicazione sul quale, oltre ad essere pubblicate tutte le informazioni relative all'applicazione, sarà pubblicata la classifica generale.
I server XMPP meetecho.it e gmail.com in figura, rappresentano server XMPP presso i quali gli utenti possono registrarsi ed ottenere i propri JID. Possono aceddere a Gameet tutti gli utenti in possesso di un indirizzo XMPP ottenuto presso un qualsiasi server. Ogni utente che almeno una volta ha effettuato l'accesso a Gameet, può installare sul proprio client una o più applicazioni disponibili sul sito, ed una volta effettuato il login con le proprie credenziali, entrare nella stanza relativa al gioco scelto. In tale chat saranno presenti tutti gli utenti online con i quali poter avviare le sessioni di gioco. Per quanto riguarda i client mobili, lo scenario è identico se si sceglie la modalità di gioco Online (tramite connessione ad Internet), mentre per la modalità di gioco Offline (connessione ad Hoc) si avrà la possibilità di avviare una ricerca di altri client Gameet raggiungibili nei dintorni. Con essi sarà possibile instaurare una connessione ed eventualmente avviare una sessione di gioco.
Di seguito saranno illustrati in dettaglio i vari scenari e le diverse fasi di gioco sia nel caso di dispositivi desktop che mobili.
Fasi di gioco e visualizzazione risulati
Come già accennato in precedenza, è possibile individuare due differenti modalità di gioco:
la prima, che chiamiamo modalità Online, prevede che gli utenti della sessione siano tutti connessi ad Internet e abbiano effettuato il login con le proprie credenziali; la seconda, che chiamiamo modalità Offline, avviene tra utenti non connessi ad Internet ma connessi tra loro mediante connessioni ad Hoc tra dispositivi. Di seguito saranno descritte in dettaglio le due modalità e le operazioni che svolgono i soggetti coinvolti in ciascuna fase.
* Modalità Online: dopo la fase di login, che ogni utente effettua presso il proprio server XMPP, gli utenti condivideranno una chat comune relativa ad un determinato game, sulla quale è possibile scambiarsi messaggi o avviare una sessione di gioco con uno tra gli utenti disponibili.
E' importante sottolineare che il server di gioco non partecipa come intermediario alla sessione, come si evince dallo scenario sottostante:

Figure 2: Fase di gioco Online
gli unici partecipanti alla sessione sono i due utenti: alice e bob, rispettivamente loggati presso i server meetecho.it e gmail.com che fungono da proxy.
Nello schema proposto sono riportati i due utenti connessi tramite i propri laptop, a tale sessione possono partecipare tutti gli utenti dotati di un dispositivo fisso o portatile connesso ad Internet sul quale è installato il client di gioco.
Da quanto detto, il server Gameet non partecipa alla sessione, quindi non esiste alcuna terza entità che funge da ärbitro". Sono stesso gli utenti che, al termine della partita, troveranno un accordo sull'esito che comunicheranno al server Gameet. Esso si occuperà di aggiornare i relativi punteggi e la classifica. Il problema della convalida dei risultati in assenza di arbitro, e la soluzione adottata, saranno descritti dettagliatamente nel capitolo successivo.
* Modalità Offline: gli utenti coinvolti nella sessione di gioco questa volta utilizzano i proprio dispositivi connessi tra loro con una connessione p2p, ad esempio Bluetooth. Gli utenti una volta effettuato il login presso il proprio dispositivo, hanno la possibilità di avviare una ricerca dei dispositivi presenti nelle vicinanze sui quali è in esecuzione il client Gameet e in seguito avviare una sessione di gioco con uno degli utenti disponibili.
Va specificato, però, che per avere un esito positivo del login ogni utente deve aver fatto almeno una volta un login online.

Figure 3: Fase di gioco Offline
In figura è mostrata la connessione p2p tra i due client mobili e lo scambio di messaggi tramite il protocollo XMPP, anche in questo caso non c'è alcun'entità intermediaria che svolga il ruolo di arbitro e sia garante del risultato della partita.
Al termine della sessione la modalità Offline prevede che i due utenti concordino l'esito della partita e salvino localmente il proprio punteggio. Quando ogni utente effettuerà il prossimo login al server XMPP, in modo asincrono ed automatico il client si occuperà di inviare i risultati conseguiti offline al server di gioco, il quale provvederà ad aggiornare le classifiche, come mostrato nella successiva immagine (fase di Upload).

Figure 4: Quando l'utente accede ad Internet, avviene l'invio delle informazioni relative alle partite svolte offline
Infine ogni utente può visualizzare la classifica dei risultati visitando il sito web dell'applicazione

Figure 5: Visualizzazione della classifica
Scenari d'uso e interfacce
Vediamo ora quali sono le interfacce tramite le quali gli utenti interagiscono con la piattaforma. In particolare vediamo come l'utente può effettuare il login, scegliere l'avversario con cui giocare e infine avviare una sessione di gioco.
Iniziamo con il primo scenario, in cui l'utente, avviato il client da desktop, compila la form per il login e accede alla chat room del gioco:
Figure 6: Interfacce desktop
Di seguito sono mostrate le schermate analoghe nel caso in cui però l'utente esegue l'applicazione sul proprio terminale Android
Figure 7: Interfacce Android
Dalla schermata di login è possibile scegliere se avviare una sessione di gioco online o offline, nel secondo caso all'avvio della chat ci sono i pulsanti per gestire la ricerca di dispositivi disponibili, come mostra la figura (c).
Bibliography
- [1]
-
http://www.ietf.org/rfc/rfc3920.txt.
- [2]
-
http://it.wikipedia.org/wiki/x.509.
- [3]
-
http://developer.android.com/index.html.
- [4]
-
http://www.igniterealtime.org/projects/openfire/.
- [5]
-
http://www.igniterealtime.org/projects/tinder/.
- [6]
-
http://www.igniterealtime.org/projects/smack/.
- [7]
-
http://code.google.com/p/asmack/.
- [8]
-
http://download.oracle.com/javase/6/docs/technotes/guides/security/index.html.
- [9]
-
http://www.bouncycastle.org/java.html.
- [10]
-
http://www.extreme.indiana.edu/xgws/xsoap/xpp/.