diff options
author | msmit <msmit@remedy.nl> | 2010-01-05 09:35:10 +0000 |
---|---|---|
committer | msmit <msmit@remedy.nl> | 2010-01-05 09:35:10 +0000 |
commit | cc8bffd715d8e3266d205d29338d775f429d24d1 (patch) | |
tree | 4f36c588613a3586d38e8c9c5909ec4e97744ec3 | |
parent | 6819f29fc99e572b6e23a8a90b8f986a123917aa (diff) | |
download | ATCD-cc8bffd715d8e3266d205d29338d775f429d24d1.tar.gz |
Tue Jan 5 09:37:56 UTC 2010 Marcel Smit <msmit@remedy.nl>
* connectors/dds4ccm/impl/ndds/DDS_Event_Connector_T.cpp:
* connectors/dds4ccm/impl/ndds/DDS_State_Connector_T.cpp:
* connectors/dds4ccm/impl/ndds/DDS_Update_T.h:
* connectors/dds4ccm/impl/ndds/DDS_Update_T.cpp:
* connectors/dds4ccm/impl/ndds/DDS_Write_T.h:
* connectors/dds4ccm/impl/ndds/DDS_Write_T.cpp:
Separate DDS lifecycle from CCM lifecycle. DDS_Update_T and DDS_Write_T
now have a configuration_complete, activate, passivate and remove
methods.
-rw-r--r-- | CIAO/ChangeLog | 12 | ||||
-rw-r--r-- | CIAO/connectors/dds4ccm/impl/ndds/DDS_Event_Connector_T.cpp | 18 | ||||
-rw-r--r-- | CIAO/connectors/dds4ccm/impl/ndds/DDS_State_Connector_T.cpp | 14 | ||||
-rw-r--r-- | CIAO/connectors/dds4ccm/impl/ndds/DDS_Update_T.cpp | 94 | ||||
-rw-r--r-- | CIAO/connectors/dds4ccm/impl/ndds/DDS_Update_T.h | 8 | ||||
-rw-r--r-- | CIAO/connectors/dds4ccm/impl/ndds/DDS_Write_T.cpp | 97 | ||||
-rw-r--r-- | CIAO/connectors/dds4ccm/impl/ndds/DDS_Write_T.h | 12 |
7 files changed, 193 insertions, 62 deletions
diff --git a/CIAO/ChangeLog b/CIAO/ChangeLog index 2416304064b..5a5e717a914 100644 --- a/CIAO/ChangeLog +++ b/CIAO/ChangeLog @@ -1,3 +1,15 @@ +Tue Jan 5 09:37:56 UTC 2010 Marcel Smit <msmit@remedy.nl> + + * connectors/dds4ccm/impl/ndds/DDS_Event_Connector_T.cpp: + * connectors/dds4ccm/impl/ndds/DDS_State_Connector_T.cpp: + * connectors/dds4ccm/impl/ndds/DDS_Update_T.h: + * connectors/dds4ccm/impl/ndds/DDS_Update_T.cpp: + * connectors/dds4ccm/impl/ndds/DDS_Write_T.h: + * connectors/dds4ccm/impl/ndds/DDS_Write_T.cpp: + Separate DDS lifecycle from CCM lifecycle. DDS_Update_T and DDS_Write_T + now have a configuration_complete, activate, passivate and remove + methods. + Tue Jan 5 08:51:51 UTC 2010 Marcel Smit <msmit@remedy.nl> * connectors/dds4ccm/impl/ndds/DDS_Get_T.cpp: 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 7aae160ac71..cbc17579777 100644 --- a/CIAO/connectors/dds4ccm/impl/ndds/DDS_Event_Connector_T.cpp +++ b/CIAO/connectors/dds4ccm/impl/ndds/DDS_Event_Connector_T.cpp @@ -108,6 +108,12 @@ DDS_Event_Connector_T<DDS_TYPE, CCM_TYPE>::configuration_complete (void) this->library_name_, this->profile_name_); + this->supplier_.configuration_complete( + this->topic_.in (), + this->publisher_.in (), + this->library_name_, + this->profile_name_); + this->pull_consumer_.configuration_complete ( this->topic_.in (), this->subscriber_.in (), @@ -126,11 +132,7 @@ DDS_Event_Connector_T<DDS_TYPE, CCM_TYPE>::ccm_activate (void) this->context_->get_connection_push_consumer_data_listener (), this->context_->get_connection_push_consumer_status ()); - this->supplier_.init ( - this->topic_.in (), - this->publisher_.in (), - this->library_name_, - this->profile_name_); + this->supplier_.activate (); this->pull_consumer_.activate ( this->context_->get_connection_pull_consumer_status ()); @@ -143,9 +145,8 @@ DDS_Event_Connector_T<DDS_TYPE, CCM_TYPE>::ccm_passivate (void) CIAO_TRACE ("DDS_Event_Connector_T<DDS_TYPE, CCM_TYPE>::ccm_passivate"); DDS_TopicBase_Connector_T<DDS_TYPE, CCM_TYPE>::ccm_passivate (); - this->push_consumer_.passivate (); - + this->supplier_.passivate (); this->pull_consumer_.passivate (); } @@ -156,8 +157,7 @@ DDS_Event_Connector_T<DDS_TYPE, CCM_TYPE>::ccm_remove (void) CIAO_TRACE ("DDS_Event_Connector_T<DDS_TYPE, CCM_TYPE>::ccm_remove"); DDS_TopicBase_Connector_T<DDS_TYPE, CCM_TYPE>::ccm_remove (); - this->push_consumer_.remove (); - + this->supplier_.remove (); this->pull_consumer_.remove (); } 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 37c1eb8de49..eb2bdb9ad12 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,12 @@ void DDS_State_Connector_T<DDS_TYPE, CCM_TYPE>::configuration_complete (void) { DDS_TopicBase_Connector_T<DDS_TYPE, CCM_TYPE>::configuration_complete (); + this->observable_.configuration_complete ( + this->topic_.in (), + this->publisher_.in (), + this->library_name_, + this->profile_name_); + this->push_observer_.configuration_complete ( this->topic_.in (), this->subscriber_.in (), @@ -150,11 +156,7 @@ void DDS_State_Connector_T<DDS_TYPE, CCM_TYPE>::ccm_activate (void) { DDS_TopicBase_Connector_T<DDS_TYPE, CCM_TYPE>::ccm_activate (); - this->observable_.init ( - this->topic_.in (), - this->publisher_.in (), - this->library_name_, - this->profile_name_); + this->observable_.activate (); this->push_observer_.activate ( this->context_->get_connection_push_observer_data_listener (), @@ -176,6 +178,7 @@ void DDS_State_Connector_T<DDS_TYPE, CCM_TYPE>::ccm_passivate (void) { DDS_TopicBase_Connector_T<DDS_TYPE, CCM_TYPE>::ccm_passivate (); + this->observable_.passivate (); this->push_observer_.passivate (); this->push_state_observer_.passivate (); this->pull_observer_.passivate (); @@ -187,6 +190,7 @@ void DDS_State_Connector_T<DDS_TYPE, CCM_TYPE>::ccm_remove (void) { DDS_TopicBase_Connector_T<DDS_TYPE, CCM_TYPE>::ccm_remove (); + this->observable_.remove (); this->push_observer_.remove (); this->push_state_observer_.remove (); this->pull_observer_.remove (); diff --git a/CIAO/connectors/dds4ccm/impl/ndds/DDS_Update_T.cpp b/CIAO/connectors/dds4ccm/impl/ndds/DDS_Update_T.cpp index f59b05ddb0d..39c23983d9b 100644 --- a/CIAO/connectors/dds4ccm/impl/ndds/DDS_Update_T.cpp +++ b/CIAO/connectors/dds4ccm/impl/ndds/DDS_Update_T.cpp @@ -20,52 +20,104 @@ DDS_Update_T<DDS_TYPE, CCM_TYPE>::~DDS_Update_T (void) template <typename DDS_TYPE, typename CCM_TYPE> void -DDS_Update_T<DDS_TYPE, CCM_TYPE>::init ( +DDS_Update_T<DDS_TYPE, CCM_TYPE>::configuration_complete ( ::DDS::Topic_ptr topic, ::DDS::Publisher_ptr publisher, const char* library_name, const char* profile_name) { + CIAO_TRACE ("DDS_Update_T<DDS_TYPE, CCM_TYPE>::configuration_complete"); try { if (CORBA::is_nil (this->data_writer_.in ())) { - this->data_listener_ = new ::CIAO::DDS4CCM::DataWriterListener_T - <DDS_TYPE, CCM_TYPE> (); - + ::DDS::DataWriter_var dwv_tmp; if (library_name && profile_name) { - ::DDS::DataWriter_var dwv_tmp = publisher-> - create_datawriter_with_profile ( + dwv_tmp = publisher->create_datawriter_with_profile ( topic, library_name, profile_name, - this->data_listener_.in (), - ::CIAO::DDS4CCM::DataWriterListener_T<DDS_TYPE, CCM_TYPE>::get_mask ()); - DDSDataWriter *rw = dynamic_cast < DDSDataWriter *> (dwv_tmp.in ()); - this->rti_writer_.set_impl (rw); - this->data_writer_ = ::DDS::CCM_DataWriter::_narrow (dwv_tmp); - this->dds_update_.set_impl (dwv_tmp); + ::DDS::DataWriterListener::_nil (), + 0); } else { ::DDS::DataWriterQos dwqos; - ::DDS::DataWriter_var dwv_tmp = publisher-> - create_datawriter ( + dwv_tmp = publisher->create_datawriter ( topic, dwqos, - this->data_listener_.in (), - ::CIAO::DDS4CCM::DataWriterListener_T<DDS_TYPE, CCM_TYPE>::get_mask ()); - DDSDataWriter *rw = dynamic_cast < DDSDataWriter *> (dwv_tmp.in ()); - this->rti_writer_.set_impl (rw); - this->data_writer_ = ::DDS::CCM_DataWriter::_narrow (dwv_tmp); - this->dds_update_.set_impl (dwv_tmp); + ::DDS::DataWriterListener::_nil (), + 0); } + ::CIAO::DDS4CCM::RTI::RTI_DataWriter_i *rw = + dynamic_cast < ::CIAO::DDS4CCM::RTI::RTI_DataWriter_i *> (dwv_tmp.in ()); + this->rti_writer_.set_impl (rw->get_impl ()); + this->data_writer_ = ::DDS::CCM_DataWriter::_narrow (dwv_tmp); + this->dds_update_.set_impl (dwv_tmp); + } + } + catch (...) + { + CIAO_ERROR (1, (LM_EMERGENCY, "DDS_Update_T::configuration_complete: Caught unknown c++ exception.\n")); + throw CORBA::INTERNAL (); + } +} + +template <typename DDS_TYPE, typename CCM_TYPE> +void +DDS_Update_T<DDS_TYPE, CCM_TYPE>::activate () +{ + CIAO_TRACE ("DDS_Update_T<DDS_TYPE, CCM_TYPE>::activate"); + try + { + if (CORBA::is_nil (this->data_listener_.in ())) + { + this->data_listener_ = new ::CIAO::DDS4CCM::DataWriterListener_T + <DDS_TYPE, CCM_TYPE> (); } + this->rti_writer_.set_listener ( + this->data_listener_.in (), + ::CIAO::DDS4CCM::DataWriterListener_T<DDS_TYPE, CCM_TYPE>::get_mask ()); + } + catch (...) + { + CIAO_ERROR (1, (LM_EMERGENCY, "DDS_Update_T::activate: Caught unknown c++ exception.\n")); + throw CORBA::INTERNAL (); + } +} + +template <typename DDS_TYPE, typename CCM_TYPE> +void +DDS_Update_T<DDS_TYPE, CCM_TYPE>::passivate () +{ + CIAO_TRACE ("DDS_Update_T<DDS_TYPE, CCM_TYPE>::passivate"); + try + { + this->rti_writer_.set_listener ( + ::DDS::DataWriterListener::_nil (), + 0); + } + catch (...) + { + CIAO_ERROR (1, (LM_EMERGENCY, "DDS_Update_T::passivate: Caught unknown c++ exception.\n")); + throw CORBA::INTERNAL (); + } +} + +template <typename DDS_TYPE, typename CCM_TYPE> +void +DDS_Update_T<DDS_TYPE, CCM_TYPE>::remove () +{ + CIAO_TRACE ("DDS_Update_T<DDS_TYPE, CCM_TYPE>::remove"); + try + { + //this->rti_writer_.delete_contained_entities (); + this->rti_writer_.set_impl (0); } catch (...) { - CIAO_ERROR (1, (LM_ERROR, "Caught unknown C++ exception while configuring port info_in_\n")); + CIAO_ERROR (1, (LM_EMERGENCY, "DDS_Update_T::remove: Caught unknown c++ exception.\n")); throw CORBA::INTERNAL (); } } diff --git a/CIAO/connectors/dds4ccm/impl/ndds/DDS_Update_T.h b/CIAO/connectors/dds4ccm/impl/ndds/DDS_Update_T.h index e8818b75a42..5d5e1f7153a 100644 --- a/CIAO/connectors/dds4ccm/impl/ndds/DDS_Update_T.h +++ b/CIAO/connectors/dds4ccm/impl/ndds/DDS_Update_T.h @@ -21,12 +21,18 @@ public: ::DDS::CCM_DataWriter_ptr get_dds_entity (void); - void init ( + void configuration_complete ( ::DDS::Topic_ptr topic, ::DDS::Publisher_ptr publisher, const char* library_name, const char* profile_name); + void activate (void); + + void passivate (void); + + void remove (void); + private: /** * DDS_Update diff --git a/CIAO/connectors/dds4ccm/impl/ndds/DDS_Write_T.cpp b/CIAO/connectors/dds4ccm/impl/ndds/DDS_Write_T.cpp index e3951f97ebc..de5ee5e2581 100644 --- a/CIAO/connectors/dds4ccm/impl/ndds/DDS_Write_T.cpp +++ b/CIAO/connectors/dds4ccm/impl/ndds/DDS_Write_T.cpp @@ -20,57 +20,108 @@ DDS_Write_T<DDS_TYPE, CCM_TYPE>::~DDS_Write_T (void) template <typename DDS_TYPE, typename CCM_TYPE> void -DDS_Write_T<DDS_TYPE, CCM_TYPE>::init ( +DDS_Write_T<DDS_TYPE, CCM_TYPE>::configuration_complete ( ::DDS::Topic_ptr topic, ::DDS::Publisher_ptr publisher, const char* library_name, const char* profile_name) { - CIAO_TRACE ("DDS_Write_T<DDS_TYPE, CCM_TYPE>::init"); + CIAO_TRACE ("DDS_Write_T<DDS_TYPE, CCM_TYPE>::configuration_complete"); try { - if (CORBA::is_nil (this->writer_.in ())) + if (CORBA::is_nil (this->data_writer_.in ())) { - this->writer_listener_ = new ::CIAO::DDS4CCM::DataWriterListener_T - <DDS_TYPE, CCM_TYPE> (); - + ::DDS::DataWriter_var dwv_tmp; if (library_name && profile_name) { - ::DDS::DataWriter_var dwv_tmp = publisher-> - create_datawriter_with_profile ( + dwv_tmp = publisher->create_datawriter_with_profile ( topic, library_name, profile_name, - this->writer_listener_.in (), - ::CIAO::DDS4CCM::DataWriterListener_T<DDS_TYPE, CCM_TYPE>::get_mask ()); - DDSDataWriter *rw = dynamic_cast < DDSDataWriter *> (dwv_tmp.in ()); - this->rti_writer_.set_impl (rw); - this->writer_ = ::DDS::CCM_DataWriter::_narrow (dwv_tmp); - this->writer_t_.set_impl (dwv_tmp); + ::DDS::DataWriterListener::_nil (), + 0); } else { ::DDS::DataWriterQos dwqos; - ::DDS::DataWriter_var dwv_tmp = publisher-> - create_datawriter ( + dwv_tmp = publisher->create_datawriter ( topic, dwqos, - this->writer_listener_.in (), - ::CIAO::DDS4CCM::DataWriterListener_T<DDS_TYPE, CCM_TYPE>::get_mask ()); - DDSDataWriter *rw = dynamic_cast < DDSDataWriter *> (dwv_tmp.in ()); - this->rti_writer_.set_impl (rw); - this->writer_ = ::DDS::CCM_DataWriter::_narrow (dwv_tmp); - this->writer_t_.set_impl (dwv_tmp); + ::DDS::DataWriterListener::_nil (), + 0); } + ::CIAO::DDS4CCM::RTI::RTI_DataWriter_i *rw = + dynamic_cast < ::CIAO::DDS4CCM::RTI::RTI_DataWriter_i *> (dwv_tmp.in ()); + this->rti_writer_.set_impl (rw->get_impl ()); + this->data_writer_ = ::DDS::CCM_DataWriter::_narrow (dwv_tmp); + this->writer_t_.set_impl (dwv_tmp); } } catch (...) { - CIAO_ERROR (1, (LM_ERROR, "Caught unknown C++ exception while configuring port info_in_\n")); + CIAO_ERROR (1, (LM_EMERGENCY, "DDS_Write_T::configuration_complete: Caught unknown c++ exception.\n")); throw CORBA::INTERNAL (); } } +template <typename DDS_TYPE, typename CCM_TYPE> +void +DDS_Write_T<DDS_TYPE, CCM_TYPE>::activate () +{ + CIAO_TRACE ("DDS_Write_T<DDS_TYPE, CCM_TYPE>::activate"); + try + { + if (CORBA::is_nil (this->data_listener_.in ())) + { + this->data_listener_ = new ::CIAO::DDS4CCM::DataWriterListener_T + <DDS_TYPE, CCM_TYPE> (); + } + this->rti_writer_.set_listener ( + this->data_listener_.in (), + ::CIAO::DDS4CCM::DataWriterListener_T<DDS_TYPE, CCM_TYPE>::get_mask ()); + } + catch (...) + { + CIAO_ERROR (1, (LM_EMERGENCY, "DDS_Write_T::activate: Caught unknown c++ exception.\n")); + throw CORBA::INTERNAL (); + } +} + +template <typename DDS_TYPE, typename CCM_TYPE> +void +DDS_Write_T<DDS_TYPE, CCM_TYPE>::passivate () +{ + CIAO_TRACE ("DDS_Write_T<DDS_TYPE, CCM_TYPE>::passivate"); + try + { + this->rti_writer_.set_listener ( + ::DDS::DataWriterListener::_nil (), + 0); + } + catch (...) + { + CIAO_ERROR (1, (LM_EMERGENCY, "DDS_Write_T::passivate: Caught unknown c++ exception.\n")); + throw CORBA::INTERNAL (); + } +} + +template <typename DDS_TYPE, typename CCM_TYPE> +void +DDS_Write_T<DDS_TYPE, CCM_TYPE>::remove () +{ + CIAO_TRACE ("DDS_Write_T<DDS_TYPE, CCM_TYPE>::remove"); + try + { + //this->rti_writer_.delete_contained_entities (); + this->rti_writer_.set_impl (0); + } + catch (...) + { + CIAO_ERROR (1, (LM_EMERGENCY, "DDS_Write_T::remove: Caught unknown c++ exception.\n")); + throw CORBA::INTERNAL (); + } +} + template <typename DDS_TYPE, typename CCM_TYPE> typename CCM_TYPE::writer_type::_ptr_type diff --git a/CIAO/connectors/dds4ccm/impl/ndds/DDS_Write_T.h b/CIAO/connectors/dds4ccm/impl/ndds/DDS_Write_T.h index d2c4abce0b7..18ca4ddf057 100644 --- a/CIAO/connectors/dds4ccm/impl/ndds/DDS_Write_T.h +++ b/CIAO/connectors/dds4ccm/impl/ndds/DDS_Write_T.h @@ -28,19 +28,25 @@ public: ::DDS::CCM_DataWriter_ptr get_dds_entity (void); //@} - void init ( + void configuration_complete ( ::DDS::Topic_ptr topic, ::DDS::Publisher_ptr publisher, const char* library_name, const char* profile_name); + void activate (void); + + void passivate (void); + + void remove (void); + private: /** * DDS_Write */ //@{ - ::DDS::CCM_DataWriter_var writer_; - ::DDS::DataWriterListener_var writer_listener_; + ::DDS::CCM_DataWriter_var data_writer_; + ::DDS::DataWriterListener_var data_listener_; ::CIAO::DDS4CCM::RTI::Writer_T<DDS_TYPE, CCM_TYPE> writer_t_; ::CIAO::DDS4CCM::RTI::RTI_DataWriter_i rti_writer_; //@} |