diff options
Diffstat (limited to 'CIAO/connectors/dds4ccm/impl/DataReaderStateListener_T.cpp')
-rw-r--r-- | CIAO/connectors/dds4ccm/impl/DataReaderStateListener_T.cpp | 57 |
1 files changed, 27 insertions, 30 deletions
diff --git a/CIAO/connectors/dds4ccm/impl/DataReaderStateListener_T.cpp b/CIAO/connectors/dds4ccm/impl/DataReaderStateListener_T.cpp index df1a32cdf5c..3d3bf2119d1 100644 --- a/CIAO/connectors/dds4ccm/impl/DataReaderStateListener_T.cpp +++ b/CIAO/connectors/dds4ccm/impl/DataReaderStateListener_T.cpp @@ -11,12 +11,12 @@ template <typename DDS_TYPE, typename CCM_TYPE, DDS4CCM_Vendor VENDOR_TYPE> CIAO::DDS4CCM::DataReaderStateListener_T<DDS_TYPE, CCM_TYPE, VENDOR_TYPE>::DataReaderStateListener_T ( typename CCM_TYPE::statelistener_type::_ptr_type listener, ::CCM_DDS::PortStatusListener_ptr port_status_listener, - ::CCM_DDS::StateListenerControl_ptr control, + StateListenerControl_type& control, ACE_Reactor* reactor, - ConditionManager_type * condition_manager) + ConditionManager_type& condition_manager) : PortStatusListener_T <DDS_TYPE, CCM_TYPE, VENDOR_TYPE> (port_status_listener, reactor) , listener_ (CCM_TYPE::statelistener_type::_duplicate (listener)), - control_ (::CCM_DDS::StateListenerControl::_duplicate (control)), + control_ (control), condition_manager_ (condition_manager) { DDS4CCM_TRACE ("CIAO::DDS4CCM::DataReaderStateListener_T::DataReaderStateListener_T"); @@ -35,27 +35,25 @@ CIAO::DDS4CCM::DataReaderStateListener_T<DDS_TYPE, CCM_TYPE, VENDOR_TYPE>::on_da ::DDS::DataReader_ptr rdr) { DDS4CCM_TRACE ("CIAO::DDS4CCM::DataReaderStateListener_T::on_data_available"); - if (::CORBA::is_nil (this->control_.in ()) || - this->control_->mode () == ::CCM_DDS::NOT_ENABLED || - ::CORBA::is_nil (rdr)) + if (!::CORBA::is_nil (rdr) && + this->control_.mode () != ::CCM_DDS::NOT_ENABLED) { - return; - } - if (this->reactor_) - { - DataReaderStateHandler_type* rh = 0; - ACE_NEW (rh, DataReaderStateHandler_type (this, rdr)); - ACE_Event_Handler_var safe_handler (rh); - if (this->reactor_->notify (rh) != 0) + if (this->reactor_) { - DDS4CCM_ERROR (DDS4CCM_LOG_LEVEL_ERROR, (LM_ERROR, CLINFO - ACE_TEXT ("DataReaderStateHandler_T::") - ACE_TEXT ("failed to use reactor.\n"))); + DataReaderStateHandler_type* rh = 0; + ACE_NEW (rh, DataReaderStateHandler_type (this, rdr)); + ACE_Event_Handler_var safe_handler (rh); + if (this->reactor_->notify (rh) != 0) + { + DDS4CCM_ERROR (DDS4CCM_LOG_LEVEL_ERROR, (LM_ERROR, CLINFO + ACE_TEXT ("DataReaderStateHandler_T::") + ACE_TEXT ("failed to use reactor.\n"))); + } + } + else + { + this->on_data_available_i (rdr); } - } - else - { - this->on_data_available_i (rdr); } } @@ -66,9 +64,8 @@ CIAO::DDS4CCM::DataReaderStateListener_T<DDS_TYPE, CCM_TYPE, VENDOR_TYPE>::on_da { DDS4CCM_TRACE ("CIAO::DDS4CCM::DataReaderStateListener_T::on_data_available_i"); - if (::CORBA::is_nil (this->control_.in ()) || - this->control_->mode () == ::CCM_DDS::NOT_ENABLED || - ::CORBA::is_nil (rdr)) + if (::CORBA::is_nil (rdr) || + this->control_.mode () == ::CCM_DDS::NOT_ENABLED) { return; } @@ -91,17 +88,17 @@ CIAO::DDS4CCM::DataReaderStateListener_T<DDS_TYPE, CCM_TYPE, VENDOR_TYPE>::on_da ::DDS_SampleInfoSeq sample_info; ::DDS_Long max_samples = 0; - this->control_->mode () == ::CCM_DDS::ONE_BY_ONE + this->control_.mode () == ::CCM_DDS::ONE_BY_ONE ? max_samples = DDS_LENGTH_UNLIMITED - : this->control_->max_delivered_data() == 0 + : this->control_.max_delivered_data() == 0 ? max_samples = DDS_LENGTH_UNLIMITED - : max_samples = this->control_->max_delivered_data (); + : max_samples = this->control_.max_delivered_data (); ::DDS::ReturnCode_t const result = reader->take ( data, sample_info, max_samples, - this->condition_manager_->get_querycondition_listener ()); + this->condition_manager_.get_querycondition_listener ()); if (result == DDS_RETCODE_NO_DATA) { return; @@ -112,7 +109,7 @@ CIAO::DDS4CCM::DataReaderStateListener_T<DDS_TYPE, CCM_TYPE, VENDOR_TYPE>::on_da ACE_TEXT ("Unable to take data from data reader, ") ACE_TEXT ("error %d.\n"), result)); } - if (this->control_->mode () == ::CCM_DDS::ONE_BY_ONE) + if (this->control_.mode () == ::CCM_DDS::ONE_BY_ONE) { for (::DDS_Long i = 0; i < data.length (); ++i) { @@ -143,7 +140,7 @@ CIAO::DDS4CCM::DataReaderStateListener_T<DDS_TYPE, CCM_TYPE, VENDOR_TYPE>::on_da } } } - else if (this->control_->mode () == ::CCM_DDS::MANY_BY_MANY) + else if (this->control_.mode () == ::CCM_DDS::MANY_BY_MANY) { typedef std::vector<DDS_Long> Updates; Updates updates; |