00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef NEWNET_REACTOR_H
00021 #define NEWNET_REACTOR_H
00022
00023 #include "nnobject.h"
00024 #include "nnsocket.h"
00025 #include "nnrefptr.h"
00026 #include "nnevent.h"
00027 #include <vector>
00028
00029 namespace NewNet
00030 {
00032
00034 class Reactor : public Object
00035 {
00036 public:
00038
00039 Reactor();
00040
00041 #ifndef DOXYGEN_UNDOCUMENTED
00042 ~Reactor();
00043 #endif // DOXYGEN_UNDOCUMENTED
00044
00046
00049 void add(Socket * socket);
00050
00052
00055 void remove(Socket * socket);
00056
00058
00062 void run();
00063
00065
00067 void stop();
00068
00070
00073 typedef Event<long> Timeout;
00074
00076
00079 Timeout::Callback * addTimeout(long msec, Timeout::Callback * callback);
00080
00082
00085 template<class ObjectType, typename MethodType>
00086 Timeout::Callback * addTimeout(long msec, ObjectType * object, MethodType method)
00087 {
00088 return addTimeout(msec, Timeout::bind(object, method));
00089 }
00090
00091 private:
00092 bool m_StopReactor;
00093 std::vector<RefPtr<Socket> > m_Sockets;
00094 #ifndef DOXYGEN_UNDOCUMENTED
00095 struct Timeouts;
00096 struct Timeouts * m_Timeouts;
00097 #endif
00098 };
00099 }
00100
00101 #endif // NEWNET_REACTOR_H