00001 #ifndef _RDA_DEVICE_SERVER_BASE_H_
00002 #define _RDA_DEVICE_SERVER_BASE_H_
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
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
00093 static int ac;
00094 static char** av;
00095
00096
00097
00098
00099 static volatile sig_atomic_t terminateFlag_;
00100
00101
00102
00103
00104 static rdaDeviceServerBase* theServer_;
00105
00106
00107
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
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
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