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.
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).