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.

3.2. LAYER NET 71<br />

• Le classi Setup e Constants fanno da conteni<strong>to</strong>re a tutti i parametri<br />

<strong>di</strong> configurazione del Layer. Ad esempio sono qui definiti i nomi delle<br />

classi che implementeranno le interfacce INet e ILink, i millisecon<strong>di</strong> <strong>di</strong><br />

attesa dei Thread <strong>di</strong> lettura e scrittura <strong>di</strong> <strong>un</strong> Link, e la <strong>di</strong>mensione<br />

della finestra TCP (nel caso sia utilizza<strong>to</strong> ques<strong>to</strong> pro<strong>to</strong>collo). Come<br />

prima implementazione, tali valori sono inizializzati <strong>di</strong>rettamente all’interno<br />

del co<strong>di</strong>ce, ma come sviluppo futuro è previs<strong>to</strong> l’utilizzo <strong>di</strong> file<br />

<strong>di</strong> configurazione esterni.<br />

• La classe Delegates raccoglie la definizione <strong>di</strong> tutti i Delegates, ovvero<br />

tipi <strong>di</strong> da<strong>to</strong> necessari a formalizzare la natura dei me<strong>to</strong><strong>di</strong> anonimi<br />

utilizzati per l’implementazione degli Eventi e dell’Observer Pattern in<br />

generale, <strong>su</strong>i quali si basa la com<strong>un</strong>icazione da ques<strong>to</strong> Layer verso i<br />

Layer <strong>su</strong>periori.<br />

• La classe Utils raccoglie <strong>un</strong>a serie <strong>di</strong> me<strong>to</strong><strong>di</strong> ausiliari e <strong>di</strong> utilità generale.<br />

Ad esempio qui risiedono i me<strong>to</strong><strong>di</strong> <strong>di</strong> conversione tra IP Address,<br />

Port e NetID.<br />

• La classe Fac<strong>to</strong>ry permette, attraverso il principio IoC 3 <strong>di</strong> istanziare<br />

oggetti concreti <strong>di</strong> INode e ILink astraendo dalla loro implementazione.<br />

Sono poi definite le interfacce esposte ai Layer <strong>su</strong>periori:<br />

• INode: Identifica <strong>un</strong> nodo <strong>di</strong> rete. Al <strong>su</strong>o interno è presente <strong>un</strong> lista<br />

<strong>di</strong> ILink, che vengono istanziati <strong>su</strong>lla chiamata del me<strong>to</strong>do ConnectTo(<br />

string ipAddress, int port).<br />

Il me<strong>to</strong>do SetNewIdentifierOfLink(ILink link, String newIdentifier) consente<br />

<strong>di</strong> cambiare l’identificativo <strong>di</strong> <strong>un</strong> link.<br />

Sono inoltre esposti <strong>un</strong>a serie <strong>di</strong> me<strong>to</strong><strong>di</strong> che permet<strong>to</strong>no ai Layer <strong>su</strong>periori<br />

<strong>di</strong> registrarsi ad alc<strong>un</strong>i eventi <strong>di</strong>spacciati dal singolo nodo: ad<br />

esempio quando <strong>un</strong> ILink presente nella lista riceve <strong>un</strong> messaggio, viene<br />

lancia<strong>to</strong> il me<strong>to</strong>do delega<strong>to</strong> che si era registra<strong>to</strong> all’even<strong>to</strong> OnRead.<br />

3 Inversion of control, <strong>un</strong> pattern grazie al quale è possibile delegare ad <strong>un</strong>a terza entità<br />

la creazione <strong>di</strong> <strong>un</strong> preciso ogget<strong>to</strong> in<strong>di</strong>candone, ad esempio, solamente l’interfaccia

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

Saved successfully!

Ooh no, something went wrong!