#include "Connectors.ih"
// Custom includes
-#include "Route.hh"
-#include "Module.hh"
#include "ModuleManager.hh"
-#include <senf/Utils/Console/Console.hh>
+#include <senf/Utils/Console/ParsedCommand.hh>
//#include "Connectors.mpp"
#define prefix_
-///////////////////////////////cc.p////////////////////////////////////////
+//-/////////////////////////////////////////////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////////////////////
+//-/////////////////////////////////////////////////////////////////////////////////////////////////
// senf::ppi::connector::Connector
prefix_ senf::ppi::connector::Connector::~Connector()
SENF_ASSERT( ! target.peer_,
"senf::ppi::connector::Connector::connect(): (target) "
"duplicate connection" );
+
if (! (packetTypeID() == typeid(void) ||
target.packetTypeID() == typeid(void) ||
packetTypeID() == target.packetTypeID()) )
enqueueInitializable();
if (! peer().initializationScheduled())
peer().enqueueInitializable();
+
+ v_connected();
+ peer_->v_connected();
+
}
senf::ppi::connector::Connector::TraceState senf::ppi::connector::Connector::traceState_ (
return typeid(void);
}
+prefix_ void senf::ppi::connector::Connector::unregisterConnector()
+{
+ if (module_)
+ module_->unregisterConnector(*this);
+}
+
+prefix_ void senf::ppi::connector::Connector::setModule(module::Module & module)
+{
+ module_ = &module;
+}
+
prefix_ void senf::ppi::connector::Connector::v_disconnected()
- const
{}
-///////////////////////////////////////////////////////////////////////////
+prefix_ void senf::ppi::connector::Connector::v_connected()
+{}
+
+//-/////////////////////////////////////////////////////////////////////////////////////////////////
// senf::ppi::connector::PassiveConnector
-////////////////////////////////////////
+prefix_ senf::ppi::connector::PassiveConnector::~PassiveConnector()
+{
+ // Must be here and NOT in base so it is called before destructing the routes_ member
+ unregisterConnector();
+}
+
+prefix_ void senf::ppi::connector::PassiveConnector::v_disconnected()
+{
+ Connector::v_disconnected();
+ peer_ = 0;
+}
+
+prefix_ void senf::ppi::connector::PassiveConnector::v_connected()
+{
+ Connector::v_connected();
+ peer_ = & dynamic_cast<ActiveConnector&>(Connector::peer());
+}
+
+//-/////////////////////////////////////////////////////////////////////////////////////////////////
// private members
prefix_ void senf::ppi::connector::PassiveConnector::v_init()
SENF_PPI_THROTTLE_TRACE("OUT", "not forwarding unthrottle event");
}
-///////////////////////////////////////////////////////////////////////////
+//-/////////////////////////////////////////////////////////////////////////////////////////////////
// senf::ppi::connector::ActiveConnector
-////////////////////////////////////////
+prefix_ senf::ppi::connector::ActiveConnector::~ActiveConnector()
+{
+ // Must be here and NOT in base so it is called before destructing the routes_ member
+ unregisterConnector();
+}
+
+prefix_ void senf::ppi::connector::ActiveConnector::v_disconnected()
+{
+ Connector::v_disconnected();
+ peer_ = 0;
+}
+
+prefix_ void senf::ppi::connector::ActiveConnector::v_connected()
+{
+ Connector::v_connected();
+ peer_ = & dynamic_cast<PassiveConnector&>(Connector::peer());
+}
+
+//-/////////////////////////////////////////////////////////////////////////////////////////////////
// private members
prefix_ void senf::ppi::connector::ActiveConnector::v_init()
notifyRoutes_.erase(i);
}
-///////////////////////////////////////////////////////////////////////////
+//-/////////////////////////////////////////////////////////////////////////////////////////////////
// senf::ppi::connector::InputConnector
prefix_ senf::Packet senf::ppi::connector::InputConnector::operator()()
}
}
-////////////////////////////////////////
+prefix_ void senf::ppi::connector::InputConnector::v_disconnected()
+{
+ Connector::v_disconnected();
+ peer_ = 0;
+}
+
+prefix_ void senf::ppi::connector::InputConnector::v_connected()
+{
+ Connector::v_connected();
+ peer_ = & dynamic_cast<OutputConnector&>(Connector::peer());
+}
+
+//-/////////////////////////////////////////////////////////////////////////////////////////////////
// private members
prefix_ void senf::ppi::connector::InputConnector::v_requestEvent()
prefix_ void senf::ppi::connector::InputConnector::v_dequeueEvent()
{}
-///////////////////////////////////////////////////////////////////////////
+//-/////////////////////////////////////////////////////////////////////////////////////////////////
+// senf::ppi::connector::OutputConnector
+
+prefix_ void senf::ppi::connector::OutputConnector::v_disconnected()
+{
+ Connector::v_disconnected();
+ peer_ = 0;
+}
+
+prefix_ void senf::ppi::connector::OutputConnector::v_connected()
+{
+ Connector::v_connected();
+ peer_ = & dynamic_cast<InputConnector&>(Connector::peer());
+}
+
+//-/////////////////////////////////////////////////////////////////////////////////////////////////
// senf::ppi::connector::GenericActiveInput
-////////////////////////////////////////
+//-/////////////////////////////////////////////////////////////////////////////////////////////////
// private members
prefix_ void senf::ppi::connector::GenericActiveInput::v_requestEvent()
request();
}
-///////////////////////////////////////////////////////////////////////////
+//-/////////////////////////////////////////////////////////////////////////////////////////////////
// senf::ppi::connector::GenericPassiveInput
-////////////////////////////////////////
+prefix_ void senf::ppi::connector::GenericPassiveInput::v_disconnected()
+{
+ PassiveConnector::v_disconnected();
+ InputConnector::v_disconnected();
+ peer_ = 0;
+}
+
+prefix_ void senf::ppi::connector::GenericPassiveInput::v_connected()
+{
+ PassiveConnector::v_connected();
+ InputConnector::v_connected();
+ peer_ = & dynamic_cast<GenericActiveOutput&>(Connector::peer());
+}
+
+//-/////////////////////////////////////////////////////////////////////////////////////////////////
// private members
prefix_ void senf::ppi::connector::GenericPassiveInput::v_enqueueEvent()
}
}
-///////////////////////////////cc.e////////////////////////////////////////
+//-/////////////////////////////////////////////////////////////////////////////////////////////////
+// senf::ppi::connector::GenericPassiveOutput
+
+prefix_ void senf::ppi::connector::GenericPassiveOutput::v_disconnected()
+{
+ PassiveConnector::v_disconnected();
+ OutputConnector::v_disconnected();
+ peer_ = 0;
+}
+
+prefix_ void senf::ppi::connector::GenericPassiveOutput::v_connected()
+{
+ PassiveConnector::v_connected();
+ OutputConnector::v_connected();
+ peer_ = & dynamic_cast<GenericActiveInput&>(Connector::peer());
+}
+
+//-/////////////////////////////////////////////////////////////////////////////////////////////////
+// senf::ppi::connector::GenericActiveInput
+
+prefix_ void senf::ppi::connector::GenericActiveInput::v_disconnected()
+{
+ ActiveConnector::v_disconnected();
+ InputConnector::v_disconnected();
+ peer_ = 0;
+}
+
+prefix_ void senf::ppi::connector::GenericActiveInput::v_connected()
+{
+ ActiveConnector::v_connected();
+ InputConnector::v_connected();
+ peer_ = & dynamic_cast<GenericPassiveOutput&>(Connector::peer());
+}
+
+//-/////////////////////////////////////////////////////////////////////////////////////////////////
+// senf::ppi::connector::GenericActiveOutput
+
+prefix_ void senf::ppi::connector::GenericActiveOutput::v_disconnected()
+{
+ ActiveConnector::v_disconnected();
+ OutputConnector::v_disconnected();
+ peer_ = 0;
+}
+
+prefix_ void senf::ppi::connector::GenericActiveOutput::v_connected()
+{
+ ActiveConnector::v_connected();
+ OutputConnector::v_connected();
+ peer_ = & dynamic_cast<GenericPassiveInput&>(Connector::peer());
+}
+
+
+//-/////////////////////////////////////////////////////////////////////////////////////////////////
#undef prefix_
//#include "Connectors.mpp"