00001 // $Id: FdManager.hh 1742 2010-11-04 14:51:56Z g0dil $ 00002 // 00003 // Copyright (C) 2008 00004 // Fraunhofer (FOKUS) 00005 // Competence Center NETwork research (NET), St. Augustin, GERMANY 00006 // Stefan Bund <g0dil@berlios.de> 00007 // 00008 // This program is free software; you can redistribute it and/or modify 00009 // it under the terms of the GNU General Public License as published by 00010 // the Free Software Foundation; either version 2 of the License, or 00011 // (at your option) any later version. 00012 // 00013 // This program is distributed in the hope that it will be useful, 00014 // but WITHOUT ANY WARRANTY; without even the implied warranty of 00015 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00016 // GNU General Public License for more details. 00017 // 00018 // You should have received a copy of the GNU General Public License 00019 // along with this program; if not, write to the 00020 // Free Software Foundation, Inc., 00021 // 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 00022 00026 #ifndef HH_SENF_Scheduler_FdManager_ 00027 #define HH_SENF_Scheduler_FdManager_ 1 00028 00029 // Custom includes 00030 #include "Poller.hh" 00031 #include "ClockService.hh" 00032 #include <senf/Utils/singleton.hh> 00033 00034 //#include "FdManager.mpp" 00035 //-///////////////////////////////////////////////////////////////////////////////////////////////// 00036 00037 namespace senf { 00038 namespace scheduler { 00039 00040 void restart(); 00041 00042 namespace detail { 00043 00044 class FdManager 00045 : public singleton<FdManager> 00046 { 00047 public: 00049 struct Event { 00050 virtual ~Event(); 00051 virtual void signal(int events) = 0; 00052 }; 00053 00054 enum Events { 00055 EV_READ = Poller<Event>::EV_READ, EV_PRIO = Poller<Event>::EV_PRIO, EV_WRITE = Poller<Event>::EV_WRITE, 00056 EV_HUP = Poller<Event>::EV_HUP, EV_ERR = Poller<Event>::EV_ERR 00057 }; 00058 00059 using singleton<FdManager>::instance; 00060 using singleton<FdManager>::alive; 00061 00062 bool set(int fd, int events, Event * entry); 00063 void remove(int fd); 00064 00065 // Called by FileDispatcher 00066 void timeout(int t); 00067 int timeout() const; 00068 00069 void processOnce(); 00070 00072 ClockService::clock_type eventTime() const; 00073 00074 protected: 00075 00076 private: 00077 FdManager(); 00078 00079 Poller<Event> poller_; 00080 senf::ClockService::clock_type eventTime_; 00081 00082 friend void senf::scheduler::restart(); 00083 friend class singleton<FdManager>; 00084 }; 00085 00086 }}} 00087 00088 //-///////////////////////////////////////////////////////////////////////////////////////////////// 00089 #include "FdManager.cci" 00090 //#include "FdManager.ct" 00091 //#include "FdManager.cti" 00092 #endif 00093 00094 00095 // Local Variables: 00096 // mode: c++ 00097 // fill-column: 100 00098 // comment-column: 40 00099 // c-file-style: "senf" 00100 // indent-tabs-mode: nil 00101 // ispell-local-dictionary: "american" 00102 // compile-command: "scons -u test" 00103 // End: