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.

80 CAPITOLO 3. IMPLEMENTAZIONE<br />

3.3.1 Modulo Time<br />

Il modulo Time è attualmente compos<strong>to</strong> da <strong>un</strong>’<strong>un</strong>ica classe: Time. Questa<br />

contiene <strong>un</strong>a lista <strong>di</strong> TimeSpan (.NET Framework) in<strong>di</strong>cizzati per NetID,<br />

ed espone alc<strong>un</strong>i me<strong>to</strong><strong>di</strong> accessori per la <strong>su</strong>a gestione: AddDelta (), GetDelta<br />

() e GetAllDeltas ().<br />

Implementa inoltre <strong>un</strong> me<strong>to</strong>do polimorfo Convert () che permette <strong>di</strong> convertire,<br />

laddove possibile, TimeStamp calcolati <strong>su</strong>lla base temporale <strong>di</strong> altri<br />

<strong>Peer</strong> rispet<strong>to</strong> al proprio (si veda 2.3.1).<br />

Infine, grazie al me<strong>to</strong>do Now() è possibile ricavare il proprio TimeStamp.<br />

Tale me<strong>to</strong>do utilizza la proprietà statica del .NET framework DateTime.Now.<br />

In fase <strong>di</strong> debug e <strong>di</strong> analisi delle prestazioni, è ri<strong>su</strong>lta<strong>to</strong> mol<strong>to</strong> utile aggi<strong>un</strong>gere<br />

2 fat<strong>to</strong>ri alea<strong>to</strong>ri: il primo emula <strong>un</strong>a <strong>di</strong>fferente timezone (od <strong>un</strong> <strong>di</strong>fferente<br />

settaggio dell’orario <strong>di</strong> sistema), mentre il secondo introduce <strong>un</strong> fat<strong>to</strong>re <strong>di</strong><br />

Lag tra 0 e 1000 millisecon<strong>di</strong>.<br />

La lista contenuta in Time viene popolata perio<strong>di</strong>camente grazie al comando<br />

TimeSync: ogni <strong>Peer</strong> invia agli altri <strong>Peer</strong> conosciuti <strong>un</strong> comando<br />

TimeSync contenente il proprio TimeStamp. Quando ques<strong>to</strong> viene ricevu<strong>to</strong>,<br />

verrà esegui<strong>to</strong> quan<strong>to</strong> implementa<strong>to</strong> nel <strong>su</strong>o me<strong>to</strong>do Exec(), ovvero verrà<br />

calcola<strong>to</strong> il delta tra il TimeStamp ricevu<strong>to</strong> e quello ri<strong>to</strong>rna<strong>to</strong> dal me<strong>to</strong>do<br />

Now() relativo all’istanza Time appartenente al <strong>Peer</strong> destinatario. Quin<strong>di</strong><br />

inseri<strong>to</strong> nella lista, in<strong>di</strong>cizza<strong>to</strong> utilizzando il NetID del mittente.<br />

3.4 Modulo SharedComponents<br />

Il modulo si basa <strong>su</strong>l concet<strong>to</strong> <strong>di</strong> SharedComponent, implementa<strong>to</strong> nell’omonima<br />

classe. Le istanze <strong>di</strong> tale classe sono gestite e memorizzate in<br />

<strong>un</strong>’apposi<strong>to</strong> Manager (ISharedComponentsManager), e create da <strong>un</strong>’apposi<strong>to</strong><br />

Fac<strong>to</strong>ry (ISharedComponentsFac<strong>to</strong>ry).

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

Saved successfully!

Ooh no, something went wrong!