/Desktop/MGS-MultithreadedGameServer/ConnectionHandler.h

Vai alla documentazione di questo file.
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_

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