Progettazione e Sviluppo di un Multiplayer Online Game su Reti Peer-to-Peer
Alma Mater Studiorum Universit`a degli Studi di Bologna Facolta` di Scienze Matematiche, Fisiche e Naturali Corso di Laurea in Scienze di Internet Tesi di Laurea in Laboratorio di Programmazione Internet
Alma Mater Studiorum Universit`a degli Studi di Bologna
Facolta` di Scienze Matematiche, Fisiche e Naturali
Corso di Laurea in Scienze di Internet
Tesi di Laurea in Laboratorio di Programmazione Internet
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
38 CAPITOLO 2. ARCHITETTURA SOFTWARE<br />
Il Layer Logic quin<strong>di</strong> esegue <strong>un</strong> BroadCast esteso a tutti i <strong>Peer</strong> conosciuti<br />
inviando il comando CreateComponent appositamente parametrizza<strong>to</strong> per la<br />
descrizione del componente Bullet.<br />
Ogni comando <strong>di</strong> ques<strong>to</strong> Layer viene marca<strong>to</strong> con l’attuale TimeStamp<br />
espos<strong>to</strong> dal sot<strong>to</strong>-modulo Time del Layer P2P.<br />
In ques<strong>to</strong> modo si possono implementare controlli basati <strong>su</strong>l tempo: quando<br />
<strong>un</strong> comando gesti<strong>to</strong> dal Layer Logic viene ricevu<strong>to</strong> da <strong>un</strong> Nodo, ques<strong>to</strong> viene<br />
inseri<strong>to</strong> in <strong>un</strong>a lista <strong>di</strong> esecuzione, ed esegui<strong>to</strong> solo all’iterazione <strong>su</strong>ccessiva, o,<br />
nel caso <strong>di</strong> coman<strong>di</strong> esplicitamente temporizzati, solo quando il TimeStamp<br />
del <strong>Peer</strong> destinatario sarà maggiore o uguale a quello presente all’interno del<br />
comando stesso (opport<strong>un</strong>amente converti<strong>to</strong> in modo au<strong>to</strong>matico dal sot<strong>to</strong>modulo<br />
Time del Layer P2P).<br />
Ques<strong>to</strong> tipo <strong>di</strong> controlli viene effettua<strong>to</strong> in <strong>un</strong> sot<strong>to</strong>-modulo compos<strong>to</strong> da<br />
<strong>un</strong>a serie <strong>di</strong> Filtri che intervengono tra la ricezione del comando e la <strong>su</strong>a<br />
esecuzione. Uno <strong>di</strong> questi filtri controlla l’Obsolescence dei coman<strong>di</strong> UpdateComponent:<br />
Può capitare infatti <strong>di</strong> ricevere due messaggi UpdateComponent <strong>di</strong> <strong>un</strong>o stesso<br />
componente riportanti valori <strong>di</strong>fferenti. In ques<strong>to</strong> caso viene confronta<strong>to</strong><br />
il TimeStamp che accompagna entrambi i messaggi, ed elimina<strong>to</strong> l’Update-<br />
Component temporalmente più vecchio.<br />
Escludendo situazioni <strong>di</strong> estrema congestione, si tratta com<strong>un</strong>que <strong>di</strong> <strong>un</strong>’evenienza<br />
abbastanza rara, in quan<strong>to</strong> due UpdateComponent <strong>di</strong> <strong>un</strong>o stesso<br />
componente possono essere inviati solo dal medesimo <strong>Peer</strong>, e quest’ultimo tipicamente<br />
effettua aggiornamenti <strong>di</strong> componente con <strong>un</strong>a frequenza più bassa<br />
rispet<strong>to</strong> a quella <strong>di</strong> esecuzione.<br />
Ques<strong>to</strong> Layer inoltre mette a <strong>di</strong>sposizione <strong>un</strong>’interfaccia che permette <strong>di</strong><br />
inviare messaggi sia ai propri componenti che a quelli appartenenti agli altri<br />
<strong>Peer</strong>, utilizzando il sistema <strong>di</strong> Messaging del modulo SharedComponents.