66 lines
1.6 KiB
C++
66 lines
1.6 KiB
C++
#ifndef _CDEV_REACTOR_H_
|
|
#define _CDEV_REACTOR_H_ 1
|
|
|
|
#include "cdevTime.h"
|
|
#include "cdevHandleSet.h"
|
|
#include "cdevEventHandler.h"
|
|
|
|
class CDEV_REACTOR_API cdevReactor
|
|
{
|
|
public:
|
|
typedef enum {
|
|
INPUT = 0,
|
|
OUTPUT = 1,
|
|
EXCEPTION = 2,
|
|
SIGNAL = 3
|
|
} REACTOR_EVENT;
|
|
|
|
typedef enum {
|
|
REACTOR_ERROR = -1,
|
|
SUCCESS = 0,
|
|
INVALID_HANDLE = 1,
|
|
INVALID_HANDLER = 2,
|
|
HANDLE_EXISTS = 3,
|
|
UNKNOWN_HANDLER = 4,
|
|
INVALID_TIMEOUT = 5
|
|
} REACTOR_RESULT;
|
|
|
|
typedef enum {
|
|
UNTIL_TIMEOUT = 0,
|
|
UNTIL_EVENT = 1
|
|
} HANDLE_EVENT_FLAG;
|
|
|
|
protected:
|
|
static int netInitCount;
|
|
|
|
int maxEntries;
|
|
int size;
|
|
cdevHandleSet read_set;
|
|
cdevHandleSet write_set;
|
|
cdevHandleSet except_set;
|
|
cdevEventHandler ** handlers;
|
|
cdevEventHandler * timers;
|
|
|
|
private:
|
|
void calculateMask ( void );
|
|
int calculateTimeout ( cdevTime defaultPeriod, struct timeval &timeout );
|
|
int handleFileEvent ( cdevHandleSet * fds, REACTOR_EVENT event);
|
|
public:
|
|
cdevReactor ( void );
|
|
virtual ~cdevReactor ( void );
|
|
|
|
virtual int checkHandlers ( void );
|
|
virtual int registerHandler ( cdevEventHandler * handler, unsigned mask );
|
|
virtual int removeHandler ( cdevEventHandler * handler );
|
|
virtual int removeHandler ( int fd );
|
|
virtual int extractHandler ( cdevEventHandler * handler );
|
|
virtual int getHandler ( int fd, cdevEventHandler * &handler );
|
|
|
|
virtual int registerTimer ( cdevEventHandler * timer );
|
|
virtual int cancelTimer ( cdevEventHandler * timer );
|
|
|
|
virtual int handleEvents ( cdevTime period = -1.0, int flags = UNTIL_TIMEOUT );
|
|
};
|
|
|
|
#endif
|