diff options
Diffstat (limited to 'modules/CIAO/connectors/dds4ccm/impl/ndds/Subscriber.cpp')
-rw-r--r-- | modules/CIAO/connectors/dds4ccm/impl/ndds/Subscriber.cpp | 255 |
1 files changed, 255 insertions, 0 deletions
diff --git a/modules/CIAO/connectors/dds4ccm/impl/ndds/Subscriber.cpp b/modules/CIAO/connectors/dds4ccm/impl/ndds/Subscriber.cpp new file mode 100644 index 00000000000..91764d8856d --- /dev/null +++ b/modules/CIAO/connectors/dds4ccm/impl/ndds/Subscriber.cpp @@ -0,0 +1,255 @@ +// $Id$ + +#include "Subscriber.h" +#include "SubscriberListener.h" +#include "Topic.h" +#include "DataReader.h" +#include "DataReaderListener.h" +#include "Utils.h" +#include "StatusCondition.h" +#include "InstanceHandle_t.h" + +#include "dds4ccm/idl/dds4ccm_BaseC.h" + +#include "ciao/Logger/Log_Macros.h" + +namespace CIAO +{ + namespace DDS4CCM + { + namespace RTI + { + // Implementation skeleton constructor + RTI_Subscriber_i::RTI_Subscriber_i (DDSSubscriber *s) + : impl_ (s) + { + CIAO_TRACE ("RTI_Subscriber_i::RTI_Subscriber_i"); + } + + // Implementation skeleton destructor + RTI_Subscriber_i::~RTI_Subscriber_i (void) + { + CIAO_TRACE ("RTI_Subscriber_i::~RTI_Subscriber_i"); + } + + ::DDS::ReturnCode_t + RTI_Subscriber_i::enable (void) + { + return this->impl_->enable (); + } + + ::DDS::StatusCondition_ptr + RTI_Subscriber_i::get_statuscondition (void) + { + DDSStatusCondition* sc = this->impl_->get_statuscondition (); + ::DDS::StatusCondition_var retval = new RTI_StatusCondition_i (sc); + return retval._retn (); + } + + ::DDS::StatusMask + RTI_Subscriber_i::get_status_changes (void) + { + return this->impl_->get_status_changes (); + } + + ::DDS::InstanceHandle_t + RTI_Subscriber_i::get_instance_handle (void) + { + ::DDS_InstanceHandle_t const rtihandle = this->impl_->get_instance_handle (); + ::DDS::InstanceHandle_t handle; + handle <<= rtihandle; + return handle; + } + + ::DDS::DataReader_ptr + RTI_Subscriber_i::create_datareader ( + ::DDS::TopicDescription_ptr a_topic, + const ::DDS::DataReaderQos & /*qos*/, + ::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 - " + "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 (rti_topic, + DDS_DATAREADER_QOS_DEFAULT, + rti_drl, + mask); + if (!rti_dr) + { + CIAO_ERROR ((LM_ERROR, CLINFO "RTI_Subscriber_i::create_datareader - " + "Error: RTI Topic returned a nil datareader.\n")); + throw CCM_DDS::InternalError (::DDS::RETCODE_ERROR, 0); + } + + ::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) + { + RTI_DataReader_i *top = dynamic_cast< RTI_DataReader_i *> (a_datareader); + if (!top) + { + CIAO_ERROR ((LM_ERROR, CLINFO "RTI_Subscriber_i::delete_datareader - " + "Unable to cast provided object reference to servant.\n")); + return ::DDS::RETCODE_BAD_PARAMETER; + } + + CIAO_DEBUG ((LM_TRACE, CLINFO "RTI_Subscriber_i::delete_datareader - " + "Successfully casted provided object reference to servant.\n")); + + DDS_ReturnCode_t retval = this->impl_->delete_datareader (top->get_datareader ()); + + if (retval != DDS_RETCODE_OK) + { + CIAO_ERROR ((LM_ERROR, CLINFO "RTI_Subscriber_i::delete_datareader - " + "Error: Returned non-ok error code %c\n", + translate_retcode (retval))); + } + else CIAO_DEBUG ((LM_INFO, CLINFO "RTI_Subscriber_i::delete_datareader - " + "Successfully deleted\n")); + + return retval; + } + + ::DDS::ReturnCode_t + RTI_Subscriber_i::delete_contained_entities (void) + { + return this->impl_->delete_contained_entities (); + } + + ::DDS::DataReader_ptr + RTI_Subscriber_i::lookup_datareader ( + const char * impl_name) + { + DDSDataReader* dr = this->impl_->lookup_datareader (impl_name); + ::DDS::DataReader_var retval = new RTI_DataReader_i (dr); + return retval._retn (); + } + + ::DDS::ReturnCode_t + RTI_Subscriber_i::get_datareaders ( + ::DDS::DataReaderSeq & /*readers*/, + ::DDS::SampleStateMask /*sample_states*/, + ::DDS::ViewStateMask /*view_states*/, + ::DDS::InstanceStateMask /*instance_states*/) + { + throw CORBA::NO_IMPLEMENT (); + // Add your implementation here + } + + ::DDS::ReturnCode_t + RTI_Subscriber_i::notify_datareaders (void) + { + return this->impl_->notify_datareaders (); + } + + ::DDS::ReturnCode_t + RTI_Subscriber_i::set_qos ( + const ::DDS::SubscriberQos & /*qos*/) + { + DDS_SubscriberQos rti_impl_qos; +/* rti_impl_qos.presentation = qos.presentation; + rti_impl_qos.partition = qos.partition; + rti_impl_qos.group_data = qos.group_data; + rti_impl_qos.entity_factory = qos.entity_factory;*/ + return this->impl_->set_qos (rti_impl_qos); + } + + ::DDS::ReturnCode_t + RTI_Subscriber_i::get_qos ( + ::DDS::SubscriberQos & /*qos*/) + { + DDS_SubscriberQos rti_impl_qos; + DDS_ReturnCode_t const rti_retcode = this->impl_->get_qos (rti_impl_qos); + /*qos.presentation = rti_impl_qos.presentation; + qos.partition = rti_impl_qos.partition; + qos.group_data = rti_impl_qos.group_data; + qos.entity_factory = rti_impl_qos.entity_factory;*/ + return rti_retcode; + } + + ::DDS::ReturnCode_t + RTI_Subscriber_i::set_listener ( + ::DDS::SubscriberListener_ptr a_listener, + ::DDS::StatusMask mask) + { + RTI_SubscriberListener_i* rti_impl_list = new RTI_SubscriberListener_i (a_listener); + return this->impl_->set_listener (rti_impl_list, mask); + } + + ::DDS::SubscriberListener_ptr + RTI_Subscriber_i::get_listener (void) + { +// DDSSubscriberListener* rti_impl_list = this->impl_->get_listener (); +// ::DDS::SubscriberListener_var retval = new RTI_SubscriberListener_i (rti_impl_list); +// return retval._retn (); + throw CORBA::NO_IMPLEMENT (); + } + + ::DDS::ReturnCode_t + RTI_Subscriber_i::begin_access (void) + { + return this->impl_->begin_access (); + } + + ::DDS::ReturnCode_t + RTI_Subscriber_i::end_access (void) + { + return this->impl_->end_access (); + } + + ::DDS::DomainParticipant_ptr + RTI_Subscriber_i::get_participant (void) + { + DDSDomainParticipant* p = this->impl_->get_participant (); + ::DDS::DomainParticipant_var retval = new RTI_DomainParticipant_i (p); + return retval._retn (); + } + + ::DDS::ReturnCode_t + RTI_Subscriber_i::set_default_datareader_qos ( + const ::DDS::DataReaderQos & /*qos*/) + { + throw CORBA::NO_IMPLEMENT (); + // Add your implementation here + } + + ::DDS::ReturnCode_t + RTI_Subscriber_i::get_default_datareader_qos ( + ::DDS::DataReaderQos & /*qos*/) + { + throw CORBA::NO_IMPLEMENT (); + // Add your implementation here + } + + ::DDS::ReturnCode_t + RTI_Subscriber_i::copy_from_topic_qos ( + ::DDS::DataReaderQos & /*a_datareader_qos*/, + const ::DDS::TopicQos & /*a_impl_qos*/) + { + throw CORBA::NO_IMPLEMENT (); + // Add your implementation here + } + + DDSSubscriber * + RTI_Subscriber_i::get_subscriber (void) + { + return this->impl_; + } + } + } +} + |