Packets: Fix VariantParser invalid parser access bug
[senf.git] / PPI / Module.hh
index b68fe4f..97f1c11 100644 (file)
@@ -1,6 +1,8 @@
-// Copyright (C) 2007 
-// Fraunhofer Institute for Open Communication Systems (FOKUS) 
-// Competence Center NETwork research (NET), St. Augustin, GERMANY 
+// $Id$
+//
+// Copyright (C) 2007
+// Fraunhofer Institute for Open Communication Systems (FOKUS)
+// Competence Center NETwork research (NET), St. Augustin, GERMANY
 //     Stefan Bund <g0dil@berlios.de>
 //
 // This program is free software; you can redistribute it and/or modify
@@ -22,8 +24,8 @@
     \brief Module public header 
 */
 
-#ifndef HH_Module_
-#define HH_Module_ 1
+#ifndef HH_SENF_PPI_Module_
+#define HH_SENF_PPI_Module_ 1
 
 // Custom includes
 #include <vector>
@@ -31,6 +33,7 @@
 #include <boost/ptr_container/ptr_vector.hpp>
 #include "../Scheduler/ClockService.hh"
 #include "predecl.hh"
+#include "ModuleManager.hh"
 
 //#include "Module.mpp"
 ///////////////////////////////hh.p////////////////////////////////////////
@@ -104,8 +107,8 @@ namespace module {
         public:
             // Define connectors. Any number and type of connectors may be defined. Connectors
             // must be public since they need to be accessed to connect modules with each other.
-            senf::ppi::connector::PassiveInput input;
-            senf::ppi::connector::ActiveOutput output;
+            senf::ppi::connector::PassiveInput<> input;
+            senf::ppi::connector::ActiveOutput<> output;
 
             SomeModule(senf::FileHandle h) 
               : handle ( h ), 
@@ -155,6 +158,13 @@ namespace module {
                 event.enable();
             }
 
+            void v_init() {
+                // Optional. Called after before running the module but after connections have been
+                // set up. This is either directly before senf::ppi::run() or senf::ppi::init() is
+                // called or, for modules created while the PPI is already running, after returning
+                // from all event handlers but before going back to the event loop.
+            }
+
         };
         \endcode
 
@@ -165,7 +175,7 @@ namespace module {
         \see \ref ppi_modules
      */
     class Module
-        : boost::noncopyable
+        : ModuleManager::Initializable, boost::noncopyable
     {
     public:
         virtual ~Module();
@@ -230,7 +240,7 @@ namespace module {
                                              event to a connector defines the event as the
                                              conceptual 'source' of the data. This means, the event
                                              controls how packets are sent (Example: Routing from an
-                                             IOEVent to an output defines, that output data will be
+                                             IOEvent to an output defines, that output data will be
                                              generated whenever the event is signaled).
 
                                              This event routing allows to automatically
@@ -287,7 +297,13 @@ namespace module {
 
     private:
 #endif
-        virtual void init();            ///< Called just before the network is run
+        virtual void v_init();          ///< Called after module setup
+                                        /**< This member is called directly before the PPI (resumes)
+                                             execution. It is called after connections have been
+                                             setup before entering the PPI main loop. 
+
+                                             You may overload this member. Your overload should
+                                             always call the base-class implementation. */
 
 #ifndef DOXYGEN
     public: