PPI API adjustments
g0dil [Wed, 6 Jun 2007 07:51:36 +0000 (07:51 +0000)]
git-svn-id: https://svn.berlios.de/svnroot/repos/senf/trunk@248 270642c3-0616-0410-b53a-bc976706d245

PPI/Mainpage.dox
PPI/Module.hh

index 85100bc..5d5d59d 100644 (file)
     (network connection, writing packets to disk, generating new packets) whereas processing modules
     process packets internally.  In the target scenario, <em>TAP</em>, <em>ASI Out</em>, <em>Raw
     Socket</em> and in a limited way <em>Generator</em> are I/O modules whereas <em>PEP</em>,
-    <em>DiffServ</em>, <em>DVB Enc</em>, <em>GRE/UDLR</em>, <em>TCP Filter</em> and
-    <em>Stuffer</em>are processing modules. <em>ASI/MPEG</em> and <em>Net</em> are external I/O
-    ports which are integrated via the <em>TAP</em>, <em>ASI Out</em> and <em>Raw Sock</em> modules
-    using external events.
+    <em>DiffServ</em>, <em>DVB Enc</em>, <em>GRE/UDLR</em>, <em>TCP Filter</em> and <em>Stuffer</em>
+    are processing modules. <em>ASI/MPEG</em> and <em>Net</em> are external I/O ports which are
+    integrated via the <em>TAP</em>, <em>ASI Out</em> and <em>Raw Sock</em> modules using external
+    events.
 
     The following example module declares three I/O connectors (see below): <tt>payload</tt>,
     <tt>stuffing</tt> and <tt>output</tt>. These connectors are defined as <em>public</em> data
       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:
           : public senf::ppi::Module
       {
       public:
-          PassiveOutput output;
+          senf::ppi::PassiveOutput output;
 
           CopyPacketGenerator(Packet::ptr template)
               : template_ (template)
       class ActiveSocketInput 
           : public senf::ppi::Module
       {
-          static PacketParser<senf::DataPacket> defaultParser_;
-
-      public:
-          ActiveOutput output;
-
           typedef senf::ClientSocketHandle<
               senf::MakeSocketPolicy< senf::ReadablePolicy,
                                       senf::DatagramFramingPolicy > > Socket;
+          static PacketParser<senf::DataPacket> 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
           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()
           {
index 4b646e6..42616e4 100644 (file)
@@ -97,7 +97,7 @@ namespace ppi {
                                              \param[in] connector Terminal connector to declare */
 
         template <class Target, class Descriptor>
-        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
     };