Main Page | Class Hierarchy | Class List | Directories | File List | Class Members | File Members | Related Pages | Examples

ArServerHandlerConfig.h

Go to the documentation of this file.
00001 /*
00002 MobileRobots Advanced Robotics Interface for Applications (ARIA)
00003 Copyright (C) 2004, 2005 ActivMedia Robotics LLC
00004 Copyright (C) 2006, 2007 MobileRobots Inc.
00005 
00006      This program is free software; you can redistribute it and/or modify
00007      it under the terms of the GNU General Public License as published by
00008      the Free Software Foundation; either version 2 of the License, or
00009      (at your option) any later version.
00010 
00011      This program is distributed in the hope that it will be useful,
00012      but WITHOUT ANY WARRANTY; without even the implied warranty of
00013      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00014      GNU General Public License for more details.
00015 
00016      You should have received a copy of the GNU General Public License
00017      along with this program; if not, write to the Free Software
00018      Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00019 
00020 If you wish to redistribute ARIA under different terms, contact 
00021 MobileRobots for information about a commercial version of ARIA at 
00022 robots@mobilerobots.com or 
00023 MobileRobots Inc, 19 Columbia Drive, Amherst, NH 03031; 800-639-9481
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   // Network Packet Handlers 
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   // Callback Methods
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

Generated on Tue Feb 20 10:51:50 2007 for ArNetworking by  doxygen 1.4.0