X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=PPI%2FMonitorModule.hh;h=74e7600e0cc1f4a3d3a393fc4940fbf417827b78;hb=92f8630b75f3ef50e73c48cde58645dcd1534e27;hp=c5517eb807998692593b6a08111ae6d49611e205;hpb=8f0998b21459641c0e7e240946d58dc26280b631;p=senf.git diff --git a/PPI/MonitorModule.hh b/PPI/MonitorModule.hh index c5517eb..74e7600 100644 --- a/PPI/MonitorModule.hh +++ b/PPI/MonitorModule.hh @@ -37,16 +37,52 @@ namespace senf { namespace ppi { namespace module { + /** \brief Base class providing simple monitor %module support + + A monitor %module is a \ref senf::ppi::module::Module "module" which needs information + about traversing packets but does not really act on the packets. Because of this, it is + \e optional to connect the output: If the output is not connected, the packets will be + silently dropped. + + This allows to add monitor modules either into an existing chain or add them using an + ActiveDuplicator. + + To write a monitor %module, derive from senf::ppi::module::MonitorModule instead of + senf::ppi::module and implement v_handlePacket(): + + \code + class CountPackets + : public senf::ppi::module::MonitorModule<> + { + SENF_PPI_MODULE(CountPackets); + public: + CountPackets() : counter_ (0u) {} + + private: + virtual void v_handlePacket(Packet const & p) + { ++ counter_; } + + unsigned counter_; + }; + \endcode + + You may of course add events (or even further connectors besides \c input and \c output + provided by MonitorModule) to the %module. + + \tparam PacketType type of packet expected on input and sent on output. This is also the + type of the v_handlePacket() argument. + */ + template class MonitorModule : public Module { public: - senf::ppi::connector::PassiveInput<> input; - senf::ppi::connector::ActiveOutput<> output; + senf::ppi::connector::PassiveInput input; + senf::ppi::connector::ActiveOutput output; protected: MonitorModule(); - virtual void v_handlePacket(Packet const & p) = 0; + virtual void v_handlePacket(PacketType const & p) = 0; ///< Called for each packet private: void request(); @@ -58,9 +94,9 @@ namespace module { }}} ///////////////////////////////hh.e//////////////////////////////////////// -#include "MonitorModule.cci" -//#include "MonitorModule.ct" -//#include "MonitorModule.cti" +//#include "MonitorModule.cci" +#include "MonitorModule.ct" +#include "MonitorModule.cti" #endif