00001
00002
00003
00004
00005
00006
00007
00008 #ifndef BOOSTER_AIO_IO_SERVICE_H
00009 #define BOOSTER_AIO_IO_SERVICE_H
00010
00011 #include <booster/config.h>
00012 #include <booster/aio/aio_config.h>
00013 #include <booster/aio/types.h>
00014 #include <booster/thread.h>
00015 #include <booster/system_error.h>
00016 #include <booster/aio/aio_category.h>
00017 #include <booster/callback.h>
00018 #include <booster/noncopyable.h>
00019 #include <string>
00020 #include <memory>
00021
00022 namespace booster {
00023 class ptime;
00024 namespace aio {
00025
00026 class event_loop_impl;
00027
00028
00037 class BOOSTER_API io_service : public noncopyable, public io_events {
00038 public:
00039
00043 io_service(int reactor_type);
00047 io_service();
00051 ~io_service();
00052
00062 void set_io_event(native_type fd,int event,event_handler const &h);
00067 void cancel_io_events(native_type fd);
00068
00080 int set_timer_event(ptime const &point,event_handler const &h);
00081
00085 void cancel_timer_event(int event_id);
00086
00096 void run();
00097
00102 void run(system::error_code &e);
00103
00107 void reset();
00112 void stop();
00113
00118 void post(handler const &h);
00119
00123
00124 std::string reactor_name();
00125 private:
00126 struct data;
00127 hold_ptr<data> d;
00128 std::auto_ptr<event_loop_impl> impl_;
00129 };
00130
00131 }
00132 }
00133
00134 #endif