summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohnny Willemsen <jwillemsen@remedy.nl>2009-12-01 10:59:36 +0000
committerJohnny Willemsen <jwillemsen@remedy.nl>2009-12-01 10:59:36 +0000
commit094c67d5596335d8e0cddce3dd78e2e26fc98bfe (patch)
treea28b397f53f6ddb8c97d3508a8867aef277fb271
parent7e0446be02689f1bbec8ad79aa1185bc67bcc92a (diff)
downloadATCD-094c67d5596335d8e0cddce3dd78e2e26fc98bfe.tar.gz
Tue Dec 01 10:59:37 UTC 2009 Johnny Willemsen <jwillemsen@remedy.nl>
* connectors/dds4ccm/impl/ndds/DataReaderHandler_T.cpp * connectors/dds4ccm/impl/ndds/DataReaderListener_T.cpp * connectors/dds4ccm/impl/ndds/DataReaderListener_T.h * connectors/dds4ccm/impl/ndds/DataReaderStateListener_T.cpp * connectors/dds4ccm/impl/ndds/DataReaderStateListener_T.h * connectors/dds4ccm/impl/ndds/DDS_Event_Connector_T.cpp * connectors/dds4ccm/impl/ndds/DDS_State_Connector_T.cpp * connectors/dds4ccm/impl/ndds/DDS_State_Connector_T.h StateListener
-rw-r--r--CIAO/ChangeLog12
-rw-r--r--CIAO/connectors/dds4ccm/impl/ndds/DDS_Event_Connector_T.cpp1
-rw-r--r--CIAO/connectors/dds4ccm/impl/ndds/DDS_State_Connector_T.cpp50
-rw-r--r--CIAO/connectors/dds4ccm/impl/ndds/DDS_State_Connector_T.h4
-rw-r--r--CIAO/connectors/dds4ccm/impl/ndds/DataReaderHandler_T.cpp4
-rw-r--r--CIAO/connectors/dds4ccm/impl/ndds/DataReaderListener_T.cpp7
-rw-r--r--CIAO/connectors/dds4ccm/impl/ndds/DataReaderListener_T.h6
-rw-r--r--CIAO/connectors/dds4ccm/impl/ndds/DataReaderStateListener_T.cpp164
-rw-r--r--CIAO/connectors/dds4ccm/impl/ndds/DataReaderStateListener_T.h60
9 files changed, 281 insertions, 27 deletions
diff --git a/CIAO/ChangeLog b/CIAO/ChangeLog
index 9441ad5b177..1974b5e88b2 100644
--- a/CIAO/ChangeLog
+++ b/CIAO/ChangeLog
@@ -1,3 +1,15 @@
+Tue Dec 01 10:59:37 UTC 2009 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * connectors/dds4ccm/impl/ndds/DataReaderHandler_T.cpp
+ * connectors/dds4ccm/impl/ndds/DataReaderListener_T.cpp
+ * connectors/dds4ccm/impl/ndds/DataReaderListener_T.h
+ * connectors/dds4ccm/impl/ndds/DataReaderStateListener_T.cpp
+ * connectors/dds4ccm/impl/ndds/DataReaderStateListener_T.h
+ * connectors/dds4ccm/impl/ndds/DDS_Event_Connector_T.cpp
+ * connectors/dds4ccm/impl/ndds/DDS_State_Connector_T.cpp
+ * connectors/dds4ccm/impl/ndds/DDS_State_Connector_T.h
+ StateListener
+
Tue Dec 01 09:42:37 UTC 2009 Johnny Willemsen <jwillemsen@remedy.nl>
* connectors/dds4ccm/impl/ndds/DataReaderHandler_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 011ca5c71ae..bf79bbb94ee 100644
--- a/CIAO/connectors/dds4ccm/impl/ndds/DDS_Event_Connector_T.cpp
+++ b/CIAO/connectors/dds4ccm/impl/ndds/DDS_Event_Connector_T.cpp
@@ -136,6 +136,7 @@ DDS_Event_Connector_T<DDS_TYPE, CCM_TYPE>::configure_port_dds_listen (void)
this->__listen_datareaderlistener = new ::CIAO::DDS4CCM::RTI::DataReaderListener_T
<DDS_TYPE, CCM_TYPE> (
this->context_,
+ this->context_->get_connection_error_listener (),
this->context_->get_connection_push_consumer_data_listener (),
this->context_->get_connection_pull_consumer_status (),
this->listen_datalistener_mode_,
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 86cfaca2845..e3fdee9f903 100644
--- a/CIAO/connectors/dds4ccm/impl/ndds/DDS_State_Connector_T.cpp
+++ b/CIAO/connectors/dds4ccm/impl/ndds/DDS_State_Connector_T.cpp
@@ -1,10 +1,12 @@
// -*- C++ -*-
// $Id$
-#include "dds4ccm/impl/ndds/DataReaderListener_T.h"
+#include "dds4ccm/impl/ndds/DataReaderStateListener_T.h"
#include "dds4ccm/impl/ndds/DataWriterListener_T.h"
#include "dds4ccm/impl/ndds/Updater_T.h"
#include "dds4ccm/impl/ndds/Reader_T.h"
+#include "dds4ccm/impl/ndds/PublisherListener_T.h"
+#include "dds4ccm/impl/ndds/SubscriberListener_T.h"
#include "dds4ccm/impl/ndds/DataListenerControl.h"
#include "ciao/Logger/Log_Macros.h"
@@ -122,8 +124,8 @@ void
DDS_State_Connector_T<DDS_TYPE, CCM_TYPE>::configuration_complete (void)
{
DDS_Base_Connector_T<DDS_TYPE, CCM_TYPE>::configuration_complete ();
-// this->configure_port_dds_listen ();
-// this->configure_port_dds_write ();
+ this->configure_port_dds_update ();
+ this->configure_port_dds_listen ();
}
template <typename DDS_TYPE, typename CCM_TYPE>
@@ -155,27 +157,33 @@ DDS_State_Connector_T<DDS_TYPE, CCM_TYPE>::configure_port_dds_update (void)
{
if (CORBA::is_nil (this->supplier_publisher_.in ()))
{
+ this->publisher_listener_ = new ::CIAO::DDS4CCM::RTI::PublisherListener_T
+ <DDS_TYPE, CCM_TYPE> (
+ this->context_->get_connection_error_listener ());
+
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);
+ this->publisher_listener_.in (),
+ DDS_STATUS_MASK_NONE);
}
else
{
::DDS::PublisherQos pqos;
- this->supplier_publisher_ = this->domain_participant_->create_publisher (pqos,
- 0,
- 0);
+ this->supplier_publisher_ =
+ this->domain_participant_->create_publisher (
+ pqos,
+ this->publisher_listener_.in (),
+ DDS_STATUS_MASK_NONE);
}
}
if (CORBA::is_nil (this->observable_data_.in ()))
{
- this->supplier_listener_ = new ::CIAO::DDS4CCM::DataWriterListener_T
+ this->datawriter_listener_ = new ::CIAO::DDS4CCM::DataWriterListener_T
<DDS_TYPE, CCM_TYPE> (
this->context_,
this->listen_datalistener_mode_,
@@ -188,7 +196,7 @@ DDS_State_Connector_T<DDS_TYPE, CCM_TYPE>::configure_port_dds_update (void)
this->topic_.in (),
this->library_name_,
this->profile_name_,
- this->supplier_listener_.in (),
+ this->datawriter_listener_.in (),
DDS_OFFERED_DEADLINE_MISSED_STATUS | DDS_OFFERED_INCOMPATIBLE_QOS_STATUS | DDS_LIVELINESS_LOST_STATUS | DDS_PUBLICATION_MATCHED_STATUS);
this->observable_data_ = ::DDS::CCM_DataWriter::_narrow (dwv_tmp);
}
@@ -199,7 +207,7 @@ DDS_State_Connector_T<DDS_TYPE, CCM_TYPE>::configure_port_dds_update (void)
create_datawriter (
this->topic_.in (),
dwqos,
- this->supplier_listener_.in (),
+ this->datawriter_listener_.in (),
DDS_OFFERED_DEADLINE_MISSED_STATUS | DDS_OFFERED_INCOMPATIBLE_QOS_STATUS | DDS_LIVELINESS_LOST_STATUS | DDS_PUBLICATION_MATCHED_STATUS);
this->observable_data_ = ::DDS::CCM_DataWriter::_narrow (dwv_tmp);
}
@@ -222,31 +230,37 @@ DDS_State_Connector_T<DDS_TYPE, CCM_TYPE>::configure_port_dds_listen (void)
{
if (CORBA::is_nil (this->listen_subscriber_.in ()))
{
+ this->subscriber_listener_ = new ::CIAO::DDS4CCM::RTI::SubscriberListener_T
+ <DDS_TYPE, CCM_TYPE> (
+ this->context_->get_connection_error_listener ());
+
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);
+ this->subscriber_listener_.in (),
+ DDS_STATUS_MASK_NONE);
}
else
{
::DDS::SubscriberQos sqos;
this->listen_subscriber_ = this->domain_participant_->
- create_subscriber (sqos,
- 0,
- 0);
+ create_subscriber (
+ sqos,
+ this->subscriber_listener_.in (),
+ DDS_STATUS_MASK_NONE);
}
}
if (CORBA::is_nil (this->__listen_datareaderlistener.in ()))
{
- this->__listen_datareaderlistener = new ::CIAO::DDS4CCM::RTI::DataReaderListener_T
+ this->__listen_datareaderlistener = new ::CIAO::DDS4CCM::RTI::DataReaderStateListener_T
<DDS_TYPE, CCM_TYPE> (
this->context_,
- this->context_->get_connection_push_observer_data_listener (),
+ this->context_->get_connection_error_listener (),
+ this->context_->get_connection_push_state_observer_data_listener (),
this->context_->get_connection_pull_observer_status (),
this->listen_datalistener_mode_,
this->listen_datalistener_max_delivered_data_);
diff --git a/CIAO/connectors/dds4ccm/impl/ndds/DDS_State_Connector_T.h b/CIAO/connectors/dds4ccm/impl/ndds/DDS_State_Connector_T.h
index 639dfe9fb7f..76a847d424f 100644
--- a/CIAO/connectors/dds4ccm/impl/ndds/DDS_State_Connector_T.h
+++ b/CIAO/connectors/dds4ccm/impl/ndds/DDS_State_Connector_T.h
@@ -67,7 +67,7 @@ private:
void configure_port_dds_update (void);
::DDS::Publisher_var supplier_publisher_;
::DDS::CCM_DataWriter_var observable_data_;
- ::DDS::DataWriterListener_var supplier_listener_;
+ ::DDS::DataWriterListener_var datawriter_listener_;
// @from DDS_Listen
void configure_port_dds_listen (void);
@@ -76,6 +76,8 @@ private:
::DDS::Subscriber_var listen_subscriber_;
::DDS::DataReader_var push_consumer_data_;
::DDS::DataReaderListener_var __listen_datareaderlistener;
+ ::DDS::SubscriberListener_var subscriber_listener_;
+ ::DDS::PublisherListener_var publisher_listener_;
// @from DDS_Getter
::DDS::DataReader_var pull_consumer_fresh_data_;
diff --git a/CIAO/connectors/dds4ccm/impl/ndds/DataReaderHandler_T.cpp b/CIAO/connectors/dds4ccm/impl/ndds/DataReaderHandler_T.cpp
index ac65898a3ae..65d31b0cd60 100644
--- a/CIAO/connectors/dds4ccm/impl/ndds/DataReaderHandler_T.cpp
+++ b/CIAO/connectors/dds4ccm/impl/ndds/DataReaderHandler_T.cpp
@@ -10,8 +10,8 @@ template <typename DDS_TYPE, typename CCM_TYPE>
CIAO::DDS4CCM::RTI::DataReaderHandler_T<DDS_TYPE, CCM_TYPE>::DataReaderHandler_T (
typename CCM_TYPE::listener_type::_ptr_type listener,
typename DDS_TYPE::data_reader * reader)
- : listener_ (CCM_TYPE::listener_type::_duplicate (listener)),
- reader_ (reader)
+ : reader_ (reader),
+ listener_ (CCM_TYPE::listener_type::_duplicate (listener)),
{
}
diff --git a/CIAO/connectors/dds4ccm/impl/ndds/DataReaderListener_T.cpp b/CIAO/connectors/dds4ccm/impl/ndds/DataReaderListener_T.cpp
index 177a8c0347d..2a21423048f 100644
--- a/CIAO/connectors/dds4ccm/impl/ndds/DataReaderListener_T.cpp
+++ b/CIAO/connectors/dds4ccm/impl/ndds/DataReaderListener_T.cpp
@@ -10,11 +10,13 @@
template <typename DDS_TYPE, typename CCM_TYPE>
CIAO::DDS4CCM::RTI::DataReaderListener_T<DDS_TYPE, CCM_TYPE>::DataReaderListener_T (
typename CCM_TYPE::context_type::_ptr_type context,
+ CCM_DDS::ConnectorStatusListener_ptr error_listener,
typename CCM_TYPE::listener_type::_ptr_type listener,
::CCM_DDS::PortStatusListener_ptr port_status_listener,
ACE_Atomic_Op <TAO_SYNCH_MUTEX, ::CCM_DDS::ListenerMode> &mode,
ACE_Atomic_Op <TAO_SYNCH_MUTEX, ::CCM_DDS::DataNumber_t> &max_delivered_data)
: context_ (CCM_TYPE::context_type::_duplicate (context)),
+ error_listener_ (::CCM_DDS::ConnectorStatusListener::_duplicate (error_listener)),
listener_ (CCM_TYPE::listener_type::_duplicate (listener)),
mode_ (mode),
max_delivered_data_ (max_delivered_data)
@@ -22,7 +24,6 @@ CIAO::DDS4CCM::RTI::DataReaderListener_T<DDS_TYPE, CCM_TYPE>::DataReaderListener
CIAO_TRACE ("CIAO::DDS4CCM::RTI::DataReaderListener_T::DataReaderListener_T");
this->info_out_portstatus_ =
::CCM_DDS::PortStatusListener::_duplicate (port_status_listener);
- this->info_out_connector_status_ = this->context_->get_connection_error_listener ();
}
// Implementation skeleton destructor
@@ -112,9 +113,9 @@ CIAO::DDS4CCM::RTI::DataReaderListener_T<DDS_TYPE, CCM_TYPE>::on_requested_incom
{
try
{
- if (!CORBA::is_nil (this->info_out_connector_status_))
+ if (!CORBA::is_nil (this->error_listener_))
{
- this->info_out_connector_status_->on_requested_incompatible_qos (the_reader, status);
+ this->error_listener_->on_requested_incompatible_qos (the_reader, status);
}
}
catch (...)
diff --git a/CIAO/connectors/dds4ccm/impl/ndds/DataReaderListener_T.h b/CIAO/connectors/dds4ccm/impl/ndds/DataReaderListener_T.h
index 05b3f81529b..657ba30d50e 100644
--- a/CIAO/connectors/dds4ccm/impl/ndds/DataReaderListener_T.h
+++ b/CIAO/connectors/dds4ccm/impl/ndds/DataReaderListener_T.h
@@ -25,8 +25,9 @@ namespace CIAO
/// Constructor
DataReaderListener_T (
typename CCM_TYPE::context_type::_ptr_type context,
+ ::CCM_DDS::ConnectorStatusListener_ptr error_listener,
typename CCM_TYPE::listener_type::_ptr_type listener,
- CCM_DDS::PortStatusListener_ptr port_status_listener,
+ ::CCM_DDS::PortStatusListener_ptr port_status_listener,
ACE_Atomic_Op <TAO_SYNCH_MUTEX, ::CCM_DDS::ListenerMode> &mode,
ACE_Atomic_Op <TAO_SYNCH_MUTEX, ::CCM_DDS::DataNumber_t> &max_delivered_data);
@@ -46,8 +47,7 @@ namespace CIAO
private:
typename CCM_TYPE::context_type::_var_type context_;
-
- ::CCM_DDS::ConnectorStatusListener_var info_out_connector_status_;
+ ::CCM_DDS::ConnectorStatusListener_var error_listener_;
::CCM_DDS::PortStatusListener_var info_out_portstatus_;
typename CCM_TYPE::listener_type::_var_type listener_;
ACE_Atomic_Op <TAO_SYNCH_MUTEX, ::CCM_DDS::ListenerMode> &mode_;
diff --git a/CIAO/connectors/dds4ccm/impl/ndds/DataReaderStateListener_T.cpp b/CIAO/connectors/dds4ccm/impl/ndds/DataReaderStateListener_T.cpp
new file mode 100644
index 00000000000..986a38d0ad9
--- /dev/null
+++ b/CIAO/connectors/dds4ccm/impl/ndds/DataReaderStateListener_T.cpp
@@ -0,0 +1,164 @@
+// $Id$
+#include "dds4ccm/impl/ndds/Utils.h"
+
+#include "dds4ccm/impl/ndds/DataReader.h"
+#include "ciao/Logger/Log_Macros.h"
+#include "dds4ccm/impl/ndds/DataReaderHandler_T.h"
+#include "tao/ORB_Core.h"
+
+// Implementation skeleton constructor
+template <typename DDS_TYPE, typename CCM_TYPE>
+CIAO::DDS4CCM::RTI::DataReaderStateListener_T<DDS_TYPE, CCM_TYPE>::DataReaderStateListener_T (
+ typename CCM_TYPE::context_type::_ptr_type context,
+ CCM_DDS::ConnectorStatusListener_ptr error_listener,
+ typename CCM_TYPE::statelistener_type::_ptr_type listener,
+ ::CCM_DDS::PortStatusListener_ptr port_status_listener,
+ ACE_Atomic_Op <TAO_SYNCH_MUTEX, ::CCM_DDS::ListenerMode> &mode,
+ ACE_Atomic_Op <TAO_SYNCH_MUTEX, ::CCM_DDS::DataNumber_t> &max_delivered_data)
+ : context_ (CCM_TYPE::context_type::_duplicate (context)),
+ error_listener_ (::CCM_DDS::ConnectorStatusListener::_duplicate (error_listener)),
+ listener_ (CCM_TYPE::statelistener_type::_duplicate (listener)),
+ mode_ (mode),
+ max_delivered_data_ (max_delivered_data)
+{
+ CIAO_TRACE ("CIAO::DDS4CCM::RTI::DataReaderStateListener_T::DataReaderStateListener_T");
+ this->info_out_portstatus_ =
+ ::CCM_DDS::PortStatusListener::_duplicate (port_status_listener);
+}
+
+// Implementation skeleton destructor
+template <typename DDS_TYPE, typename CCM_TYPE>
+CIAO::DDS4CCM::RTI::DataReaderStateListener_T<DDS_TYPE, CCM_TYPE>::~DataReaderStateListener_T (void)
+{
+ CIAO_TRACE ("CIAO::DDS4CCM::RTI::DataReaderStateListener_T::~DataReaderStateListener_T");
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+void
+CIAO::DDS4CCM::RTI::DataReaderStateListener_T<DDS_TYPE, CCM_TYPE>::on_data_available(::DDS::DataReader *rdr)
+{
+ CIAO_TRACE ("CIAO::DDS4CCM::RTI::DataReaderStateListener_T::on_data_available");
+
+ if (this->mode_.value () == ::CCM_DDS::NOT_ENABLED)
+ return;
+
+ ::CIAO::DDS4CCM::RTI::RTI_DataReader_i* rd =
+ dynamic_cast < ::CIAO::DDS4CCM::RTI::RTI_DataReader_i*>(rdr);
+ if (!rd)
+ {
+ /* In this specific case, this will never fail */
+ ACE_ERROR ((LM_ERROR, ACE_TEXT ("DataReaderStateListener_T::dynamic_cast failed.\n")));
+ return;
+ }
+
+ typename DDS_TYPE::data_reader * reader =
+ dynamic_cast< typename DDS_TYPE::data_reader * > ((rd->get_datareader ()));
+
+ if (!reader)
+ {
+ /* In this specific case, this will never fail */
+ ACE_ERROR ((LM_ERROR, ACE_TEXT ("DataReaderStateListener_T::narrow failed.\n")));
+ return;
+ }
+
+ try
+ {
+ // Loop until there are messages available in the queue
+ for(;;)
+ {
+ typename DDS_TYPE::value_type instance;
+ ::DDS_SampleInfo sampleinfo;
+ ::DDS::ReturnCode_t const result = reader->take_next_sample(instance,
+ sampleinfo);
+ if (result == DDS_RETCODE_NO_DATA)
+ break;
+ else if (result != DDS_RETCODE_OK)
+ {
+ CIAO_ERROR ((LM_ERROR, ACE_TEXT ("Unable to take data from data reader, error %d.\n"), result));
+ }
+ if (sampleinfo.instance_state == ::DDS_NOT_ALIVE_DISPOSED_INSTANCE_STATE)
+ {
+ ::CCM_DDS::ReadInfo empty;
+ empty <<= sampleinfo;
+ listener_->on_deletion (instance, empty);
+ }
+ else if (sampleinfo.view_state == ::DDS_NEW_VIEW_STATE)
+ {
+ ::CCM_DDS::ReadInfo empty;
+ empty <<= sampleinfo;
+ listener_->on_creation (instance, empty);
+ }
+ else if (sampleinfo.valid_data)
+ {
+ CIAO_DEBUG ((LM_DEBUG, ACE_TEXT ("DataReaderHandler_T : found valid data\n")));
+ ::CCM_DDS::ReadInfo empty;
+ empty <<= sampleinfo;
+ listener_->on_one_update (instance, empty);
+ }
+ }
+ }
+ catch (...)
+ {
+ }
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+void
+CIAO::DDS4CCM::RTI::DataReaderStateListener_T<DDS_TYPE, CCM_TYPE>::on_requested_deadline_missed (
+ ::DDS::DataReader_ptr the_reader,
+ const ::DDS::RequestedDeadlineMissedStatus & status)
+{
+ try
+ {
+ if (!CORBA::is_nil (this->info_out_portstatus_))
+ {
+ this->info_out_portstatus_->on_requested_deadline_missed (the_reader, status);
+ }
+ }
+ catch (...)
+ {
+ CIAO_DEBUG ((LM_DEBUG, ACE_TEXT ("DataReaderStateListener_T::on_requested_deadline_missed: ")
+ ACE_TEXT ("DDS Exception caught\n")));
+ }
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+void
+CIAO::DDS4CCM::RTI::DataReaderStateListener_T<DDS_TYPE, CCM_TYPE>::on_sample_lost (
+ ::DDS::DataReader_ptr the_reader,
+ const ::DDS::SampleLostStatus & status)
+{
+ try
+ {
+ if (!CORBA::is_nil (this->info_out_portstatus_))
+ {
+ this->info_out_portstatus_->on_sample_lost (the_reader, status);
+ }
+ }
+ catch (...)
+ {
+ CIAO_DEBUG ((LM_DEBUG, ACE_TEXT ("DataReaderStateListener_T::on_sample_lost: ")
+ ACE_TEXT ("DDS Exception caught\n")));
+ }
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+void
+CIAO::DDS4CCM::RTI::DataReaderStateListener_T<DDS_TYPE, CCM_TYPE>::on_requested_incompatible_qos (
+ ::DDS::DataReader_ptr the_reader,
+ const ::DDS::RequestedIncompatibleQosStatus & status)
+{
+ try
+ {
+ if (!CORBA::is_nil (this->error_listener_))
+ {
+ this->error_listener_->on_requested_incompatible_qos (the_reader, status);
+ }
+ }
+ catch (...)
+ {
+ CIAO_DEBUG ((LM_DEBUG, ACE_TEXT ("DataReaderStateListener_T::on_requested_incompatible_qos: ")
+ ACE_TEXT ("DDS Exception caught\n")));
+ }
+}
+
diff --git a/CIAO/connectors/dds4ccm/impl/ndds/DataReaderStateListener_T.h b/CIAO/connectors/dds4ccm/impl/ndds/DataReaderStateListener_T.h
new file mode 100644
index 00000000000..a08ee2306fa
--- /dev/null
+++ b/CIAO/connectors/dds4ccm/impl/ndds/DataReaderStateListener_T.h
@@ -0,0 +1,60 @@
+/**
+ * @author William R. Otte <wotte@dre.vanderbilt.edu>
+ * @author Johnny Willemsen <jwillemsen@remedy.nl>
+ *
+ * $Id$
+ *
+ * Wrapper facade for NDDS.
+ */
+
+#include "dds4ccm/idl/dds_rtf2_dcpsC.h"
+#include "ace/Copy_Disabled.h"
+
+namespace CIAO
+{
+ namespace DDS4CCM
+ {
+ namespace RTI
+ {
+ template <typename DDS_TYPE, typename CCM_TYPE>
+ class DataReaderStateListener_T :
+ public ::DDS::DataReaderListener,
+ private ACE_Copy_Disabled
+ {
+ public:
+ /// Constructor
+ DataReaderStateListener_T (
+ typename CCM_TYPE::context_type::_ptr_type context,
+ ::CCM_DDS::ConnectorStatusListener_ptr error_listener,
+ typename CCM_TYPE::statelistener_type::_ptr_type listener,
+ ::CCM_DDS::PortStatusListener_ptr port_status_listener,
+ ACE_Atomic_Op <TAO_SYNCH_MUTEX, ::CCM_DDS::ListenerMode> &mode,
+ ACE_Atomic_Op <TAO_SYNCH_MUTEX, ::CCM_DDS::DataNumber_t> &max_delivered_data);
+
+ /// Destructor
+ virtual ~DataReaderStateListener_T (void);
+
+ virtual void on_data_available( ::DDS::DataReader *rdr);
+
+ virtual void on_requested_deadline_missed (::DDS::DataReader_ptr the_reader,
+ const ::DDS::RequestedDeadlineMissedStatus & status);
+
+ virtual void on_sample_lost (::DDS::DataReader_ptr the_reader,
+ const ::DDS::SampleLostStatus & status);
+
+ virtual void on_requested_incompatible_qos (::DDS::DataReader_ptr the_reader,
+ const ::DDS::RequestedIncompatibleQosStatus & status);
+
+ private:
+ typename CCM_TYPE::context_type::_var_type context_;
+ ::CCM_DDS::ConnectorStatusListener_var error_listener_;
+ ::CCM_DDS::PortStatusListener_var info_out_portstatus_;
+ typename CCM_TYPE::statelistener_type::_var_type listener_;
+ ACE_Atomic_Op <TAO_SYNCH_MUTEX, ::CCM_DDS::ListenerMode> &mode_;
+ ACE_Atomic_Op <TAO_SYNCH_MUTEX, ::CCM_DDS::DataNumber_t> &max_delivered_data_;
+ };
+ }
+ }
+}
+
+#include "dds4ccm/impl/ndds/DataReaderStateListener_T.cpp"