From: g0dil Date: Wed, 6 Jun 2007 07:51:36 +0000 (+0000) Subject: PPI API adjustments X-Git-Url: http://g0dil.de/git?a=commitdiff_plain;h=2913eecdc2ee7a52ced3e8bfb256a58b9ac6510a;p=senf.git PPI API adjustments git-svn-id: https://svn.berlios.de/svnroot/repos/senf/trunk@248 270642c3-0616-0410-b53a-bc976706d245 --- diff --git a/PPI/Mainpage.dox b/PPI/Mainpage.dox index 85100bc..5d5d59d 100644 --- a/PPI/Mainpage.dox +++ b/PPI/Mainpage.dox @@ -70,10 +70,10 @@ (network connection, writing packets to disk, generating new packets) whereas processing modules process packets internally. In the target scenario, TAP, ASI Out, Raw Socket and in a limited way Generator are I/O modules whereas PEP, - DiffServ, DVB Enc, GRE/UDLR, TCP Filter and - Stufferare processing modules. ASI/MPEG and Net are external I/O - ports which are integrated via the TAP, ASI Out and Raw Sock modules - using external events. + DiffServ, DVB Enc, GRE/UDLR, TCP Filter and Stuffer + are processing modules. ASI/MPEG and Net are external I/O ports which are + integrated via the TAP, ASI Out and Raw Sock modules using external + events. The following example module declares three I/O connectors (see below): payload, stuffing and output. These connectors are defined as public data @@ -83,18 +83,20 @@ class RateStuffer : public senf::ppi::Module { + senf::ppi::IntervalTimer timer_; + public: - ActiveInput payload; - ActiveInput stuffing; - ActiveOutput output; + senf::ppi::ActiveInput payload; + senf::ppi::ActiveInput stuffing; + senf::ppi::ActiveOutput output; RateStuffer(unsigned packetsPerSecond) + : timer_(1000u, packetsPerSecond) { route(payload, output); route(stuffing, output); - registerEvent(&RateStuffer::tick, - senf::ppi::IntervalTimer(1000u, packetsPerSecond)); + registerEvent(&RateStuffer::tick, timer_); } private: @@ -124,7 +126,7 @@ : public senf::ppi::Module { public: - PassiveOutput output; + senf::ppi::PassiveOutput output; CopyPacketGenerator(Packet::ptr template) : template_ (template) @@ -244,14 +246,17 @@ class ActiveSocketInput : public senf::ppi::Module { - static PacketParser defaultParser_; - - public: - ActiveOutput output; - typedef senf::ClientSocketHandle< senf::MakeSocketPolicy< senf::ReadablePolicy, senf::DatagramFramingPolicy > > Socket; + static PacketParser defaultParser_; + + Socket socket_; + DataParser const & parser_; + senf::ppi:IOSignaler event_; + + public: + senf::ppi::ActiveOutput output; // I hestitate taking parser by const & since a const & can be bound to // a temporary even though a const & is all we need. The real implementation @@ -260,16 +265,13 @@ ActiveSocketInput(Socket socket, DataParser & parser = SocketInput::defaultParser_) : socket_ (socket), parser_ (parser) - event_ (registerEvent( &ActiveSocketInput::data, - senf::ppi::IOSignaler(socket, senf::ppi::IOSignaler::Read) )) + event_ (socket, senf::ppi::IOSignaler::Read) { + registerEvent( &ActiveSocketInput::data, event_ ); route(event_, output); } private: - Socket socket_; - DataParser const & parser_; - senf::ppi:IOSignaler::EventBinding event_; void data() { diff --git a/PPI/Module.hh b/PPI/Module.hh index 4b646e6..42616e4 100644 --- a/PPI/Module.hh +++ b/PPI/Module.hh @@ -97,7 +97,7 @@ namespace ppi { \param[in] connector Terminal connector to declare */ template - typename Descriptor & registerEvent(Target target, Descriptor const & descriptor); + void registerEvent(Target target, Descriptor const & descriptor); ///< Register an external event /**< The \a target argument may be either an arbitrary callable object or it may be a member function pointer @@ -111,17 +111,9 @@ namespace ppi { may be a timer event or some type of I/O event on a file descriptor or socket. - The return value may be used to modify the - binding. This allows to temporarily inhibit event - delivery or to remove the binding explicitly. Depending - on the type of event, other operations may be - possible. See the event descriptor documentation. - \param[in] target The handler to call whenever the event is signaled - \param[in] descriptor The type of event to register - \returns An event binding instance of the appropriate - type. */ + \param[in] descriptor The type of event to register */ boost::posix_time::ptime eventTime(); ///< Return timestamp of the currently processing event };