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

DeviceServerBase.h

Go to the documentation of this file.
00001 #ifndef _RDA_DEVICE_SERVER_BASE_H_
00002 #define _RDA_DEVICE_SERVER_BASE_H_
00003 
00004 //
00005 // 21 Mar 2001, N.Trofimov
00006 // 05 Dec 2002 NNT for RDA-2.0
00007 //    - added getClassName()
00008 //    - removed trace level defs
00009 //    - added get methods for common loggers
00010 //    - added context argument in monitorOn
00011 // 24 Feb 2003 NNT
00012 //    - added runAborted
00013 // 10 Apr 2003 NNT
00014 //    - changes in doc comments
00015 // 13 Feb 2007 WPG
00016 //    - RBAC module integrated -- AccessMap initialization.
00017 //
00018 
00019 #include <signal.h>
00020 #include <rda/IOPoint.h>
00021 #include <rda/Data.h>
00022 #include <rda/Exception.h>
00023 #include <rda/Result.h>
00024 #include <rda/ValueChangeListener.h>
00025 #include <rda/ClientInfo.h>
00026 #include <rda/Logger.h>
00027 
00028 
00039 enum ServerStatus
00040 {
00044    STATUS_GREEN  = 0,
00048    STATUS_YELLOW = 1,
00052    STATUS_RED    = 2
00053 };
00054 
00055 
00088 class rdaDeviceServerBase
00089 {
00090    static char* name;
00091    
00092    // Used in restart
00093    static int ac;
00094    static char** av;
00095    
00096    //
00097    // Non-zero value signals the server shutdown.
00098    //
00099    static volatile sig_atomic_t terminateFlag_;
00100 
00101    //
00102    // A pointer to the single instance of the server
00103    //
00104    static rdaDeviceServerBase* theServer_;
00105    
00106    //
00107    // Used in runServer()
00108    //
00109    static void runAborted();
00110 
00111    public:
00112 
00113 
00114      virtual ~rdaDeviceServerBase();
00115      
00116      static sig_atomic_t terminateFlag() { return terminateFlag_; }
00117      
00122      static rdaDeviceServerBase* theServer() { return theServer_; }
00123 
00124 
00134      static void init(int argc, char** argv);
00135      
00150      static void runServer();     
00151 
00159      static void shutDown();
00160 
00169      static void shutDown(int signo);
00170 
00171      static long restart();
00172 
00183      virtual void shutdownHook() {}
00184 
00198      virtual bool clientConnectionHook(const rdaClientInfo& clientInfo)
00199      {
00200         return true;
00201      }
00202 
00213      static const rdaClientInfo* getClientInfo();
00214 
00219      static const char* getName() { return name; }
00220 
00241      virtual rdaData*
00242      get(const rdaIOPoint& iop, const rdaData& ctx) = 0;
00243 
00255      virtual void
00256      set(const rdaIOPoint& iop,
00257          const rdaData& ctx,
00258          const rdaData& value) = 0;
00259 
00273      virtual void 
00274      monitorOn(const rdaIOPoint& iop,
00275                const rdaData& ctx,
00276                rdaValueChangeListener* listener) = 0;
00277 
00283      virtual void 
00284      monitorOff(const rdaIOPoint& iop, rdaValueChangeListener* listener) = 0;
00286 
00293 
00315      virtual void
00316      get(const rdaIOPoint& iop, const rdaData& ctx, rdaResult* result);
00317 
00340      virtual void
00341      set(const rdaIOPoint& iop, const rdaData& ctx,
00342          const rdaData& value, rdaResult* result);
00343 
00344      virtual void cancel(rdaResult* result) {}
00345 
00347       //
00348       // TODO: doc
00349       //
00350       virtual const char* getClassName(const char* deviceName)
00351       {
00352          return "UNKNOWN";
00353       }
00471       virtual rdaData* getState() { return new rdaData; }
00472 
00512       virtual ServerStatus getStatus() { return STATUS_GREEN; }
00513       
00515       
00516      //
00517      // Common loggers
00518      //
00523       static rdaLogger* getGlobalLogger();
00527       static rdaLogger* getClientsLogger();
00531       static rdaLogger* getCallsLogger();
00535       static rdaLogger* getSubscriptionsLogger();
00536 
00537 
00538    protected:
00539    
00559      rdaDeviceServerBase(const char* serverName);
00560 };
00561 
00562 #endif

RDA-2.3 documentation - 27 Jun 2007 - N.Trofimov