00001
00002
00003 #ifndef BASE_STEVENTDAEMON_H
00004 #define BASE_STEVENTDAEMON_H
00005
00006 #include "Daemon.h"
00007 #include "DynamicArray.h"
00008 #include "Socket.h"
00009
00010 namespace base {
00012
00016 class PPBASE_EXPORT STEventDaemon: public Daemon {
00017 public:
00018 #ifdef _WIN32
00019
00020
00025 typedef void (*handleCallback)(HANDLE h, bool abandoned, void *user);
00026 #else
00027
00028
00033 typedef void (*fdCallback)(int fd, int what, void *user);
00034 #endif
00035
00037 virtual ~STEventDaemon();
00038
00039 #ifdef _WIN32
00040
00041
00046 void addCallback(HANDLE h, handleCallback callback, void *user = NULL);
00047 #else
00048
00049
00054 void addCallback(int fd, fdCallback callback, void *user = NULL);
00055 #endif
00056
00057 #ifdef _WIN32
00058
00059
00062 void delCallback(HANDLE h);
00063 #else
00064
00065
00068 void delCallback(int fd);
00069 #endif
00070
00071 protected:
00073
00076 STEventDaemon(const String &name);
00077
00079 virtual void config();
00080
00082
00087 bool dumpState(bool force);
00088
00090
00093 virtual int loop();
00094
00095 #ifdef _WIN32
00096 DynamicArray<HANDLE> _handles;
00097 std::map<HANDLE, std::pair<handleCallback, void*> > _handlecallbacks;
00098 #else
00099 DynamicArray<int> _fds;
00100 std::map<int, std::pair<fdCallback, void*> > _fdcallbacks;
00101 #endif
00102 };
00103 }
00104
00105 #endif