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.

74 CAPITOLO 3. IMPLEMENTAZIONE<br />

levata la connessione da parte <strong>di</strong> A, verrà crea<strong>to</strong> <strong>un</strong> TCPLink verso<br />

quest’ultimo.<br />

• TCPLink: Concretizza l’interfaccia ILink basandosi <strong>su</strong>l pro<strong>to</strong>collo TCP.<br />

Attraverso due Thread sarà possibile rispettivamente leggere e scrivere<br />

<strong>su</strong>llo stream dal proprio TCPNode all’EndPoint specifica<strong>to</strong>, e viceversa.<br />

Quando <strong>su</strong>llo stream viene in<strong>di</strong>vidua<strong>to</strong> <strong>un</strong> messaggio, cioè quando si<br />

presentano i caratteri termina<strong>to</strong>ri “\r\n”, ques<strong>to</strong> viene memorizza<strong>to</strong><br />

in <strong>un</strong>’apposita coda, e <strong>su</strong>ccessivamente, passa<strong>to</strong> al me<strong>to</strong>do ReadLine(string<br />

message). In ReadLine() viene chiama<strong>to</strong> a <strong>su</strong>a volta il me<strong>to</strong>do<br />

ProcessMessage(ILink link, string message) del proprio TCPNode, che<br />

si occuperà <strong>di</strong> processare il messaggio.<br />

3.2.1 Commands<br />

La maggior parte dei messaggi scambiati tra i no<strong>di</strong> appartenenti alla<br />

Membership è realizzata tramite i Commands.<br />

L’idea che sta alla base dei Commands ricalca quella en<strong>un</strong>ciata dal Command<br />

Pattern.<br />

Sostanzialmente ogni comando è implementa<strong>to</strong> in <strong>un</strong>’apposita classe che concretizza<br />

l’interfaccia ICommand, ed ha <strong>un</strong>a duplice f<strong>un</strong>zione:<br />

Da <strong>un</strong>a parte permette <strong>di</strong> generare in modo au<strong>to</strong>matico e <strong>un</strong>iforme la stringa<br />

da inviare come messaggio, mentre dall’altra, attraverso il me<strong>to</strong>do “Exec()”,<br />

esegue le operazioni che caratterizzano il comando stesso.<br />

A livello <strong>di</strong> Layer NET, questi sono implementati dalla classe base Net-<br />

Command, estesa poi per ogni singolo comando. Un NetCommand è in<strong>di</strong>vidua<strong>to</strong><br />

dai Parameters, dal INode destinatario e dal ILink mittente.<br />

Tra questi vi sono i 3 coman<strong>di</strong> de<strong>di</strong>cati all’HandShaking (si veda Figura 2.1):<br />

• HandShakeBegin: Nel <strong>su</strong>o me<strong>to</strong>do Exec() viene chiama<strong>to</strong> Node.Set-<br />

NewIdentifierOfLink(ILink Link, string Parameters), che confermerà o<br />

aggiornerà l’identità del Link conosciu<strong>to</strong> dal Node <strong>su</strong>l quale è sta<strong>to</strong> ese-

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

Saved successfully!

Ooh no, something went wrong!