08.09.2019 Views

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

SHOW MORE
SHOW LESS

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.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!