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

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

78 CAPITOLO 3. IMPLEMENTAZIONE<br />

Infine sono qui implementate le due classi principali che permet<strong>to</strong>no <strong>di</strong> gestire<br />

la Membership: <strong>Peer</strong> e <strong>Peer</strong>Group<br />

La classe <strong>Peer</strong> è composta da <strong>un</strong>’istanza <strong>di</strong> INode che viene invocata per<br />

inviare e ricevere messaggi <strong>di</strong> rete. Contiene inoltre <strong>un</strong>’istanza della classe<br />

<strong>Peer</strong>Group, che tiene traccia <strong>di</strong> tutti i <strong>Peer</strong> conosciuti appartenenti alla<br />

Membership, ed <strong>un</strong>’istanza della classe Time, che viene utilizzata per la gestione<br />

del tempo. A livello <strong>di</strong> f<strong>un</strong>zionalità astrae il Layer NET esponendo<br />

i me<strong>to</strong><strong>di</strong> ConnectTo (), che fa da Wrapper all’omonimo me<strong>to</strong>do <strong>di</strong> INode,<br />

SendTo (), che permette <strong>di</strong> inviare messaggi ad altri <strong>Peer</strong> specificandone il<br />

NetID, e BroadCast () che invia au<strong>to</strong>maticamente <strong>un</strong> messaggio a tutti i <strong>Peer</strong><br />

conosciuti.<br />

Alla creazione <strong>di</strong> <strong>un</strong> ogget<strong>to</strong> <strong>di</strong> tipo <strong>Peer</strong>, viene istanzia<strong>to</strong>, attraverso il<br />

Fac<strong>to</strong>ry del Layer NET, <strong>un</strong> ogget<strong>to</strong> <strong>di</strong> <strong>un</strong>a classe che concretizza l’interfaccia<br />

INode (attualmente quest’ultima è in<strong>di</strong>viduata dalla classe TCPNode).<br />

Viene poi creata <strong>un</strong>’istanza <strong>di</strong> <strong>Peer</strong>Group, alla quale viene aggi<strong>un</strong><strong>to</strong> au<strong>to</strong>maticamente<br />

il riferimen<strong>to</strong> all’INode appena istanzia<strong>to</strong>, ed <strong>un</strong> ogget<strong>to</strong> <strong>di</strong> classe<br />

Time.<br />

Infine vengono registrati i delegati in ascol<strong>to</strong> <strong>su</strong>l Layer NET relativi ai me<strong>to</strong><strong>di</strong><br />

OnConnect(), OnRead() e OnLinksChanged().<br />

Quando viene invoca<strong>to</strong> OnConnect, attraverso il me<strong>to</strong>do AddToKnown-<br />

<strong>Peer</strong>s() viene aggi<strong>un</strong><strong>to</strong> nel proprio <strong>Peer</strong>Group il <strong>Peer</strong> che vi si è appena<br />

connesso.<br />

Inoltre viene notificata l’esistenza <strong>di</strong> quest’ultimo a tutti i gli altri <strong>Peer</strong> conosciuti<br />

(quelli già inclusi nella Membership), tramite il comando Add<strong>Peer</strong>()<br />

parametrizza<strong>to</strong> con il <strong>su</strong>o NetID.<br />

Sull’Exec() <strong>di</strong> Add<strong>Peer</strong>() viene chiama<strong>to</strong> a <strong>su</strong>a volta <strong>un</strong> ConnectTo() verso<br />

il NetID passa<strong>to</strong> come parametro: in ques<strong>to</strong> modo, quando <strong>su</strong>bentra <strong>un</strong><br />

nuovo <strong>Peer</strong> all’interno della Membership, tutti i <strong>Peer</strong> presenti vi si connetteranno<br />

au<strong>to</strong>maticamente (si veda la sezione 2.2).

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

Saved successfully!

Ooh no, something went wrong!