X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=senf%2FPPI%2FConnectors.hh;h=852e5e61473b885f4bfe5eb306f03bdb316db50c;hb=e3179a2123ad51d0d9eb63834a581145c4f77c92;hp=c0b0b49b2aae1c5d84d5132e827a6ab1e82c72d3;hpb=45b346fa3a120720280b67b0f405b1954c0885d4;p=senf.git diff --git a/senf/PPI/Connectors.hh b/senf/PPI/Connectors.hh index c0b0b49..852e5e6 100644 --- a/senf/PPI/Connectors.hh +++ b/senf/PPI/Connectors.hh @@ -39,7 +39,7 @@ #include "ModuleManager.hh" //#include "Connectors.mpp" -///////////////////////////////hh.p//////////////////////////////////////// +//-///////////////////////////////////////////////////////////////////////////////////////////////// namespace senf { namespace ppi { @@ -63,8 +63,8 @@ namespace connector { We therefore have 4 connector types each of which is parameterized by the type of packet traversing the connector: \li senf::ppi::connector::ActiveInput - \li senf::ppi::connector::ActiveOutput - \li senf::ppi::connector::PassiveInput + \li senf::ppi::connector::ActiveOutput + \li senf::ppi::connector::PassiveInput \li senf::ppi::connector::PassiveOutput. Connectors are declared as module data members and are then externally connected to other @@ -115,7 +115,7 @@ namespace connector { senf::ppi::connector::ActiveInputJack input; senf::ppi::connector::ActiveOutputJack output; - MyGroup() + MyGroup() : queue (), analyzer (), input (queue.input), output (analyzer.output) { senf::ppi::connect(queue, analyzer); @@ -184,11 +184,14 @@ namespace connector { void trace(Packet const & p, char const * label); void throttleTrace(char const * label, char const * type); - + + void unregisterConnector(); + + virtual void v_disconnected(); + virtual void v_connected(); + private: virtual std::type_info const & packetTypeID(); - - virtual void v_disconnected() const; void setModule(module::Module & module); @@ -220,6 +223,8 @@ namespace connector { : public virtual Connector { public: + ~PassiveConnector(); + template void onRequest(Handler handler);///< Register I/O event handler /**< The registered handler will be called, whenever packets @@ -247,6 +252,9 @@ namespace connector { void emit(); + virtual void v_disconnected(); + virtual void v_connected(); + private: virtual void v_init(); @@ -263,6 +271,9 @@ namespace connector { // called by ForwardingRoute to register a new route void registerRoute(ForwardingRoute & route); + void unregisterRoute(ForwardingRoute & route); + + ActiveConnector * peer_; typedef ppi::detail::Callback<>::type Callback; Callback callback_; @@ -291,6 +302,8 @@ namespace connector { { typedef ppi::detail::Callback<>::type Callback; public: + ~ActiveConnector(); + template void onThrottle(Handler handler); ///< Register throttle notification handler /**< The handler register here will be called, whenever a @@ -324,6 +337,9 @@ namespace connector { protected: ActiveConnector(); + virtual void v_disconnected(); + virtual void v_connected(); + private: virtual void v_init(); @@ -333,6 +349,9 @@ namespace connector { // called by ForwardingRoute to register a new route void registerRoute(ForwardingRoute & route); + void unregisterRoute(ForwardingRoute & route); + + PassiveConnector * peer_; Callback throttleCallback_; Callback unthrottleCallback_; @@ -340,7 +359,7 @@ namespace connector { typedef std::vector NotifyRoutes; NotifyRoutes notifyRoutes_; - bool throttled_; + bool throttled_; friend class senf::ppi::ForwardingRoute; friend class PassiveConnector; @@ -381,9 +400,8 @@ namespace connector { dequeue a packet from the packet queue. If the connector is active, the connector will request new packets from the connected module. If the packet - request cannot be fulfilled, this is considered to be a - logic error in the module implementation and an - exception is raised. */ + request cannot be fulfilled an in-valid Packet is + returned. */ Packet read(); ///< Alias for operator()() @@ -399,6 +417,9 @@ namespace connector { protected: InputConnector(); + virtual void v_disconnected(); + virtual void v_connected(); + private: void enqueue(Packet const & p); @@ -406,6 +427,7 @@ namespace connector { virtual void v_enqueueEvent(); virtual void v_dequeueEvent(); + OutputConnector * peer_; Queue queue_; friend class OutputConnector; @@ -429,6 +451,12 @@ namespace connector { protected: OutputConnector(); + + virtual void v_disconnected(); + virtual void v_connected(); + + private: + InputConnector * peer_; }; /** \brief Combination of PassiveConnector and InputConnector @@ -455,15 +483,21 @@ namespace connector { QueueingDiscipline interface. \param[in] disc New queueing discipline */ + void qdisc(QueueingDiscipline::None_t); + ///< Disable queueing discipline protected: GenericPassiveInput(); + virtual void v_disconnected(); + virtual void v_connected(); + private: void v_enqueueEvent(); void v_dequeueEvent(); void v_unthrottleEvent(); + GenericActiveOutput * peer_; boost::scoped_ptr qdisc_; }; @@ -485,6 +519,11 @@ namespace connector { protected: GenericPassiveOutput(); + virtual void v_disconnected(); + virtual void v_connected(); + + private: + GenericActiveInput * peer_; }; /** \brief Combination of ActiveConnector and InputConnector @@ -503,8 +542,13 @@ namespace connector { protected: GenericActiveInput(); + virtual void v_disconnected(); + virtual void v_connected(); + private: void v_requestEvent(); + + GenericPassiveOutput * peer_; }; /** \brief Combination of ActiveConnector and OutputConnector @@ -523,8 +567,14 @@ namespace connector { protected: GenericActiveOutput(); + virtual void v_disconnected(); + virtual void v_connected(); + + private: + GenericPassiveInput * peer_; }; + #ifndef DOXYGEN # define TypedConnector_Input read @@ -560,12 +610,12 @@ namespace connector { #else /** \brief Connector actively reading packets - + \tparam PacketType Type of packet to read. Defaults to senf::Packet The %ActiveInput %connector template reads data actively from a connected %module. This - class is completely implemented via it's base-class, GenericActiveInput, the only - difference is that read packets are returned as \a PacketType instead of generic + class is completely implemented via it's base-class, GenericActiveInput, the only + difference is that read packets are returned as \a PacketType instead of generic senf::Packet references. \see GenericActiveInput \n @@ -587,7 +637,7 @@ namespace connector { \tparam PacketType Type of packet to read. Defaults to senf::Packet The %PassiveInput %connector template receives packets sent to it from a connected - %module. This class is completely implemented via it's base-class, GenericPassiveInput, + %module. This class is completely implemented via it's base-class, GenericPassiveInput, the only difference is that read packets are returned as \a PacketType instead of generic senf::Packet references. @@ -609,7 +659,7 @@ namespace connector { \tparam PacketType Type of packet to send. Defaults to senf::Packet - The %ActiveOutput %connector template sends data actively to a connected %module. This + The %ActiveOutput %connector template sends data actively to a connected %module. This class is completely implemented via it's base-class, GenericActiveOutput, the only difference is that it only sends packets of type \a PacketType. @@ -620,17 +670,17 @@ namespace connector { class ActiveOutput : public GenericActiveOutput { public: - operator()(PacketType packet); ///< Send out a packet - void write(PacketType packet); ///< Alias for operator() + void operator()(PacketType packet); ///< Send out a packet + void write(PacketType packet); ///< Alias for operator() }; /** \brief Connector passively providing packets \tparam PacketType Type of packet to send. Defaults to senf::Packet - The %PassiveOutput %connector template provides data passively to a connected %module - whenever signaled. This class is completely implemented via it's base-class, - GenericPassiveOutput, the only difference is that it only sends packets of type + The %PassiveOutput %connector template provides data passively to a connected %module + whenever signaled. This class is completely implemented via it's base-class, + GenericPassiveOutput, the only difference is that it only sends packets of type \a PacketType. \see GenericPassiveOutput \n @@ -640,17 +690,17 @@ namespace connector { class PassiveOutput : public GenericPassiveOutput { public: - operator()(PacketType packet); ///< Send out a packet - void write(PacketType packet); ///< Alias for operator() + void operator()(PacketType packet); ///< Send out a packet + void write(PacketType packet); ///< Alias for operator() }; #endif }}} -///////////////////////////////hh.e//////////////////////////////////////// +//-///////////////////////////////////////////////////////////////////////////////////////////////// #include "Connectors.cci" -//#include "Connectors.ct" +#include "Connectors.ct" #include "Connectors.cti" #endif