prefix_ void senf::ppi::connector::Connector::connect(Connector & target)
{
- SENF_ASSERT( module_ && ! peer_ && target.module_ && ! target.peer_ );
+ // The connector is not registered -> route() or noroute() statement missing
+ SENF_ASSERT( module_ );
+ // The connector is already connected
+ SENF_ASSERT( ! peer_ );
+ // The target connector is not registered -> route() or noroute() statement missing
+ SENF_ASSERT( target.module_ );
+ // The target connector is already connected
+ SENF_ASSERT( ! target.peer_ );
if (! (packetTypeID() == typeid(void) ||
target.packetTypeID() == typeid(void) ||
packetTypeID() == target.packetTypeID()) )
peer_ = & target;
target.peer_ = this;
- if (ModuleManager::instance().running())
- v_init();
+ if (! initializationScheduled())
+ enqueueInitializable();
+ if (! peer().initializationScheduled())
+ peer().enqueueInitializable();
+}
+
+prefix_ void senf::ppi::connector::Connector::disconnect()
+{
+ // Cannot disconnected a non-connected connector
+ SENF_ASSERT( peer_ );
+ Connector & peer (*peer_);
+ peer_ = 0;
+ peer.peer_ = 0;
+
+ if (! initializationScheduled())
+ enqueueInitializable();
+ if (! peer.initializationScheduled())
+ peer.enqueueInitializable();
}
prefix_ std::type_info const & senf::ppi::connector::Connector::packetTypeID()