00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #ifndef ARSERVERCONFIGHANDLER_H
00027 #define ARSERVERCONFIGHANDLER_H
00028
00029 #include "Aria.h"
00030 #include "ArServerBase.h"
00031
00032 class ArServerClient;
00033
00035
00108 class ArServerHandlerConfig
00109 {
00110 public:
00111
00113
00123 AREXPORT ArServerHandlerConfig(ArServerBase *server,
00124 ArConfig *config,
00125 const char *defaultFile = NULL,
00126 const char *defaultFileBaseDirectory = NULL);
00127
00129 AREXPORT virtual ~ArServerHandlerConfig();
00130
00131
00132
00133
00134
00136 AREXPORT void reloadConfig(ArServerClient *client, ArNetPacket *packet);
00137
00139 AREXPORT void getConfigBySections(ArServerClient *client, ArNetPacket *packet);
00140
00142 AREXPORT void getConfig(ArServerClient *client, ArNetPacket *packet);
00143
00145 AREXPORT void setConfig(ArServerClient *client, ArNetPacket *packet);
00146
00148 AREXPORT void getConfigDefaults(ArServerClient *client, ArNetPacket *packet);
00149
00151 AREXPORT void getConfigSectionFlags(ArServerClient *client,
00152 ArNetPacket *packet);
00153
00154
00155
00156
00157
00159 AREXPORT void addPreWriteCallback(ArFunctor *functor,
00160 ArListPos::Pos position = ArListPos::LAST);
00162 AREXPORT void remPreWriteCallback(ArFunctor *functor);
00163
00165 AREXPORT void addPostWriteCallback(ArFunctor *functor,
00166 ArListPos::Pos position = ArListPos::LAST);
00168 AREXPORT void remPostWriteCallback(ArFunctor *functor);
00169
00171 AREXPORT void addConfigUpdatedCallback(ArFunctor *functor,
00172 ArListPos::Pos position = ArListPos::LAST);
00174 AREXPORT void remConfigUpdatedCallback(ArFunctor *functor);
00175
00177 AREXPORT int lockConfig(void) { return myConfigMutex.lock(); }
00179 AREXPORT int tryLockConfig(void) { return myConfigMutex.tryLock(); }
00181 AREXPORT int unlockConfig(void) { return myConfigMutex.unlock(); }
00182
00184 AREXPORT bool writeConfig(void);
00186 AREXPORT bool configUpdated(ArServerClient *client = NULL);
00187
00188
00190 AREXPORT bool loadDefaultsFromFile(void);
00192 AREXPORT bool loadDefaultsFromPacket(ArNetPacket *packet);
00194 AREXPORT void createEmptyConfigDefaults(void);
00195 protected:
00196
00198 AREXPORT void handleGetConfig(ArServerClient *client,
00199 ArNetPacket *packet,
00200 bool isMultiplePackets);
00201
00204 bool internalSetConfig(ArServerClient *client, ArNetPacket *packet);
00205
00207 void createDefaultConfig(const char *defaultFileBaseDir);
00209 void addDefaultServerCommands(void);
00210
00211 ArServerBase *myServer;
00212 ArConfig *myConfig;
00213
00214
00215 ArConfig *myDefault;
00216 std::string myDefaultFile;
00217 std::string myDefaultFileBaseDir;
00218 ArMutex myDefaultConfigMutex;
00219 bool myAddedDefaultServerCommands;
00220
00221 ArMutex myConfigMutex;
00222
00223 std::list<ArFunctor *> myPreWriteCallbacks;
00224 std::list<ArFunctor *> myPostWriteCallbacks;
00225 std::list<ArFunctor *> myConfigUpdatedCallbacks;
00226
00227 ArFunctor2C<ArServerHandlerConfig, ArServerClient*, ArNetPacket *> myGetConfigBySectionsCB;
00228 ArFunctor2C<ArServerHandlerConfig, ArServerClient*, ArNetPacket *> myGetConfigCB;
00229 ArFunctor2C<ArServerHandlerConfig, ArServerClient*, ArNetPacket *> mySetConfigCB;
00230 ArFunctor2C<ArServerHandlerConfig, ArServerClient*, ArNetPacket *> myReloadConfigCB;
00231 ArFunctor2C<ArServerHandlerConfig, ArServerClient*, ArNetPacket *> myGetConfigDefaultsCB;
00232 ArFunctor2C<ArServerHandlerConfig, ArServerClient*, ArNetPacket *> myGetConfigSectionFlagsCB;
00233
00234 };
00235
00236 #endif