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 23/01/2008 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 ROUTINE Function; /*!< Nom de la fonction à éxécuté. */ 00026 char *Mask; /*!< Syntax de la requette.\n */ 00027 } NetRequest; 00028 00029 //! Data des paramétres. 00030 /*! Data des paramétres passé à la fonction d'une requette du protocol reseau. 00031 */ 00032 typedef struct _NetRequestData 00033 { 00034 char *Label; /*!< Label du paramtre. */ 00035 char *Data; /*!< Data. */ 00036 int Size; /*!< Taille de la data. */ 00037 } NetRequestData; 00038 00039 //! Parametre pour une requette. 00040 /*! Parametre passé à la fonction d'une requette du protocol reseau. 00041 */ 00042 class NetRequestParameter 00043 { 00044 private : 00045 int NbParameter; /*!< Nombre de paramétre. */ 00046 std::vector<NetRequestData *> Parameters; /*!< Chaque ligne est un paramétre. */ 00047 NetConnect *Connect; /*!< Classe d'info sur la connection. */ 00048 00049 public : 00050 /*! Initialise avec des paramétres par defaut. 00051 */ 00052 NetRequestParameter(NetConnect *pConnect); 00053 00054 /*! Libère la mémoire proprement 00055 */ 00056 ~NetRequestParameter(); 00057 00058 //! Ajoute un parametre. 00059 /*! Ajoute un parametre de la requette. 00060 \param pLabel pointeur sur le label. 00061 \param pData pointeur sur la data. 00062 \return Code d'erreur. 00063 \sa Get(), GetAsInt(), GetAsFloat() et GetAsChar(). 00064 */ 00065 int Add(char *pLabel, char *pData); 00066 00067 //! Retourne un parametre. 00068 /*! Retourne un parametre de la requette. 00069 \param pLabel nom du parametre. 00070 \return un pointeur sur le parametre. 00071 \sa GetAsInt(), GetAsFloat() et GetChar(). 00072 */ 00073 inline char *Get(char *pLabel) 00074 { 00075 for(int i = 0; i < NbParameter; i++) 00076 if(!strcmp(Parameters[i]->Label, pLabel)) 00077 return Parameters[i]->Data; 00078 00079 return NULL; 00080 }; 00081 00082 //! Retourne la taille d'un parametre. 00083 /*! Retourne la taille d'un parametre de la requette. 00084 \param pLabel nom du parametre. 00085 \return la taille du parametre. 00086 \sa Get(). 00087 */ 00088 inline int GetSize(char *pLabel) 00089 { 00090 for(int i = 0; i < NbParameter; i++) 00091 if(!strcmp(Parameters[i]->Label, pLabel)) 00092 return Parameters[i]->Size; 00093 00094 return 0; 00095 }; 00096 00097 //! Retourne une data \a int. 00098 /*! Retourne une data de type \a int. 00099 \param pLabel nom du parametre. 00100 \return le parametre sous forme d'entier. 00101 \sa Get(), GetAsFloat() et GetAsChar(). 00102 */ 00103 inline int GetAsInt(char *pLabel) 00104 { 00105 return AtoI(Get(pLabel)); 00106 }; 00107 00108 //! Retourne une data \a float. 00109 /*! Retourne une data de type \a float. 00110 \param pLabel nom du parametre. 00111 \return le parametre sous forme de réel. 00112 \sa Get(), GetAsInt() et GetAsChar(). 00113 */ 00114 inline float GetAsFloat(char *pLabel) 00115 { 00116 return AtoF(Get(pLabel)); 00117 }; 00118 00119 //! Retourne une data \a char. 00120 /*! Retourne une data de type \a char. 00121 \param pLabel nom du parametre. 00122 \return le parametre sous forme de carractère. 00123 \sa Get(), GetAsInt() et GetAsFloat(). 00124 */ 00125 inline char GetAsChar(char *pLabel) 00126 { 00127 return *Get(pLabel); 00128 }; 00129 00130 //! Retourne le nombre de datas. 00131 /*! Retourne le nombre de datas du paramétre. 00132 \return nombre de requette du parser. 00133 */ 00134 inline int GetNbParameter() 00135 { 00136 return NbParameter; 00137 }; 00138 00139 //! Retourne un pointeur sur les infos de la connection. 00140 /*! Retourne ub pointeur sur les info de la connection \a Connect . 00141 \return Pointeur sur \a Connect . 00142 */ 00143 inline NetConnect *GetConnect() 00144 { 00145 return Connect; 00146 }; 00147 00148 //! Retourne l'ip. 00149 /*! Retourne l'ip de la connection. 00150 \return Pointeur sur l'ip. 00151 */ 00152 inline char *GetIp() 00153 { 00154 return Connect->Ip; 00155 }; 00156 00157 //! Retourne le port. 00158 /*! Retourne le port de la connection. 00159 \return port de la connection. 00160 */ 00161 inline int GetPort() 00162 { 00163 return Connect->Port; 00164 }; 00165 00166 //! Envoie les données. 00167 /*! Envoie les données \a Buffer à \a Ip. 00168 \param pBuffer chaine construite comme pour printf. 00169 \param ... argument pour construire la chaine 00170 \return Code d'erreur. 00171 */ 00172 int Send(char *pBuffer, ...); 00173 }; 00174 00175 00176 #endif 00177