/Desktop/MGS-MultithreadedGameServer/Player.cc

Vai alla documentazione di questo file.
00001 //
00002 // File: Player.cc
00003 // Created by: <Detro /> aka Ivan De Marino 
00004 // <detro@mandolinux.org, demarino@studenti.unina.it, demarino@na.astro.it>
00005 // Created on: Wed Oct 27 21:36:55 2004
00006 //
00007 
00008 #include "Player.h"
00009 
00010 /**
00011  * Costruttore della Classe Player.
00012  *
00013  * @param newName Nome/Nick del Player
00014  * @param newStream <code>TCPStream</code> 
00015  *    contenente la Connessione dell'utente */
00016 Player::Player(const string &newName, 
00017    const TCPStream &newStream, 
00018    Thread *newThread) : 
00019 TCPStream(newStream), name(newName), ConnectionHandlerThread(newThread) {}
00020 
00021 /** Distruttore Classe Player */
00022 Player::~Player(void) {}
00023 
00024 /** Ritorna il nome/nick del Player */
00025 string Player::getName(void) const {return name;}
00026 
00027 /**
00028  * Invia un messaggio all'Utente (overloaded). 
00029  *
00030  * @param message Stringa contenente il messaggio */
00031 void Player::say(const string &message) {
00032    try {
00033       *tcp() << message;
00034       TCPStream::sync();
00035    }
00036    catch (iostream::failure *stream) {
00037       cout << "<Player msg> Exception Raised during IOSTREAM write." << endl;
00038    }
00039 }
00040 
00041 /**
00042  * Invia un numero all'Utente (overloaded).
00043  *
00044  * @param number Valore(double) da inviare all'Utente */
00045 void Player::say(const double number) {
00046    try {
00047       *tcp() << number;
00048       TCPStream::sync();
00049    }
00050    catch (iostream::failure *stream) {
00051       cout << "<Player msg> Exception Raised during IOSTREAM write." << endl;
00052    }
00053 }
00054 
00055 /**
00056  * Invia un numero all'Utente (overloaded).
00057  *
00058  * @param number Valore(int) da inviare all'Utente */
00059 void Player::say(const int number) {
00060    say((double) number);
00061 }
00062 
00063 /**
00064  * Riceve un messaggio dall'Utente.
00065  * Attende un determinato numero di millisecondi
00066  * che l'utente invii un messaggio.
00067  * Nota: il messaggio inviato viene ripulito del "Carriage Return" 
00068  * finale (il carattere di escape @c "\n").
00069  *
00070  * @param timeout Tempo di attesa per il messaggio - 
00071  *    <code>default = TIMEOUT_INF</code> attende indeterminatamente 
00072  * @return Ritorna una string contenete il Messaggio digitato dall'Utente */
00073 string Player::hear(const timeout_t timeout) {  
00074    char *message;
00075    message = new char[MESSAGE_MAX_LENGTH];
00076 
00077    if( isPending(Socket::pendingInput, timeout) ) {
00078       try {
00079          /* Il metodo "getline()" dovrebbe, da solo, eliminare lo "\n"
00080           * al termine della stringa... ma non lo fa. */
00081          tcp()->getline(message, MESSAGE_MAX_LENGTH);
00082          message[strlen(message)-1] = '\0';
00083          TCPStream::sync();
00084       }
00085       catch (iostream::failure *stream) {
00086          cout << "<Player msg> Exception Raised during IOSTREAM read." << endl;
00087       }
00088    }
00089    
00090    return (string (message));
00091 }
00092 
00093 /**
00094  * Sospendi il Thread @b "ConnectionHandler" che gestisce
00095  * la connessione dell'Utente con MGS */
00096 void Player::suspendConnHandler(void) {
00097    try {
00098       ConnectionHandlerThread->suspend();
00099    }
00100    catch(Thread *t) {
00101       cout << "<Player msg> Exception Raised during ConnHeandler Suspending."
00102          << endl;
00103    }
00104 }
00105 
00106 /**
00107  * Riattiva il Thread @b "ConnectionHandler" che gestisce
00108  * la connessione dell'Utente con MGS */
00109 void Player::resumeConnHandler(void) {
00110    try {
00111       ConnectionHandlerThread->resume();
00112    }
00113    catch(Thread *t) {
00114       cout << "<Player msg> Exception Raised during ConnHeandler Resuming." 
00115          << endl;
00116    }
00117 }

Generato il Sun Nov 28 13:27:03 2004 per MGS - Multithreaded Game Server da doxygen 1.3.4