UniSet  2.6.0
EventLoopServer.h
00001 // -------------------------------------------------------------------------
00002 #ifndef EventLoopServer_H_
00003 #define EventLoopServer_H_
00004 // -------------------------------------------------------------------------
00005 #include <ev++.h>
00006 #include <atomic>
00007 #include <thread>
00008 // -------------------------------------------------------------------------
00009 namespace uniset
00010 {
00016 class EventLoopServer
00017 {
00018     public:
00019 
00020         EventLoopServer();
00021         virtual ~EventLoopServer();
00022 
00023         bool evIsActive() const noexcept;
00024 
00025     protected:
00026         // действия при завершении
00027         // завершение своих ev::xxx.stop()
00028         virtual void evfinish() {}
00029 
00030         // подготовка перед запуском loop
00031         // запусу своих ev::xxx.start()
00032         virtual void evprepare() {}
00033 
00034         // Управление потоком событий
00035         void evrun( bool thread = true );
00036         void evstop();
00037 
00038         ev::dynamic_loop loop;
00039 
00040     private:
00041 
00042         void onStop() noexcept;
00043         void defaultLoop() noexcept;
00044 
00045         std::atomic_bool cancelled = { false };
00046         std::atomic_bool isrunning = { false };
00047 
00048         ev::async evterm;
00049         std::shared_ptr<std::thread> thr;
00050 };
00051 // -------------------------------------------------------------------------
00052 } // end of uniset namespace
00053 // -------------------------------------------------------------------------
00054 #endif // EventLoopServer_H_
00055 // -------------------------------------------------------------------------