Page principale | Liste alphabétique | Liste des classes | Liste des fichiers | Membres de classe | Membres de fichier | Pages associées

NetServer.h

Aller à la documentation de ce fichier.
00001 /*! \file NetServer.h
00002     \brief Systeme serveur.
00003 
00004     Serveur multitache.
00005 
00006     \author     aerith (http://aerith.fr)
00007     \version    2.0
00008     \date       153003/2008
00009 */
00010 
00011 
00012 #ifndef INCLUDE_RSRC_NET_SERVER
00013 #define INCLUDE_RSRC_NET_SERVER
00014 
00015 #include    "../Surcouche/SurcoucheReseau.h"
00016 #include    "../Surcouche/SurcoucheMultitache.h"
00017 #include    "../Surcouche/SurcoucheTemp.h"
00018 #include    "../Tools/Tools.h"
00019 #include    "../Error/Error.h"
00020 #include    "NetConnect.h"
00021 #include    <vector>
00022 
00023 #define     NET_LIMIT           100                 /*!< Nombre max de client par défaut.           */
00024 #define     NET_GARBAGE         100                 /*!< Rafrachissement du garbage des clients.    */
00025 #define     NET_WAIT_FULL       10                  /*!< Temp d'attente si serveur plein.           */
00026 
00027 //! Systeme serveur.
00028 /*! Serveur multiclient et multitache autonome.
00029 */
00030 class NetServer
00031 {
00032 private :
00033     NetConnect                  *conInfo;           /*!< Information sur la connection du serveur.  */
00034     THREAD                      threadClients;      /*!< Thread d'attente de client.                */
00035     THREAD                      threadGarbage;      /*!< Thread de suppression de client.           */
00036     std::vector<NetConnect *>   clients;            /*!< Chaque ligne est les infos d'un client.    */
00037     ROUTINE                     routineClient;      /*!< Routine executé pour gérer un client.      */
00038     unsigned int                limit;              /*!< Nombre de client max connecté.             */
00039     SSL_CTX                     *sslCTX;            /*!< Contexte pour OpenSSL.                     */
00040     string                      keyFile;            /*!< Chemin vers la clé privée SSL.             */
00041     string                      certifFile;         /*!< Chemin vers le certificat SSL.             */
00042     unsigned int                crypt;              /*!< Cryptage activé.                           */
00043 
00044 public  :
00045     /*! Initialise avec des paramétres par defaut.
00046         \param pKeyFile chemin vers la clé privée SSL du serveur
00047         \param pCertifFile chemin vers le certificat SSL du serveur
00048     */
00049     NetServer(const char *pKeyFile = NULL, const char *pCertifFile = NULL);
00050     
00051     /*! Libère la mémoire proprement
00052     */
00053     ~NetServer();
00054     
00055     //! Démare le serveur.
00056     /*! Démare le serveur.
00057         \param iPort port d'écoute
00058         \param pRoutine nom de la routine appeler pour gérée un client.
00059         \param iLimit nombre max de clients
00060     */
00061     void    Start(unsigned int iPort, ROUTINE pRoutine, unsigned int iLimit = NET_LIMIT);
00062     
00063     //! Arrète le serveur.
00064     /*! Arrète le serveur.
00065     */
00066     void    Stop();
00067 
00068     //! Retourne un client.
00069     /*! Retourne le client d'Id \a iId.
00070         \param iId Id du client.
00071         \return Pointeur sur une class \a NetConnect.
00072     */
00073     inline NetConnect   *GetClient(unsigned int iId)
00074     {
00075         for(unsigned int i = 0; i < clients.size(); i++)
00076             if(clients[i]->GetId() == iId)
00077                 return clients[i];
00078 
00079         return NULL;
00080     };
00081 
00082     //! Retourne un client.
00083     /*! Retourne le client numéro \a iNo.
00084         \param iNo numéro du client.
00085         \return Pointeur sur une class \a NetConnect.
00086     */
00087     inline NetConnect   *GetClientNo(unsigned int iNo)
00088     {
00089         if(iNo < clients.size())
00090             return clients[iNo];
00091 
00092         return NULL;
00093     };
00094 
00095     //! Déconnect un client.
00096     /*! Force la déconnéxion du client d'Id \a iId.
00097         \param iId Id du client.
00098     */
00099     void    KillClient(unsigned int iId);
00100 
00101     //! Déconnect un client.
00102     /*! Force la déconnéxion du client numéro \a iNo.
00103         \param iNo numéro du client.
00104     */
00105     void    KillClientNo(unsigned int iNo);
00106 
00107     //! Retourne le nombre de clients.
00108     /*! Retourne le nombre de client \a NbClient.
00109         \return le nombre de client \a NbClient.
00110     */
00111     inline unsigned int GetNbClient()
00112     {
00113         return clients.size();
00114     };
00115 
00116     //! Retourne le nombre de clients max.
00117     /*! Retourne le nombre de client maximum \a Limit.
00118         \return le nombre de client \a Limit.
00119     */
00120     inline unsigned int GetLimit()
00121     {
00122         return limit;
00123     };
00124 
00125     //! Attente de client.
00126     /*! Routine d'attente de client.
00127         \warning Ne pas utiliser, réservée à la class.
00128     */
00129     void    WaitClient();
00130 
00131     //! Suppression de client.
00132     /*! Routine de suppression de client.
00133         \warning Ne pas utiliser, réservée à la class.
00134     */
00135     void    GarbageClient();
00136 };
00137 
00138 
00139 #endif
00140 

Généré le Thu Jun 12 09:12:30 2008 pour A.I.F. par  doxygen 1.3.9.1