diff options
Diffstat (limited to 'CIAO/connectors/dds4ccm/impl/ndds/DDS_StateListen_T.cpp')
-rw-r--r-- | CIAO/connectors/dds4ccm/impl/ndds/DDS_StateListen_T.cpp | 109 |
1 files changed, 79 insertions, 30 deletions
diff --git a/CIAO/connectors/dds4ccm/impl/ndds/DDS_StateListen_T.cpp b/CIAO/connectors/dds4ccm/impl/ndds/DDS_StateListen_T.cpp index 6fec33974ca..7d10b312431 100644 --- a/CIAO/connectors/dds4ccm/impl/ndds/DDS_StateListen_T.cpp +++ b/CIAO/connectors/dds4ccm/impl/ndds/DDS_StateListen_T.cpp @@ -22,62 +22,111 @@ DDS_StateListen_T<DDS_TYPE, CCM_TYPE>::~DDS_StateListen_T (void) template <typename DDS_TYPE, typename CCM_TYPE> void -DDS_StateListen_T<DDS_TYPE, CCM_TYPE>::init ( - typename CCM_TYPE::statelistener_type::_ptr_type listener, - ::CCM_DDS::PortStatusListener_ptr status, +DDS_StateListen_T<DDS_TYPE, CCM_TYPE>::configuration_complete ( ::DDS::Topic_ptr topic, ::DDS::Subscriber_ptr subscriber, const char* library_name, const char* profile_name) { - CIAO_TRACE ("DDS_StateListen_T<DDS_TYPE, CCM_TYPE>::init"); + CIAO_TRACE ("DDS_StateListen_T<DDS_TYPE, CCM_TYPE>::configuration_complete"); try { - if (CORBA::is_nil (this->data_listener_.in ())) - { - this->data_listener_ = new ::CIAO::DDS4CCM::RTI::DataReaderStateListener_T - <DDS_TYPE, CCM_TYPE> ( - 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::DataReaderStateListener_T<DDS_TYPE, CCM_TYPE>::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::DataReaderStateListener_T<DDS_TYPE, CCM_TYPE>::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, "DDS_StateListen_T::configuration_complete: Caught unknown c++ exception.\n")); + throw CORBA::INTERNAL (); + } +} + +template <typename DDS_TYPE, typename CCM_TYPE> +void +DDS_StateListen_T<DDS_TYPE, CCM_TYPE>::activate ( + typename CCM_TYPE::statelistener_type::_ptr_type listener, + ::CCM_DDS::PortStatusListener_ptr status) +{ + CIAO_TRACE ("DDS_StateListen_T<DDS_TYPE, CCM_TYPE>::activate"); + + try + { + if (CORBA::is_nil (this->data_listener_.in ())) + { + this->data_listener_ = new ::CIAO::DDS4CCM::RTI::DataReaderStateListener_T + <DDS_TYPE, CCM_TYPE> ( + listener, + status, + data_control_.in ()); } + this->rti_reader_.set_listener ( + this->data_listener_.in (), + 0); + } + catch (...) + { + CIAO_ERROR (1, (LM_EMERGENCY, "DDS_StateListen_T::activate: Caught unknown c++ exception.\n")); + throw CORBA::INTERNAL (); + } +} + +template <typename DDS_TYPE, typename CCM_TYPE> +void +DDS_StateListen_T<DDS_TYPE, CCM_TYPE>::passivate (void) +{ + CIAO_TRACE ("DDS_StateListen_T<DDS_TYPE, CCM_TYPE>::passivate"); + try + { + this->rti_reader_.set_listener ( + ::DDS::DataReaderListener::_nil (), + 0); + } + catch (...) + { + CIAO_ERROR (1, (LM_EMERGENCY, "DDS_StateListen_T::passivate: Caught unknown c++ exception.\n")); + throw CORBA::INTERNAL (); + } +} + +template <typename DDS_TYPE, typename CCM_TYPE> +void +DDS_StateListen_T<DDS_TYPE, CCM_TYPE>::remove (void) +{ + CIAO_TRACE ("DDS_StateListen_T<DDS_TYPE, CCM_TYPE>::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, "DDS_StateListen_T::remove: Caught unknown c++ exception.\n")); throw CORBA::INTERNAL (); } } |