STEventDaemon.h

00001 // $Id: STEventDaemon.h 21 2010-09-05 04:18:17Z cschwarz1 $
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