Files
2022-12-13 12:44:04 +01:00

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