X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=PPI%2FIOEvent.hh;h=0d19eb33b17ae24a213b46b5448e591dc9bf26a1;hb=fd3a0e8ac95d1158e9ea661ddf9187b67c70169f;hp=ad239b864d623093eead5d4a46c59ae6345318fd;hpb=53a3d02e7fde841badf42555eba87ccef4566073;p=senf.git diff --git a/PPI/IOEvent.hh b/PPI/IOEvent.hh index ad239b8..0d19eb3 100644 --- a/PPI/IOEvent.hh +++ b/PPI/IOEvent.hh @@ -1,8 +1,8 @@ // $Id$ // -// Copyright (C) 2007 -// Fraunhofer Institut fuer offene Kommunikationssysteme (FOKUS) -// Kompetenzzentrum fuer Satelitenkommunikation (SatCom) +// Copyright (C) 2007 +// Fraunhofer Institute for Open Communication Systems (FOKUS) +// Competence Center NETwork research (NET), St. Augustin, GERMANY // Stefan Bund // // This program is free software; you can redistribute it and/or modify @@ -23,12 +23,13 @@ /** \file \brief IOEvent public header */ -#ifndef HH_IOEvent_ -#define HH_IOEvent_ 1 +#ifndef HH_SENF_PPI_IOEvent_ +#define HH_SENF_PPI_IOEvent_ 1 // Custom includes -#include "Scheduler/Scheduler.hh" +#include "../Scheduler/Scheduler.hh" #include "Events.hh" +#include "../Utils/Exception.hh" //#include "IOEvent.mpp" ///////////////////////////////hh.p//////////////////////////////////////// @@ -52,6 +53,15 @@ namespace ppi { An IOEvent is signaled, whenever the FileHandle \a handle becomes readable or writable. The type of event is specified using the \a events mask with values from EventFlags. + There are two types of flags: + + \li Event flags (\ref Read, \ref Prio, \ref Write) specify the type of event. The + callback will be called whenever one of the specified events occurs on the filehandle + \li Error flags (\ref Hup, \ref Err) specify some type of error condition on the + filehandle. If you specify an error flag when registering the event, the error condition + will be passed to the callback, otherwise an ErrorException or HangupException will be + thrown. + \see IOEventInfo \ingroup event_group @@ -66,50 +76,55 @@ namespace ppi { // This is stupid, however there is no way to import the Scheduler::EventId enum together // with the enumeration symbols - enum EventFlags { Read = Scheduler::EV_READ, - Prio = Scheduler::EV_PRIO, - Write = Scheduler::EV_WRITE, - Hup = Scheduler::EV_HUP, - Err = Scheduler::EV_ERR }; + enum EventFlags { + Read = scheduler::FdEvent::EV_READ /**< FileHandle is readable */ + , Prio = scheduler::FdEvent::EV_PRIO /**< FileHandle priority data is readable */ + , Write = scheduler::FdEvent::EV_WRITE /**< FileHandle is writable */ + , Hup = scheduler::FdEvent::EV_HUP /**< Hangup condition on FileHandle */ + , Err = scheduler::FdEvent::EV_ERR /**< Some other error condition on FileHandle */ + }; /////////////////////////////////////////////////////////////////////////// ///\name Structors and default members ///@{ + IOEvent(); + template IOEvent(Handle handle, unsigned events); ///@} /////////////////////////////////////////////////////////////////////////// + template + void set(Handle handle, unsigned events); + /** \brief Unhandled error condition */ - struct ErrorException : public std::exception - { virtual char const * what() const throw() - { return "senf::ppi::IOEvent::ErrorException"; } }; + struct ErrorException : public senf::Exception + { ErrorException() : senf::Exception("senf::ppi::IOEvent::ErrorException"){} }; /** \brief Unhandled hangup condition */ - struct HangupException : public std::exception - { virtual char const * what() const throw() - { return "senf::ppi::IOEvent::HangupException"; } }; + struct HangupException : public senf::Exception + { HangupException() : senf::Exception("senf::ppi::IOEvent::HangupException"){} }; protected: private: virtual void v_enable(); - virtual void v_disable(); + virtual void v_disable(); - void cb(int, Scheduler::EventId event); + void cb(int event); int fd_; - unsigned events_; + scheduler::FdEvent event_; }; }} ///////////////////////////////hh.e//////////////////////////////////////// -//#include "IOEvent.cci" -//#include "IOEvent.ct" +#include "IOEvent.cci" +#include "IOEvent.ct" #include "IOEvent.cti" #endif