diff options
author | Johnny Willemsen <jwillemsen@remedy.nl> | 2009-11-25 14:27:05 +0000 |
---|---|---|
committer | Johnny Willemsen <jwillemsen@remedy.nl> | 2009-11-25 14:27:05 +0000 |
commit | f8fc918027d4aeb0f38f741fa580b7f8d9feee78 (patch) | |
tree | 668d85057114425d76a96eed22e56a6fb0c9d18e | |
parent | e130a31df5e9940ac59b43e4cbea89e7d7583115 (diff) | |
download | ATCD-f8fc918027d4aeb0f38f741fa580b7f8d9feee78.tar.gz |
Wed Nov 25 14:26:21 UTC 2009 Johnny Willemsen <jwillemsen@remedy.nl>
* connectors/dds4ccm/idl/dds_rtf2_dcps.idl
* connectors/dds4ccm/impl/ndds/DDS_Base_Connector_T.cpp
* connectors/dds4ccm/impl/ndds/DDS_Base_Connector_T.h
* connectors/dds4ccm/impl/ndds/DDS_Event_Connector_T.cpp
* connectors/dds4ccm/impl/ndds/DomainParticipant.cpp
* connectors/dds4ccm/impl/ndds/DomainParticipant.h
* connectors/dds4ccm/impl/ndds/DomainParticipantFactory.cpp
* connectors/dds4ccm/impl/ndds/DomainParticipantFactory.h
* connectors/dds4ccm/impl/ndds/Publisher.cpp
* connectors/dds4ccm/impl/ndds/Publisher.h
* connectors/dds4ccm/impl/ndds/Subscriber.cpp
* connectors/dds4ccm/impl/ndds/Subscriber.h
Implemented all with_profile methods
-rw-r--r-- | CIAO/ChangeLog | 16 | ||||
-rw-r--r-- | CIAO/connectors/dds4ccm/idl/dds_rtf2_dcps.idl | 38 | ||||
-rw-r--r-- | CIAO/connectors/dds4ccm/impl/ndds/DDS_Base_Connector_T.cpp | 24 | ||||
-rw-r--r-- | CIAO/connectors/dds4ccm/impl/ndds/DDS_Base_Connector_T.h | 2 | ||||
-rw-r--r-- | CIAO/connectors/dds4ccm/impl/ndds/DDS_Event_Connector_T.cpp | 106 | ||||
-rw-r--r-- | CIAO/connectors/dds4ccm/impl/ndds/DomainParticipant.cpp | 124 | ||||
-rw-r--r-- | CIAO/connectors/dds4ccm/impl/ndds/DomainParticipant.h | 20 | ||||
-rw-r--r-- | CIAO/connectors/dds4ccm/impl/ndds/DomainParticipantFactory.cpp | 10 | ||||
-rw-r--r-- | CIAO/connectors/dds4ccm/impl/ndds/DomainParticipantFactory.h | 5 | ||||
-rw-r--r-- | CIAO/connectors/dds4ccm/impl/ndds/Publisher.cpp | 39 | ||||
-rw-r--r-- | CIAO/connectors/dds4ccm/impl/ndds/Publisher.h | 7 | ||||
-rw-r--r-- | CIAO/connectors/dds4ccm/impl/ndds/Subscriber.cpp | 37 | ||||
-rw-r--r-- | CIAO/connectors/dds4ccm/impl/ndds/Subscriber.h | 8 |
13 files changed, 400 insertions, 36 deletions
diff --git a/CIAO/ChangeLog b/CIAO/ChangeLog index c78e451f004..322c8f54dd9 100644 --- a/CIAO/ChangeLog +++ b/CIAO/ChangeLog @@ -1,3 +1,19 @@ +Wed Nov 25 14:26:21 UTC 2009 Johnny Willemsen <jwillemsen@remedy.nl> + + * connectors/dds4ccm/idl/dds_rtf2_dcps.idl + * connectors/dds4ccm/impl/ndds/DDS_Base_Connector_T.cpp + * connectors/dds4ccm/impl/ndds/DDS_Base_Connector_T.h + * connectors/dds4ccm/impl/ndds/DDS_Event_Connector_T.cpp + * connectors/dds4ccm/impl/ndds/DomainParticipant.cpp + * connectors/dds4ccm/impl/ndds/DomainParticipant.h + * connectors/dds4ccm/impl/ndds/DomainParticipantFactory.cpp + * connectors/dds4ccm/impl/ndds/DomainParticipantFactory.h + * connectors/dds4ccm/impl/ndds/Publisher.cpp + * connectors/dds4ccm/impl/ndds/Publisher.h + * connectors/dds4ccm/impl/ndds/Subscriber.cpp + * connectors/dds4ccm/impl/ndds/Subscriber.h + Implemented all with_profile methods + Wed Nov 25 14:12:21 UTC 2009 Marcel Smit <msmit@remedy.nl> * bin/ciao_tests.lst: diff --git a/CIAO/connectors/dds4ccm/idl/dds_rtf2_dcps.idl b/CIAO/connectors/dds4ccm/idl/dds_rtf2_dcps.idl index aa7fc6a3219..7f473db37f1 100644 --- a/CIAO/connectors/dds4ccm/idl/dds_rtf2_dcps.idl +++ b/CIAO/connectors/dds4ccm/idl/dds_rtf2_dcps.idl @@ -697,6 +697,11 @@ module DDS { in PublisherQos qos, in PublisherListener a_listener, in StatusMask mask); + Publisher create_publisher_with_profile( + in string library_name, + in string profile_name, + in PublisherListener a_listener, + in StatusMask mask); ReturnCode_t delete_publisher( in Publisher p); @@ -704,6 +709,11 @@ module DDS { in SubscriberQos qos, in SubscriberListener a_listener, in StatusMask mask); + Subscriber create_subscriber_with_profile( + in string library_name, + in string profile_name, + in SubscriberListener a_listener, + in StatusMask mask); ReturnCode_t delete_subscriber( in Subscriber s); Subscriber get_builtin_subscriber(); @@ -714,6 +724,13 @@ module DDS { in TopicQos qos, in TopicListener a_listener, in StatusMask mask); + Topic create_topic_with_profile( + in string topic_name, + in string type_name, + in string library_name, + in string profile_name, + in TopicListener a_listener, + in StatusMask mask); ReturnCode_t delete_topic( in Topic a_topic); @@ -806,6 +823,12 @@ module DDS { in DomainParticipantQos qos, in DomainParticipantListener a_listener, in StatusMask mask); + DomainParticipant create_participant_with_profile( + in DomainId_t domain_id, + in string library_name, + in string profile_name, + in DomainParticipantListener a_listener, + in StatusMask mask); ReturnCode_t delete_participant( in DomainParticipant a_participant); @@ -814,6 +837,9 @@ module DDS { ReturnCode_t set_default_participant_qos( in DomainParticipantQos qos); + ReturnCode_t set_default_participant_qos_with_profile( + in string library_name, + in string profile_name); ReturnCode_t get_default_participant_qos( inout DomainParticipantQos qos); @@ -876,6 +902,12 @@ module DDS { in DataWriterQos qos, in DataWriterListener a_listener, in StatusMask mask); + DataWriter create_datawriter_with_profile( + in Topic a_topic, + in string library_name, + in string probile_name, + in DataWriterListener a_listener, + in StatusMask mask); ReturnCode_t delete_datawriter( in DataWriter a_datawriter); DataWriter lookup_datawriter( @@ -989,6 +1021,12 @@ module DDS { in DataReaderQos qos, in DataReaderListener a_listener, in StatusMask mask); + DataReader create_datareader_with_profile( + in TopicDescription a_topic, + in string library_name, + in string profile_name, + in DataReaderListener a_listener, + in StatusMask mask); ReturnCode_t delete_datareader( in DataReader a_datareader); ReturnCode_t delete_contained_entities(); diff --git a/CIAO/connectors/dds4ccm/impl/ndds/DDS_Base_Connector_T.cpp b/CIAO/connectors/dds4ccm/impl/ndds/DDS_Base_Connector_T.cpp index e59bb550e39..4b7cf9d1616 100644 --- a/CIAO/connectors/dds4ccm/impl/ndds/DDS_Base_Connector_T.cpp +++ b/CIAO/connectors/dds4ccm/impl/ndds/DDS_Base_Connector_T.cpp @@ -11,6 +11,8 @@ template <typename DDS_TYPE, typename CCM_TYPE> DDS_Base_Connector_T<DDS_TYPE, CCM_TYPE>::DDS_Base_Connector_T (void) : domain_id_ (0) , configuration_complete_ (false) + , library_name_ (0) + , profile_name_ (0) { ACE_Env_Value<int> id (ACE_TEXT("DDS4CCM_DEFAULT_DOMAIN_ID"), this->domain_id_); this->domain_id_ = id; @@ -87,12 +89,9 @@ DDS_Base_Connector_T<DDS_TYPE, CCM_TYPE>::configure_default_domain (void) // NDDS_CONFIG_LOG_VERBOSITY_STATUS_ALL ); // Generic code - ::CIAO::DDS4CCM::RTI::RTI_DomainParticipantFactory_i* df = + this->domain_participant_factory_ = new ::CIAO::DDS4CCM::RTI::RTI_DomainParticipantFactory_i (); - this->domain_participant_factory_ = df; - const char* library = 0; - const char* profile = 0; if (this->qos_profile_.in ()) { char* buf = ACE_OS::strdup (this->qos_profile_.in ()); @@ -100,22 +99,23 @@ DDS_Base_Connector_T<DDS_TYPE, CCM_TYPE>::configure_default_domain (void) tok.delimiter_replace ('#', 0); for (char *p = tok.next (); p; p = tok.next ()) { - if (!library) + if (!this->library_name_) { - library = p; + this->library_name_ = p; } - else if (!profile) + else if (!this->profile_name_) { - profile = p; + this->profile_name_ = p; } } } - if (library && profile) + if (this->library_name_ && this->profile_name_) { + this->domain_participant_factory_->set_default_participant_qos_with_profile (this->library_name_, this->profile_name_); this->domain_participant_ = - df->create_participant_with_profile (this->domain_id_, - library, - profile, + this->domain_participant_factory_->create_participant_with_profile (this->domain_id_, + this->library_name_, + this->profile_name_, 0, DDS_STATUS_MASK_NONE); } diff --git a/CIAO/connectors/dds4ccm/impl/ndds/DDS_Base_Connector_T.h b/CIAO/connectors/dds4ccm/impl/ndds/DDS_Base_Connector_T.h index 0773e52c03b..6928dd24ff1 100644 --- a/CIAO/connectors/dds4ccm/impl/ndds/DDS_Base_Connector_T.h +++ b/CIAO/connectors/dds4ccm/impl/ndds/DDS_Base_Connector_T.h @@ -39,6 +39,8 @@ protected: DDS::DomainId_t domain_id_; CORBA::String_var qos_profile_; bool configuration_complete_; + const char* library_name_; + const char* profile_name_; ::DDS::DomainParticipantFactory_var domain_participant_factory_; ::DDS::DomainParticipant_var domain_participant_; 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 c121db218c7..63b384f3ece 100644 --- a/CIAO/connectors/dds4ccm/impl/ndds/DDS_Event_Connector_T.cpp +++ b/CIAO/connectors/dds4ccm/impl/ndds/DDS_Event_Connector_T.cpp @@ -34,10 +34,21 @@ DDS_Event_Connector_T<DDS_TYPE, CCM_TYPE>::configure_port_dds_write (void) { if (CORBA::is_nil (this->supplier_publisher_.in ())) { - ::DDS::PublisherQos pqos; - this->supplier_publisher_ = this->domain_participant_->create_publisher (pqos, + if (this->library_name_ && this->profile_name_) + { + this->supplier_publisher_ = this->domain_participant_->create_publisher_with_profile ( + this->library_name_, + this->profile_name_, 0, 0); + } + else + { + ::DDS::PublisherQos pqos; + this->supplier_publisher_ = this->domain_participant_->create_publisher (pqos, + 0, + 0); + } } if (CORBA::is_nil (this->supplier_writer_.in ())) @@ -48,12 +59,24 @@ DDS_Event_Connector_T<DDS_TYPE, CCM_TYPE>::configure_port_dds_write (void) this->listen_datalistener_mode_, this->listen_datalistener_max_delivered_data_); - ::DDS::DataWriterQos dwqos; - ::DDS::DataWriter_var dwv_tmp = this->supplier_publisher_->create_datawriter (this->topic_.in (), - dwqos, - this->supplier_listener_.in (), - DDS_OFFERED_DEADLINE_MISSED_STATUS | DDS_OFFERED_INCOMPATIBLE_QOS_STATUS | DDS_LIVELINESS_LOST_STATUS | DDS_PUBLICATION_MATCHED_STATUS); - this->supplier_writer_ = ::DDS::CCM_DataWriter::_narrow (dwv_tmp); + if (this->library_name_ && this->profile_name_) + { + ::DDS::DataWriter_var dwv_tmp = this->supplier_publisher_->create_datawriter_with_profile (this->topic_.in (), + this->library_name_, + this->profile_name_, + this->supplier_listener_.in (), + DDS_OFFERED_DEADLINE_MISSED_STATUS | DDS_OFFERED_INCOMPATIBLE_QOS_STATUS | DDS_LIVELINESS_LOST_STATUS | DDS_PUBLICATION_MATCHED_STATUS); + this->supplier_writer_ = ::DDS::CCM_DataWriter::_narrow (dwv_tmp); + } + else + { + ::DDS::DataWriterQos dwqos; + ::DDS::DataWriter_var dwv_tmp = this->supplier_publisher_->create_datawriter (this->topic_.in (), + dwqos, + this->supplier_listener_.in (), + DDS_OFFERED_DEADLINE_MISSED_STATUS | DDS_OFFERED_INCOMPATIBLE_QOS_STATUS | DDS_LIVELINESS_LOST_STATUS | DDS_PUBLICATION_MATCHED_STATUS); + this->supplier_writer_ = ::DDS::CCM_DataWriter::_narrow (dwv_tmp); + } } } catch (...) @@ -73,10 +96,21 @@ DDS_Event_Connector_T<DDS_TYPE, CCM_TYPE>::configure_port_dds_listen (void) { if (CORBA::is_nil (this->listen_subscriber_.in ())) { - ::DDS::SubscriberQos sqos; - this->listen_subscriber_ = this->domain_participant_->create_subscriber (sqos, - 0, - 0); + if (this->library_name_ && this->profile_name_) + { + this->listen_subscriber_ = this->domain_participant_->create_subscriber_with_profile ( + this->library_name_, + this->profile_name_, + 0, + 0); + } + else + { + ::DDS::SubscriberQos sqos; + this->listen_subscriber_ = this->domain_participant_->create_subscriber (sqos, + 0, + 0); + } } if (CORBA::is_nil (this->__listen_datareaderlistener.in ())) @@ -90,22 +124,46 @@ DDS_Event_Connector_T<DDS_TYPE, CCM_TYPE>::configure_port_dds_listen (void) if (CORBA::is_nil (this->push_consumer_data_.in ())) { - ::DDS::DataReaderQos drqos; - this->push_consumer_data_ = - this->listen_subscriber_->create_datareader (this->topic_.in (), - drqos, - this->__listen_datareaderlistener.in (), - DDS_DATA_AVAILABLE_STATUS | DDS_REQUESTED_DEADLINE_MISSED_STATUS | DDS_SAMPLE_LOST_STATUS | DDS_REQUESTED_INCOMPATIBLE_QOS_STATUS); + if (this->library_name_ && this->profile_name_) + { + this->push_consumer_data_ = + this->listen_subscriber_->create_datareader_with_profile (this->topic_.in (), + this->library_name_, + this->profile_name_, + this->__listen_datareaderlistener.in (), + DDS_DATA_AVAILABLE_STATUS | DDS_REQUESTED_DEADLINE_MISSED_STATUS | DDS_SAMPLE_LOST_STATUS | DDS_REQUESTED_INCOMPATIBLE_QOS_STATUS); + } + else + { + ::DDS::DataReaderQos drqos; + this->push_consumer_data_ = + this->listen_subscriber_->create_datareader (this->topic_.in (), + drqos, + this->__listen_datareaderlistener.in (), + DDS_DATA_AVAILABLE_STATUS | DDS_REQUESTED_DEADLINE_MISSED_STATUS | DDS_SAMPLE_LOST_STATUS | DDS_REQUESTED_INCOMPATIBLE_QOS_STATUS); + } } if (CORBA::is_nil (this->pull_consumer_fresh_data_.in ())) { - ::DDS::DataReaderQos drqos; - this->pull_consumer_fresh_data_ = - this->listen_subscriber_->create_datareader (this->topic_.in (), - drqos, - this->__listen_datareaderlistener.in (), - DDS_DATA_AVAILABLE_STATUS | DDS_REQUESTED_DEADLINE_MISSED_STATUS | DDS_SAMPLE_LOST_STATUS | DDS_REQUESTED_INCOMPATIBLE_QOS_STATUS); + if (this->profile_name_ && this->library_name_) + { + this->pull_consumer_fresh_data_ = + this->listen_subscriber_->create_datareader_with_profile (this->topic_.in (), + this->library_name_, + this->profile_name_, + this->__listen_datareaderlistener.in (), + DDS_DATA_AVAILABLE_STATUS | DDS_REQUESTED_DEADLINE_MISSED_STATUS | DDS_SAMPLE_LOST_STATUS | DDS_REQUESTED_INCOMPATIBLE_QOS_STATUS); + } + else + { + ::DDS::DataReaderQos drqos; + this->pull_consumer_fresh_data_ = + this->listen_subscriber_->create_datareader (this->topic_.in (), + drqos, + this->__listen_datareaderlistener.in (), + DDS_DATA_AVAILABLE_STATUS | DDS_REQUESTED_DEADLINE_MISSED_STATUS | DDS_SAMPLE_LOST_STATUS | DDS_REQUESTED_INCOMPATIBLE_QOS_STATUS); + } } } diff --git a/CIAO/connectors/dds4ccm/impl/ndds/DomainParticipant.cpp b/CIAO/connectors/dds4ccm/impl/ndds/DomainParticipant.cpp index 85b0a720b1d..a1b26329a7b 100644 --- a/CIAO/connectors/dds4ccm/impl/ndds/DomainParticipant.cpp +++ b/CIAO/connectors/dds4ccm/impl/ndds/DomainParticipant.cpp @@ -39,6 +39,41 @@ namespace CIAO } ::DDS::Publisher_ptr + RTI_DomainParticipant_i::create_publisher_with_profile ( + const char* library_name, + const char *profile_name, + ::DDS::PublisherListener_ptr a_listener, + ::DDS::StatusMask mask) + { + CIAO_TRACE ("DDS_DomainParticipant_i::create_publisher_with_profile"); + + CIAO_DEBUG ((LM_TRACE, CLINFO "RTI_DomainParticipant_i::create_publisher_with_profile - " + "Creating Publisher\n")); + + RTI_PublisherListener_i *rti_pl = new RTI_PublisherListener_i (a_listener); + DDSPublisher * rti_pub = + this->impl_->create_publisher_with_profile (library_name, + profile_name, + rti_pl, + mask); + + if (!rti_pub) + { + CIAO_ERROR ((LM_ERROR, CLINFO "RTI_DomainParticipant_i::create_publisher_with_profile - " + "Error: Unable to create Publisher\n")); + throw CCM_DDS::InternalError (::DDS::RETCODE_ERROR, 0); + } + + CIAO_DEBUG ((LM_INFO, CLINFO "RTI_DomainParticipant_i::create_publisher_with_profile - " + "Successfully created a DDSPublisher\n")); + + rti_pub->enable (); + ::DDS::Publisher_var retval = new RTI_Publisher_i (rti_pub); + + return retval._retn (); + } + + ::DDS::Publisher_ptr RTI_DomainParticipant_i::create_publisher (const ::DDS::PublisherQos & /*qos*/, ::DDS::PublisherListener_ptr a_listener, ::DDS::StatusMask mask) @@ -102,6 +137,40 @@ namespace CIAO } ::DDS::Subscriber_ptr + RTI_DomainParticipant_i::create_subscriber_with_profile ( + const char* library_name, + const char *profile_name, + ::DDS::SubscriberListener_ptr /*a_listener*/, + ::DDS::StatusMask mask) + { + CIAO_TRACE ("DDS_DomainParticipant_i::create_subscriber_with_profile"); + + CIAO_DEBUG ((LM_TRACE, CLINFO "RTI_DomainParticipant_i::create_subscriber_with_profile - " + "Creating Subscriber\n")); + + DDSSubscriber * rti_sub = + this->impl_->create_subscriber_with_profile (library_name, + profile_name, + 0, + mask); + + if (!rti_sub) + { + CIAO_ERROR ((LM_ERROR, CLINFO "RTI_DomainParticipant_i::create_subscriber_with_profile - " + "Error: Unable to create Subscriber\n")); + throw CCM_DDS::InternalError (::DDS::RETCODE_ERROR, 0); + } + + CIAO_DEBUG ((LM_INFO, CLINFO "RTI_DomainParticipant_i::create_subscriber_with_profile - " + "Successfully created a DDSSubscriber\n")); + + rti_sub->enable (); + ::DDS::Subscriber_var retval = new RTI_Subscriber_i (rti_sub); + + return retval._retn (); + } + + ::DDS::Subscriber_ptr RTI_DomainParticipant_i::create_subscriber (const ::DDS::SubscriberQos & /*qos*/, ::DDS::SubscriberListener_ptr /*a_listener*/, ::DDS::StatusMask mask) @@ -210,6 +279,61 @@ namespace CIAO return retval._retn (); } + ::DDS::Topic_ptr + RTI_DomainParticipant_i::create_topic_with_profile ( + const char *impl_name, + const char *type_name, + const char *library_name, + const char *profile_name, + ::DDS::TopicListener_ptr a_listener, + ::DDS::StatusMask mask) + { + CIAO_TRACE ("DDS_DomainParticipant_i::create_topic_with_profile"); + + if (impl_name == 0) + { + CIAO_ERROR ((LM_ERROR, CLINFO "DDS_DomainParticipant_i::create_topic_with_profile - " + "Error: provided nil topic name\n")); + throw CCM_DDS::InternalError (::DDS::RETCODE_BAD_PARAMETER, + 0); + } + + if (type_name == 0) + { + CIAO_ERROR ((LM_ERROR, CLINFO "DDS_DomainParticipant_i::create_topic_with_profile - " + "Error: provided nil type name\n")); + throw CCM_DDS::InternalError (::DDS::RETCODE_BAD_PARAMETER, + 0); + } + + CIAO_DEBUG ((LM_DEBUG, CLINFO "DDS_DomainParticipant_i::create_topic_with_profile - " + "Attempting to create topic with name %C and type %C\n", + impl_name, type_name)); + + RTI_TopicListener_i *rti_tl = new RTI_TopicListener_i (a_listener); + DDSTopic *rti_topic = this->impl_->create_topic_with_profile (impl_name, + type_name, + library_name, + profile_name, + rti_tl, + mask); + + if (rti_topic == 0) + { + CIAO_ERROR ((LM_ERROR, CLINFO "DDS_DomainParticipant_i::create_topic - " + "Error: RTI DDS returned a nil topic\n")); + throw CCM_DDS::InternalError (::DDS::RETCODE_ERROR, 0); + } + + CIAO_DEBUG ((LM_INFO, CLINFO "DDS_DomainParticipant_i::create_topic - " + "Successfully created topic with name %C and type %C\n", + impl_name, type_name)); + + ::DDS::Topic_var retval = new RTI_Topic_i (rti_topic); + + return retval._retn (); + } + ::DDS::ReturnCode_t RTI_DomainParticipant_i::delete_topic (::DDS::Topic_ptr a_topic) { diff --git a/CIAO/connectors/dds4ccm/impl/ndds/DomainParticipant.h b/CIAO/connectors/dds4ccm/impl/ndds/DomainParticipant.h index 986c8e4eab6..5c56b4e5f59 100644 --- a/CIAO/connectors/dds4ccm/impl/ndds/DomainParticipant.h +++ b/CIAO/connectors/dds4ccm/impl/ndds/DomainParticipant.h @@ -43,6 +43,12 @@ namespace CIAO ::DDS::PublisherListener_ptr a_listener, ::DDS::StatusMask mask); + virtual ::DDS::Publisher_ptr create_publisher_with_profile ( + const char* library_name, + const char *profile_name, + ::DDS::PublisherListener_ptr a_listener, + ::DDS::StatusMask mask); + virtual ::DDS::ReturnCode_t delete_publisher (::DDS::Publisher_ptr p); @@ -51,6 +57,12 @@ namespace CIAO ::DDS::SubscriberListener_ptr a_listener, ::DDS::StatusMask mask); + virtual ::DDS::Subscriber_ptr create_subscriber_with_profile( + const char* library_name, + const char *profile_name, + ::DDS::SubscriberListener_ptr a_listener, + ::DDS::StatusMask mask); + virtual ::DDS::ReturnCode_t delete_subscriber (::DDS::Subscriber_ptr s); @@ -64,6 +76,14 @@ namespace CIAO ::DDS::TopicListener_ptr a_listener, ::DDS::StatusMask mask); + virtual ::DDS::Topic_ptr create_topic_with_profile ( + const char * impl_name, + const char * type_name, + const char* library_name, + const char *profile_name, + ::DDS::TopicListener_ptr a_listener, + ::DDS::StatusMask mask); + virtual ::DDS::ReturnCode_t delete_topic (::DDS::Topic_ptr a_topic); diff --git a/CIAO/connectors/dds4ccm/impl/ndds/DomainParticipantFactory.cpp b/CIAO/connectors/dds4ccm/impl/ndds/DomainParticipantFactory.cpp index 73a90e3e6c4..2b9721ed2e1 100644 --- a/CIAO/connectors/dds4ccm/impl/ndds/DomainParticipantFactory.cpp +++ b/CIAO/connectors/dds4ccm/impl/ndds/DomainParticipantFactory.cpp @@ -154,6 +154,16 @@ namespace CIAO throw CORBA::NO_IMPLEMENT (); } + + ::DDS::ReturnCode_t + RTI_DomainParticipantFactory_i::set_default_participant_qos_with_profile ( + const char* library_name, + const char *profile_name) + { + CIAO_TRACE ("RTI_DomainParticipantFactory_i::set_default_participant_qos_with_profile"); + + return DDSDomainParticipantFactory::get_instance ()->set_default_participant_qos_with_profile (library_name, profile_name); + } } } } diff --git a/CIAO/connectors/dds4ccm/impl/ndds/DomainParticipantFactory.h b/CIAO/connectors/dds4ccm/impl/ndds/DomainParticipantFactory.h index df7ab6008ad..064574b47b6 100644 --- a/CIAO/connectors/dds4ccm/impl/ndds/DomainParticipantFactory.h +++ b/CIAO/connectors/dds4ccm/impl/ndds/DomainParticipantFactory.h @@ -65,6 +65,11 @@ namespace CIAO virtual ::DDS::ReturnCode_t get_qos (::DDS::DomainParticipantFactoryQos & qos); + + virtual ::DDS::ReturnCode_t set_default_participant_qos_with_profile( + const char* library_name, + const char *profile_name); + }; } } diff --git a/CIAO/connectors/dds4ccm/impl/ndds/Publisher.cpp b/CIAO/connectors/dds4ccm/impl/ndds/Publisher.cpp index 68946c64109..70e5256074f 100644 --- a/CIAO/connectors/dds4ccm/impl/ndds/Publisher.cpp +++ b/CIAO/connectors/dds4ccm/impl/ndds/Publisher.cpp @@ -73,6 +73,45 @@ namespace CIAO return retval._retn (); } + ::DDS::DataWriter_ptr + RTI_Publisher_i::create_datawriter_with_profile (::DDS::Topic_ptr a_topic, + const char* library_name, + const char *profile_name, + ::DDS::DataWriterListener_ptr a_listener, + ::DDS::StatusMask mask) + { + CIAO_TRACE ("RTI_Publisher_i::create_datawriter"); + + RTI_Topic_i * topic = dynamic_cast < RTI_Topic_i * > (a_topic); + + if (!topic) + { + CIAO_ERROR ((LM_ERROR, CLINFO "RTI_Publisher_i::create_datawriter_with_profile - " + "Error: Unable to cast provided topic to its servant.\n")); + throw CCM_DDS::InternalError (::DDS::RETCODE_BAD_PARAMETER, 0); + } + + DDSTopic *rti_topic = topic->get_topic (); + DDSDataWriterListener *rti_drl = new RTI_DataWriterListener_i (a_listener); + DDSDataWriter *rti_dw = this->impl_->create_datawriter_with_profile (rti_topic, + library_name, + profile_name, + rti_drl, + mask); + + if (!rti_dw) + { + CIAO_ERROR ((LM_ERROR, CLINFO "RTI_Publisher_i::create_datawriter_with_profile - " + "Error: RTI Topic returned a nil datawriter.\n")); + throw CCM_DDS::InternalError (::DDS::RETCODE_ERROR, 0); + } + + rti_dw->enable (); + ::DDS::DataWriter_var retval = new RTI_DataWriter_i (rti_dw); + + return retval._retn (); + } + ::DDS::ReturnCode_t RTI_Publisher_i::delete_datawriter (::DDS::DataWriter_ptr a_datawriter) { diff --git a/CIAO/connectors/dds4ccm/impl/ndds/Publisher.h b/CIAO/connectors/dds4ccm/impl/ndds/Publisher.h index f1c4e3584a1..cfa5cba0efe 100644 --- a/CIAO/connectors/dds4ccm/impl/ndds/Publisher.h +++ b/CIAO/connectors/dds4ccm/impl/ndds/Publisher.h @@ -44,6 +44,13 @@ namespace CIAO ::DDS::StatusMask mask); virtual + ::DDS::DataWriter_ptr create_datawriter_with_profile (::DDS::Topic_ptr a_topic, + const char* library_name, + const char *profile_name, + ::DDS::DataWriterListener_ptr a_listener, + ::DDS::StatusMask mask); + + virtual ::DDS::ReturnCode_t delete_datawriter (::DDS::DataWriter_ptr a_datawriter); virtual diff --git a/CIAO/connectors/dds4ccm/impl/ndds/Subscriber.cpp b/CIAO/connectors/dds4ccm/impl/ndds/Subscriber.cpp index f86ae581bce..e14ac8a7fb2 100644 --- a/CIAO/connectors/dds4ccm/impl/ndds/Subscriber.cpp +++ b/CIAO/connectors/dds4ccm/impl/ndds/Subscriber.cpp @@ -97,6 +97,43 @@ namespace CIAO return retval._retn (); } + ::DDS::DataReader_ptr + RTI_Subscriber_i::create_datareader_with_profile ( + ::DDS::TopicDescription_ptr a_topic, + const char* library_name, + const char *profile_name, + ::DDS::DataReaderListener_ptr a_listener, + ::DDS::StatusMask mask) + { + RTI_Topic_i * topic = dynamic_cast < RTI_Topic_i * > (a_topic); + if (!topic) + { + CIAO_ERROR ((LM_ERROR, CLINFO "RTI_Subscriber_i::create_datareader_with_profile - " + "Error: Unable to cast provided topic to its servant.\n")); + throw CCM_DDS::InternalError (::DDS::RETCODE_BAD_PARAMETER, 0); + } + DDSTopic *rti_topic = topic->get_topic (); +// DDSDataReaderListener *rti_drl = drl->get_datareaderlistener (); +// todo leak + DDSDataReaderListener *rti_drl = new RTI_DataReaderListener_i (a_listener); + DDSDataReader *rti_dr = this->impl_->create_datareader_with_profile (rti_topic, + library_name, + profile_name, + rti_drl, + mask); + if (!rti_dr) + { + CIAO_ERROR ((LM_ERROR, CLINFO "RTI_Subscriber_i::create_datareader_with_profile - " + "Error: RTI Topic returned a nil datareader.\n")); + throw CCM_DDS::InternalError (::DDS::RETCODE_ERROR, 0); + } + + rti_dr->enable (); + ::DDS::DataReader_var retval = new RTI_DataReader_i (rti_dr); + + return retval._retn (); + } + ::DDS::ReturnCode_t RTI_Subscriber_i::delete_datareader ( ::DDS::DataReader_ptr a_datareader) diff --git a/CIAO/connectors/dds4ccm/impl/ndds/Subscriber.h b/CIAO/connectors/dds4ccm/impl/ndds/Subscriber.h index cf35349ed28..a239d0b5f91 100644 --- a/CIAO/connectors/dds4ccm/impl/ndds/Subscriber.h +++ b/CIAO/connectors/dds4ccm/impl/ndds/Subscriber.h @@ -57,6 +57,14 @@ namespace CIAO ::DDS::DataReaderListener_ptr a_listener, ::DDS::StatusMask mask); + virtual ::DDS::DataReader_ptr + create_datareader_with_profile ( + ::DDS::TopicDescription_ptr a_topic, + const char* library_name, + const char *profile_name, + ::DDS::DataReaderListener_ptr a_listener, + ::DDS::StatusMask mask); + virtual ::DDS::ReturnCode_t delete_datareader ( ::DDS::DataReader_ptr a_datareader); |