00001 /*! \file NetRequest.h 00002 \brief Structures pour parser. 00003 00004 Structures utilisé par les parser de protocol programmable. 00005 00006 \author aerith (www.aerith.fr) 00007 \version 1.0 00008 \date 26/07/2007 00009 */ 00010 00011 #ifndef INCLUDE_RSRC_NET_REQUEST 00012 #define INCLUDE_RSRC_NET_REQUEST 00013 00014 00015 #include "../Tools/Tools.h" 00016 #include "NetConnect.h" 00017 #include <vector> 00018 00019 //! Information sur une requette. 00020 /*! Information sur une requette du protocol reseau. 00021 */ 00022 typedef struct _NetRequest 00023 { 00024 public : 00025 char *Name; /*!< Nom de la requette. */ 00026 int Pos; /*!< Position du nom \a Name dans la requette. */ 00027 ROUTINE Function; /*!< Nom de la fonction à éxécuté. */ 00028 char *Mask; /*!< Syntax de la requette.\n */ 00029 int Complet; /*!< Exige que \a Mask soit complement parser */ 00030 char *Toks; /*!< Tokens utiliser pour rechercher \a Name. */ 00031 } NetRequest; 00032 00033 //! Data des paramétres. 00034 /*! Data des paramétres passé à la fonction d'une requette du protocol reseau. 00035 */ 00036 typedef struct _NetRequestData 00037 { 00038 char *Label; /*!< Label du paramtre. */ 00039 char *Data; /*!< Data. */ 00040 int Size; /*!< Taille de la data. */ 00041 } NetRequestData; 00042 00043 //! Parametre pour une requette. 00044 /*! Parametre passé à la fonction d'une requette du protocol reseau. 00045 */ 00046 class NetRequestParameter 00047 { 00048 private : 00049 char Name[NET_NAME]; /*!< Nom de la requette. */ 00050 int Pos; /*!< Position de \a Name dans la requette. */ 00051 int NbParameter; /*!< Nombre de paramétre. */ 00052 std::vector<NetRequestData *> Parameters; /*!< Chaque ligne est un paramétre. */ 00053 NetConnect *Connect; /*!< Classe d'info sur la connection. */ 00054 00055 public : 00056 /*! Initialise avec des paramétres par defaut. 00057 */ 00058 NetRequestParameter(NetConnect *pConnect); 00059 00060 /*! Libère la mémoire proprement 00061 */ 00062 ~NetRequestParameter(); 00063 00064 //! Définit le nom de la requette. 00065 /*! Définit le nom \a Name et la position \a Pos de la requette. 00066 \param pName nom de la requette. 00067 \param iPos position du nom 00068 */ 00069 void SetName(char *pName, int iPos); 00070 00071 //! Retourne le nom de la requette. 00072 /*! Retourne le nom \a Name de la requette. 00073 \return pointeur sur le nom 00074 */ 00075 char *GetName() 00076 { 00077 return Name; 00078 }; 00079 00080 //! Retourne la position du nom de la requette. 00081 /*! Retourne la position \a Pos du nom de la requette. 00082 \return positin du nom 00083 */ 00084 int GetPos() 00085 { 00086 return Pos; 00087 }; 00088 00089 //! Ajoute un parametre. 00090 /*! Ajoute un parametre de la requette. 00091 \param pLabel pointeur sur le label. 00092 \param pData pointeur sur la data. 00093 \return Code d'erreur. 00094 \sa Get(), GetAsInt(), GetAsFloat() et GetAsChar(). 00095 */ 00096 int Add(char *pLabel, char *pData); 00097 00098 //! Retourne un parametre. 00099 /*! Retourne un parametre de la requette. 00100 \param pLabel nom du parametre. 00101 \return un pointeur sur le parametre. 00102 \sa GetAsInt(), GetAsFloat() et GetChar(). 00103 */ 00104 inline char *Get(char *pLabel) 00105 { 00106 for(int i = 0; i < NbParameter; i++) 00107 if(!strcmp(Parameters[i]->Label, pLabel)) 00108 return Parameters[i]->Data; 00109 00110 return NULL; 00111 }; 00112 00113 //! Retourne la taille d'un parametre. 00114 /*! Retourne la taille d'un parametre de la requette. 00115 \param pLabel nom du parametre. 00116 \return la taille du parametre. 00117 \sa Get(). 00118 */ 00119 inline int GetSize(char *pLabel) 00120 { 00121 for(int i = 0; i < NbParameter; i++) 00122 if(!strcmp(Parameters[i]->Label, pLabel)) 00123 return Parameters[i]->Size; 00124 00125 return 0; 00126 }; 00127 00128 //! Retourne une data \a int. 00129 /*! Retourne une data de type \a int. 00130 \param pLabel nom du parametre. 00131 \return le parametre sous forme d'entier. 00132 \sa Get(), GetAsFloat() et GetAsChar(). 00133 */ 00134 inline int GetAsInt(char *pLabel) 00135 { 00136 return AtoI(Get(pLabel)); 00137 }; 00138 00139 //! Retourne une data \a float. 00140 /*! Retourne une data de type \a float. 00141 \param pLabel nom du parametre. 00142 \return le parametre sous forme de réel. 00143 \sa Get(), GetAsInt() et GetAsChar(). 00144 */ 00145 inline float GetAsFloat(char *pLabel) 00146 { 00147 return AtoF(Get(pLabel)); 00148 }; 00149 00150 //! Retourne une data \a char. 00151 /*! Retourne une data de type \a char. 00152 \param pLabel nom du parametre. 00153 \return le parametre sous forme de carractère. 00154 \sa Get(), GetAsInt() et GetAsFloat(). 00155 */ 00156 inline char GetAsChar(char *pLabel) 00157 { 00158 return *Get(pLabel); 00159 }; 00160 00161 //! Retourne le nombre de datas. 00162 /*! Retourne le nombre de datas du paramétre. 00163 \return nombre de requette du parser. 00164 */ 00165 inline int GetNbParameter() 00166 { 00167 return NbParameter; 00168 }; 00169 00170 //! Retourne un pointeur sur les infos de la connection. 00171 /*! Retourne ub pointeur sur les info de la connection \a Connect . 00172 \return Pointeur sur \a Connect . 00173 */ 00174 inline NetConnect *GetConnect() 00175 { 00176 return Connect; 00177 }; 00178 00179 //! Retourne l'ip. 00180 /*! Retourne l'ip de la connection. 00181 \return Pointeur sur l'ip. 00182 */ 00183 inline char *GetIp() 00184 { 00185 return Connect->Ip; 00186 }; 00187 00188 //! Retourne le port. 00189 /*! Retourne le port de la connection. 00190 \return port de la connection. 00191 */ 00192 inline int GetPort() 00193 { 00194 return Connect->Port; 00195 }; 00196 00197 //! Envoie les données. 00198 /*! Envoie les données \a Buffer à \a Ip. 00199 \param pBuffer chaine construite comme pour printf. 00200 \param ... argument pour construire la chaine 00201 \return Code d'erreur. 00202 */ 00203 int Send(char *pBuffer, ...); 00204 }; 00205 00206 00207 #endif 00208