From fefc87c2840ce2aee481c450c899eb7a0affd125 Mon Sep 17 00:00:00 2001 From: msmit Date: Tue, 5 Jan 2010 07:36:33 +0000 Subject: Tue Jan 5 07:31:33 UTC 2010 Marcel Smit * connectors/dds4ccm/impl/ndds/DDS_Event_Connector_T.cpp: * connectors/dds4ccm/impl/ndds/DDS_Get_T.h: * connectors/dds4ccm/impl/ndds/DDS_Get_T.cpp: * connectors/dds4ccm/impl/ndds/DDS_Listen_T.h: * connectors/dds4ccm/impl/ndds/DDS_Listen_T.cpp: * connectors/dds4ccm/impl/ndds/DDS_State_Connector_T.cpp: * connectors/dds4ccm/impl/ndds/DDS_TopicBase_Connector_T.cpp: Separate DDS lifecycle from CCM lifecycle. DDS_Get_T and DDS_Listen_T now have a configuration_complete, activate, passivate and remove methods. --- CIAO/ChangeLog | 15 ++- .../dds4ccm/impl/ndds/DDS_Event_Connector_T.cpp | 37 ++++--- CIAO/connectors/dds4ccm/impl/ndds/DDS_Get_T.cpp | 103 ++++++++++++++------ CIAO/connectors/dds4ccm/impl/ndds/DDS_Get_T.h | 11 ++- CIAO/connectors/dds4ccm/impl/ndds/DDS_Listen_T.cpp | 107 +++++++++++++++------ CIAO/connectors/dds4ccm/impl/ndds/DDS_Listen_T.h | 12 ++- .../dds4ccm/impl/ndds/DDS_State_Connector_T.cpp | 31 +++--- .../impl/ndds/DDS_TopicBase_Connector_T.cpp | 8 +- 8 files changed, 232 insertions(+), 92 deletions(-) diff --git a/CIAO/ChangeLog b/CIAO/ChangeLog index cb84dc6e734..120707640fe 100644 --- a/CIAO/ChangeLog +++ b/CIAO/ChangeLog @@ -1,7 +1,20 @@ +Tue Jan 5 07:31:33 UTC 2010 Marcel Smit + + * connectors/dds4ccm/impl/ndds/DDS_Event_Connector_T.cpp: + * connectors/dds4ccm/impl/ndds/DDS_Get_T.h: + * connectors/dds4ccm/impl/ndds/DDS_Get_T.cpp: + * connectors/dds4ccm/impl/ndds/DDS_Listen_T.h: + * connectors/dds4ccm/impl/ndds/DDS_Listen_T.cpp: + * connectors/dds4ccm/impl/ndds/DDS_State_Connector_T.cpp: + * connectors/dds4ccm/impl/ndds/DDS_TopicBase_Connector_T.cpp: + Separate DDS lifecycle from CCM lifecycle. DDS_Get_T and DDS_Listen_T + now have a configuration_complete, activate, passivate and remove + methods. + Mon Jan 4 20:41:07 UTC 2010 Jeff Parsons * tests/IDL_Test/IDL3_Plus/KitchenSink.idl: - + Cosmetic changes. Mon Jan 4 19:43:39 UTC 2009 Johnny Willemsen diff --git a/CIAO/connectors/dds4ccm/impl/ndds/DDS_Event_Connector_T.cpp b/CIAO/connectors/dds4ccm/impl/ndds/DDS_Event_Connector_T.cpp index 55195076862..7aae160ac71 100644 --- a/CIAO/connectors/dds4ccm/impl/ndds/DDS_Event_Connector_T.cpp +++ b/CIAO/connectors/dds4ccm/impl/ndds/DDS_Event_Connector_T.cpp @@ -101,6 +101,18 @@ DDS_Event_Connector_T::configuration_complete (void) CIAO_TRACE ("DDS_Event_Connector_T::configuration_complete"); DDS_TopicBase_Connector_T::configuration_complete (); + + this->push_consumer_.configuration_complete ( + this->topic_.in (), + this->subscriber_.in (), + this->library_name_, + this->profile_name_); + + this->pull_consumer_.configuration_complete ( + this->topic_.in (), + this->subscriber_.in (), + this->library_name_, + this->profile_name_); } template @@ -109,13 +121,10 @@ DDS_Event_Connector_T::ccm_activate (void) { CIAO_TRACE ("DDS_Event_Connector_T::ccm_activate"); DDS_TopicBase_Connector_T::ccm_activate (); - this->push_consumer_.init ( + + this->push_consumer_.activate ( this->context_->get_connection_push_consumer_data_listener (), - this->context_->get_connection_push_consumer_status (), - this->topic_.in (), - this->subscriber_.in (), - this->library_name_, - this->profile_name_); + this->context_->get_connection_push_consumer_status ()); this->supplier_.init ( this->topic_.in (), @@ -123,12 +132,8 @@ DDS_Event_Connector_T::ccm_activate (void) this->library_name_, this->profile_name_); - this->pull_consumer_.init ( - this->context_->get_connection_pull_consumer_status (), - this->topic_.in (), - this->subscriber_.in (), - this->library_name_, - this->profile_name_); + this->pull_consumer_.activate ( + this->context_->get_connection_pull_consumer_status ()); } template @@ -138,6 +143,10 @@ DDS_Event_Connector_T::ccm_passivate (void) CIAO_TRACE ("DDS_Event_Connector_T::ccm_passivate"); DDS_TopicBase_Connector_T::ccm_passivate (); + + this->push_consumer_.passivate (); + + this->pull_consumer_.passivate (); } template @@ -147,4 +156,8 @@ DDS_Event_Connector_T::ccm_remove (void) CIAO_TRACE ("DDS_Event_Connector_T::ccm_remove"); DDS_TopicBase_Connector_T::ccm_remove (); + + this->push_consumer_.remove (); + + this->pull_consumer_.remove (); } diff --git a/CIAO/connectors/dds4ccm/impl/ndds/DDS_Get_T.cpp b/CIAO/connectors/dds4ccm/impl/ndds/DDS_Get_T.cpp index 7944e0b20ac..6ba29336363 100644 --- a/CIAO/connectors/dds4ccm/impl/ndds/DDS_Get_T.cpp +++ b/CIAO/connectors/dds4ccm/impl/ndds/DDS_Get_T.cpp @@ -21,60 +21,107 @@ DDS_Get_T::~DDS_Get_T (void) template void -DDS_Get_T::init ( - ::CCM_DDS::PortStatusListener_ptr listener, +DDS_Get_T::configuration_complete ( ::DDS::Topic_ptr topic, ::DDS::Subscriber_ptr subscriber, const char* library_name, const char* profile_name) { - CIAO_TRACE ("DDS_Get_T::init"); + CIAO_TRACE ("DDS_Get_T::configuration_complete"); try { - if (CORBA::is_nil (this->status_.in ())) - { - this->status_ = new ::CIAO::DDS4CCM::RTI::PortStatusListener_T - (listener); - } - if (CORBA::is_nil (this->data_.in ())) { + ::DDS::DataReader_var reader; if (profile_name && library_name) { - ::DDS::DataReader_var reader = - subscriber->create_datareader_with_profile ( + reader = subscriber->create_datareader_with_profile ( topic, library_name, profile_name, - this->status_.in (), - ::CIAO::DDS4CCM::RTI::PortStatusListener_T::get_mask ()); - DDSDataReader *rd = dynamic_cast < DDSDataReader *> (reader.in ()); - this->rti_reader_.set_impl (rd); - this->data_ = ::DDS::CCM_DataReader::_narrow (reader); - this->dds_get_.set_impl (reader); - this->dds_read_.set_impl (reader); + ::DDS::DataReaderListener::_nil (), + 0); } else { ::DDS::DataReaderQos drqos; - ::DDS::DataReader_var reader = - subscriber->create_datareader ( + reader = subscriber->create_datareader ( topic, drqos, - this->status_.in (), - ::CIAO::DDS4CCM::RTI::PortStatusListener_T::get_mask ()); - DDSDataReader *rd = dynamic_cast < DDSDataReader *> (reader.in ()); - this->rti_reader_.set_impl (rd); - this->data_ = ::DDS::CCM_DataReader::_narrow (reader); - this->dds_get_.set_impl (reader); - this->dds_read_.set_impl (reader); + ::DDS::DataReaderListener::_nil (), + 0); } + ::CIAO::DDS4CCM::RTI::RTI_DataReader_i *rd = + dynamic_cast < ::CIAO::DDS4CCM::RTI::RTI_DataReader_i *> (reader.in ()); + this->rti_reader_.set_impl (rd->get_impl ()); + this->data_ = ::DDS::CCM_DataReader::_narrow (reader); + this->dds_get_.set_impl (reader); + this->dds_read_.set_impl (reader); + } + } + catch (...) + { + CIAO_ERROR (1, (LM_EMERGENCY, "Caught unknown c++ exception in configuration_complete in DDS_Get_T\n")); + throw CORBA::INTERNAL (); + } +} + +template +void +DDS_Get_T::activate ( + ::CCM_DDS::PortStatusListener_ptr listener) +{ + CIAO_TRACE ("DDS_Get_T::activate"); + try + { + if (CORBA::is_nil (this->status_.in ())) + { + this->status_ = new ::CIAO::DDS4CCM::RTI::PortStatusListener_T + (listener); } + this->rti_reader_.set_listener ( + this->status_.in (), + ::CIAO::DDS4CCM::RTI::PortStatusListener_T::get_mask ()); + } + catch (...) + { + CIAO_ERROR (1, (LM_EMERGENCY, "Caught unknown c++ exception in activate in DDS_Get_T\n")); + throw CORBA::INTERNAL (); + } +} + +template +void +DDS_Get_T::passivate (void) +{ + CIAO_TRACE ("DDS_Get_T::passivate"); + try + { + this->rti_reader_.set_listener ( + ::DDS::DataReaderListener::_nil (), + 0); + } + catch (...) + { + CIAO_ERROR (1, (LM_EMERGENCY, "Caught unknown c++ exception in passivate in DDS_Get_T\n")); + throw CORBA::INTERNAL (); + } +} + +template +void +DDS_Get_T::remove (void) +{ + CIAO_TRACE ("DDS_Get_T::remove"); + try + { + this->rti_reader_.delete_contained_entities (); + this->rti_reader_.set_impl (0); } catch (...) { - CIAO_ERROR (1, (LM_EMERGENCY, "Caught unknown c++ exception while creating subscriber entities\n")); + CIAO_ERROR (1, (LM_EMERGENCY, "Caught unknown c++ exception in remove in DDS_Get_T\n")); throw CORBA::INTERNAL (); } } diff --git a/CIAO/connectors/dds4ccm/impl/ndds/DDS_Get_T.h b/CIAO/connectors/dds4ccm/impl/ndds/DDS_Get_T.h index 2ac783e66e3..fc1e177d332 100644 --- a/CIAO/connectors/dds4ccm/impl/ndds/DDS_Get_T.h +++ b/CIAO/connectors/dds4ccm/impl/ndds/DDS_Get_T.h @@ -30,14 +30,19 @@ public: ::DDS::CCM_DataReader_ptr get_dds_entity (void); //@} - - void init ( - ::CCM_DDS::PortStatusListener_ptr listener, + void configuration_complete ( ::DDS::Topic_ptr topic, ::DDS::Subscriber_ptr subscriber, const char* library_name, const char* profile_name); + void activate ( + ::CCM_DDS::PortStatusListener_ptr listener); + + void passivate (void); + + void remove (void); + private: /** * DDS_Get diff --git a/CIAO/connectors/dds4ccm/impl/ndds/DDS_Listen_T.cpp b/CIAO/connectors/dds4ccm/impl/ndds/DDS_Listen_T.cpp index 1a980c226ee..36c3f5d9e12 100644 --- a/CIAO/connectors/dds4ccm/impl/ndds/DDS_Listen_T.cpp +++ b/CIAO/connectors/dds4ccm/impl/ndds/DDS_Listen_T.cpp @@ -26,9 +26,7 @@ DDS_Listen_T::~DDS_Listen_T (void) template void -DDS_Listen_T::init ( - typename CCM_TYPE::listener_type::_ptr_type listener, - ::CCM_DDS::PortStatusListener_ptr status, +DDS_Listen_T::configuration_complete ( ::DDS::Topic_ptr topic, ::DDS::Subscriber_ptr subscriber, const char* library_name, @@ -38,54 +36,105 @@ DDS_Listen_T::init ( try { - if (CORBA::is_nil (this->data_listener_.in ())) - { - this->data_listener_ = new ::CIAO::DDS4CCM::RTI::DataReaderListener_T - ( - listener, - status, - data_control_.in ()); - } - if (CORBA::is_nil (this->data_reader_.in ())) { + ::DDS::DataReader_var reader; if (library_name && profile_name) { - ::DDS::DataReader_var reader = - subscriber->create_datareader_with_profile ( + reader = subscriber->create_datareader_with_profile ( topic, library_name, profile_name, - this->data_listener_.in (), - ::CIAO::DDS4CCM::RTI::DataReaderListener_T::get_mask ()); - DDSDataReader *rd = dynamic_cast < DDSDataReader *> (reader.in ()); - this->rti_reader_.set_impl (rd); - this->data_reader_ = ::DDS::CCM_DataReader::_narrow (reader); - this->dds_read_.set_impl (this->data_reader_.in ()); + ::DDS::DataReaderListener::_nil (), + 0); } else { ::DDS::DataReaderQos drqos; - ::DDS::DataReader_var reader = - subscriber->create_datareader ( + reader = subscriber->create_datareader ( topic, drqos, - this->data_listener_.in (), - ::CIAO::DDS4CCM::RTI::DataReaderListener_T::get_mask ()); - DDSDataReader *rd = dynamic_cast < DDSDataReader *> (reader.in ()); - this->rti_reader_.set_impl (rd); - this->data_reader_ = ::DDS::CCM_DataReader::_narrow (reader); - this->dds_read_.set_impl (this->data_reader_.in ()); + ::DDS::DataReaderListener::_nil (), + 0); } + ::CIAO::DDS4CCM::RTI::RTI_DataReader_i *rd = + dynamic_cast < ::CIAO::DDS4CCM::RTI::RTI_DataReader_i *> (reader.in ()); + this->rti_reader_.set_impl (rd->get_impl ()); + this->data_reader_ = ::DDS::CCM_DataReader::_narrow (reader); + this->dds_read_.set_impl (this->data_reader_.in ()); + } + } + catch (...) + { + CIAO_ERROR (1, (LM_EMERGENCY, "Caught unknown c++ exception configuration_complete in DDS_Listen_T\n")); + throw CORBA::INTERNAL (); + } +} + +template +void +DDS_Listen_T::activate ( + typename CCM_TYPE::listener_type::_ptr_type listener, + ::CCM_DDS::PortStatusListener_ptr status) +{ + CIAO_TRACE ("DDS_Listen_T::activate"); + try + { + if (CORBA::is_nil (this->data_listener_.in ())) + { + this->data_listener_ = new ::CIAO::DDS4CCM::RTI::DataReaderListener_T + ( + listener, + status, + this->data_control_.in ()); } + this->rti_reader_.set_listener ( + this->data_listener_.in (), + ::CIAO::DDS4CCM::RTI::DataReaderListener_T::get_mask ()); + } + catch (...) + { + CIAO_ERROR (1, (LM_EMERGENCY, "Caught unknown c++ exception in activate in DDS_Listen_T\n")); + throw CORBA::INTERNAL (); + } +} + +template +void +DDS_Listen_T::passivate () +{ + CIAO_TRACE ("DDS_Listen_T::passivate"); + try + { + this->rti_reader_.set_listener ( + ::DDS::DataReaderListener::_nil (), + 0); } catch (...) { - CIAO_ERROR (1, (LM_EMERGENCY, "Caught unknown c++ exception while creating subscriber entities\n")); + CIAO_ERROR (1, (LM_EMERGENCY, "Caught unknown c++ exception in passivate in DDS_Listen_T\n")); throw CORBA::INTERNAL (); } } +template +void +DDS_Listen_T::remove () +{ + CIAO_TRACE ("DDS_Listen_T::remove"); + try + { + this->rti_reader_.delete_contained_entities (); + this->rti_reader_.set_impl (0); + } + catch (...) + { + CIAO_ERROR (1, (LM_EMERGENCY, "Caught unknown c++ exception in remove in DDS_Listen_T\n")); + throw CORBA::INTERNAL (); + } +} + + template typename CCM_TYPE::reader_type::_ptr_type DDS_Listen_T::get_data (void) diff --git a/CIAO/connectors/dds4ccm/impl/ndds/DDS_Listen_T.h b/CIAO/connectors/dds4ccm/impl/ndds/DDS_Listen_T.h index 5b0037cf320..50bae73e256 100644 --- a/CIAO/connectors/dds4ccm/impl/ndds/DDS_Listen_T.h +++ b/CIAO/connectors/dds4ccm/impl/ndds/DDS_Listen_T.h @@ -27,14 +27,20 @@ public: ::DDS::CCM_DataReader_ptr get_dds_entity (void); //@} - void init ( - typename CCM_TYPE::listener_type::_ptr_type listener, - ::CCM_DDS::PortStatusListener_ptr status, + void configuration_complete ( ::DDS::Topic_ptr topic, ::DDS::Subscriber_ptr subscriber, const char* library_name, const char* profile_name); + void activate ( + typename CCM_TYPE::listener_type::_ptr_type listener, + ::CCM_DDS::PortStatusListener_ptr status); + + void passivate (void); + + void remove (void); + private: /** * DDS_Listen diff --git a/CIAO/connectors/dds4ccm/impl/ndds/DDS_State_Connector_T.cpp b/CIAO/connectors/dds4ccm/impl/ndds/DDS_State_Connector_T.cpp index 576adf3ffb5..521574df5af 100644 --- a/CIAO/connectors/dds4ccm/impl/ndds/DDS_State_Connector_T.cpp +++ b/CIAO/connectors/dds4ccm/impl/ndds/DDS_State_Connector_T.cpp @@ -120,6 +120,17 @@ void DDS_State_Connector_T::configuration_complete (void) { DDS_TopicBase_Connector_T::configuration_complete (); + this->push_observer_.configuration_complete ( + this->topic_.in (), + this->subscriber_.in (), + this->library_name_, + this->profile_name_); + + this->pull_observer_.configuration_complete ( + this->topic_.in (), + this->subscriber_.in (), + this->library_name_, + this->profile_name_); } template @@ -133,13 +144,9 @@ DDS_State_Connector_T::ccm_activate (void) this->library_name_, this->profile_name_); - this->push_observer_.init ( + this->push_observer_.activate ( this->context_->get_connection_push_observer_data_listener (), - this->context_->get_connection_push_observer_status (), - this->topic_.in (), - this->subscriber_.in (), - this->library_name_, - this->profile_name_); + this->context_->get_connection_push_observer_status ()); this->push_state_observer_.init ( this->context_->get_connection_push_state_observer_data_listener (), @@ -149,12 +156,8 @@ DDS_State_Connector_T::ccm_activate (void) this->library_name_, this->profile_name_); - this->pull_observer_.init ( - this->context_->get_connection_pull_observer_status (), - this->topic_.in (), - this->subscriber_.in (), - this->library_name_, - this->profile_name_); + this->pull_observer_.activate ( + this->context_->get_connection_pull_observer_status ()); this->passive_observer_.init ( this->context_->get_connection_passive_observer_status (), @@ -169,6 +172,8 @@ void DDS_State_Connector_T::ccm_passivate (void) { DDS_TopicBase_Connector_T::ccm_passivate (); + this->push_observer_.passivate (); + this->pull_observer_.passivate (); } template @@ -176,5 +181,7 @@ void DDS_State_Connector_T::ccm_remove (void) { DDS_TopicBase_Connector_T::ccm_remove (); + this->push_observer_.remove (); + this->pull_observer_.remove (); } diff --git a/CIAO/connectors/dds4ccm/impl/ndds/DDS_TopicBase_Connector_T.cpp b/CIAO/connectors/dds4ccm/impl/ndds/DDS_TopicBase_Connector_T.cpp index 2e6b1a4c2ce..b136889b588 100644 --- a/CIAO/connectors/dds4ccm/impl/ndds/DDS_TopicBase_Connector_T.cpp +++ b/CIAO/connectors/dds4ccm/impl/ndds/DDS_TopicBase_Connector_T.cpp @@ -22,6 +22,10 @@ void DDS_TopicBase_Connector_T::configuration_complete (void) { DDS_Base_Connector_T::configuration_complete (); + + this->configure_default_topic (); + this->configure_subscriber (); + this->configure_publisher (); } template @@ -36,10 +40,6 @@ void DDS_TopicBase_Connector_T::ccm_activate (void) { DDS_Base_Connector_T::ccm_activate (); - - this->configure_default_topic (); - this->configure_subscriber (); - this->configure_publisher (); } template -- cgit v1.2.1