00001 #ifndef _sys_Poller_h
00002 #define _sys_Poller_h
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #include "Time.h"
00026
00027 #include <boost/shared_ptr.hpp>
00028
00029 namespace qpid {
00030 namespace sys {
00031
00035 class IOHandle;
00036 class Poller;
00037 class PollerHandlePrivate;
00038 class PollerHandle {
00039 friend class Poller;
00040
00041 PollerHandlePrivate* const impl;
00042
00043 public:
00044 PollerHandle(const IOHandle& h);
00045
00046
00047
00048 void deferDelete();
00049
00050
00051 virtual ~PollerHandle();
00052 };
00053
00058 class PollerPrivate;
00059 class Poller {
00060 PollerPrivate* const impl;
00061
00062 public:
00063 typedef boost::shared_ptr<Poller> shared_ptr;
00064
00065 enum Direction {
00066 NONE = 0,
00067 IN,
00068 OUT,
00069 INOUT
00070 };
00071
00072 enum EventType {
00073 INVALID = 0,
00074 READABLE,
00075 WRITABLE,
00076 READ_WRITABLE,
00077 DISCONNECTED,
00078 SHUTDOWN,
00079 TIMEOUT
00080 };
00081
00082 struct Event {
00083 PollerHandle* handle;
00084 EventType type;
00085
00086 Event(PollerHandle* handle0, EventType type0) :
00087 handle(handle0),
00088 type(type0) {
00089 }
00090 };
00091
00092 Poller();
00093 ~Poller();
00095 void shutdown();
00096
00097 void addFd(PollerHandle& handle, Direction dir);
00098 void delFd(PollerHandle& handle);
00099 void modFd(PollerHandle& handle, Direction dir);
00100 void rearmFd(PollerHandle& handle);
00101 Event wait(Duration timeout = TIME_INFINITE);
00102 };
00103
00104 }}
00105 #endif // _sys_Poller_h