00001 // 00002 // File: ConnectionHandler.h 00003 // Created by: <Detro /> aka Ivan De Marino 00004 // <detro@mandolinux.org, demarino@studenti.unina.it, demarino@na.astro.it> 00005 // Created on: Sun Oct 24 13:52:38 2004 00006 // 00007 00008 #ifndef _CONNECTIONHANDLER_H_ 00009 #define _CONNECTIONHANDLER_H_ 00010 00011 #define NAME_MAX_LENGTH 256 00012 00013 #include <cc++/socket.h> 00014 #include <list> 00015 #include <vector> 00016 #include <iostream> 00017 using namespace std; 00018 #include "Game.h" 00019 #include "Player.h" 00020 #include "TFactory.h" 00021 00022 /** 00023 * @class ConnectionHandler ConnectionHandler.h 00024 * Handler delle Connessioni istanziato da @c Server. 00025 * Questa classe e' un @c Thread che hai il compito di 00026 * gestire tutta l'interazione con l'utente che si connette: 00027 * <ul> 00028 * <li> Richiede un Nick Name </li> 00029 * <li> Visualizza la lista dei @c Game 00030 * attualmente in esecuzione </li> 00031 * <li> Visualizza la lista di tutti i @c Game disponibili </li> 00032 * <li> Su richiesta dell'utente 00033 * <ul> 00034 * <li> o lo "inserisce" in un @c Game esistente </li> 00035 * <li> o crea un nuovo @c Game </li> 00036 * </ul> 00037 * </li> 00038 * </ul> 00039 * 00040 * Questa Classe eredita da <code>TCPSession</code>, che a sua volta 00041 * eredita da <code>Thread</code> e da <code>Socket</code>: 00042 * cio' rende questa Classe un "flusso di controllo a se stante", 00043 * che opera, per ovvie esigenze di concorrenza, in maniera <b>asincrona</b> 00044 * rispetto al Server principale. */ 00045 class ConnectionHandler : public TCPSession { 00046 public: 00047 ConnectionHandler(TCPSocket &, vector <Game *> &, 00048 vector < pair< string, TFactory<Game*> *> *> &); 00049 virtual ~ConnectionHandler(void); 00050 private: 00051 void run(void); 00052 void final(void); 00053 void printActiveGameList(void); 00054 bool joinPlayerToActiveGame(Player *, const char); 00055 void printAvailableGameList(void); 00056 bool joinPlayerToAvailableGame(Player *, const char); 00057 00058 /** Puntatore al @c Player gestito da questo @c ConnectionHandler */ 00059 Player *player; 00060 /** Vettore dei @c Game in esecuzione su MGS */ 00061 vector <Game *> &activeGames; 00062 /** 00063 * Vettore dei @c Game disponibili su MGS. 00064 * Ha la peculitarita' di permettere un accesso istantaneo ai 00065 * Name dei Game e alle relative Factory, ottimizzando cosi' 00066 * le prestazioni. */ 00067 vector < pair< string, TFactory<Game*> *> *> &availableGames; 00068 /** @b Mutex (anche detto @a Semaforo) per le @a Sezioni @a Critiche */ 00069 static Mutex mutex; 00070 }; 00071 00072 00073 #endif //_CONNECTIONHANDLER_H_