4 // Fraunhofer Institut fuer offene Kommunikationssysteme (FOKUS)
5 // Kompetenzzentrum fuer Satelitenkommunikation (SatCom)
6 // Stefan Bund <g0dil@berlios.de>
8 // This program is free software; you can redistribute it and/or modify
9 // it under the terms of the GNU General Public License as published by
10 // the Free Software Foundation; either version 2 of the License, or
11 // (at your option) any later version.
13 // This program is distributed in the hope that it will be useful,
14 // but WITHOUT ANY WARRANTY; without even the implied warranty of
15 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 // GNU General Public License for more details.
18 // You should have received a copy of the GNU General Public License
19 // along with this program; if not, write to the
20 // Free Software Foundation, Inc.,
21 // 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
24 \brief IOEvent public header */
30 #include "../Scheduler/Scheduler.hh"
33 //#include "IOEvent.mpp"
34 ///////////////////////////////hh.p////////////////////////////////////////
39 /** \brief IOEvent event information
41 Information passed to the IOEvent event handler
45 unsigned events; ///< Type of event signaled
46 /**< The value is a combination of the flags from
47 IOEvent::EventFlags */
50 /** \brief FileHandle based I/O read/write event
52 An IOEvent is signaled, whenever the FileHandle \a handle becomes readable or writable. The
53 type of event is specified using the \a events mask with values from EventFlags.
55 There are two types of flags:
57 \li <em>Event flags</em> (\ref Read, \ref Prio, \ref Write) specify the type of event. The
58 callback will be called whenever one of the specified events occurs on the filehandle
59 \li <em>Error flags</em> (\ref Hup, \ref Err) specify some type of error condition on the
60 filehandle. If you specify an error flag when registering the event, the error condition
61 will be passed to the callback, otherwise an ErrorException or HangupException will be
69 : public EventImplementation<IOEventInfo>
72 ///////////////////////////////////////////////////////////////////////////
75 // This is stupid, however there is no way to import the Scheduler::EventId enum together
76 // with the enumeration symbols
79 Read = Scheduler::EV_READ /**< FileHandle is readable */
80 , Prio = Scheduler::EV_PRIO /**< FileHandle priority data is readable */
81 , Write = Scheduler::EV_WRITE /**< FileHandle is writable */
82 , Hup = Scheduler::EV_HUP /**< Hangup condition on FileHandle */
83 , Err = Scheduler::EV_ERR /**< Some other error condition on FileHandle */
86 ///////////////////////////////////////////////////////////////////////////
87 ///\name Structors and default members
90 template <class Handle>
91 IOEvent(Handle handle, unsigned events);
94 ///////////////////////////////////////////////////////////////////////////
96 /** \brief Unhandled error condition */
97 struct ErrorException : public std::exception
98 { virtual char const * what() const throw()
99 { return "senf::ppi::IOEvent::ErrorException"; } };
101 /** \brief Unhandled hangup condition */
102 struct HangupException : public std::exception
103 { virtual char const * what() const throw()
104 { return "senf::ppi::IOEvent::HangupException"; } };
109 virtual void v_enable();
110 virtual void v_disable();
112 void cb(int, Scheduler::EventId event);
121 ///////////////////////////////hh.e////////////////////////////////////////
122 //#include "IOEvent.cci"
123 //#include "IOEvent.ct"
124 #include "IOEvent.cti"
131 // comment-column: 40
132 // c-file-style: "senf"
133 // indent-tabs-mode: nil
134 // ispell-local-dictionary: "american"
135 // compile-command: "scons -u test"