summaryrefslogtreecommitdiff
path: root/CIAO/connectors/dds4ccm/impl/DataReaderListener_T.h
diff options
context:
space:
mode:
authorJohnny Willemsen <jwillemsen@remedy.nl>2013-08-29 11:15:22 +0000
committerJohnny Willemsen <jwillemsen@remedy.nl>2013-08-29 11:15:22 +0000
commit6fe5790f97a39adbfd9768f53a949e495a78987a (patch)
tree22af43971e86d9c7a00cb14a96c48b8cdc2e49f5 /CIAO/connectors/dds4ccm/impl/DataReaderListener_T.h
parent9b4dfe46b8b375a19e26085f02a98602b88ca8aa (diff)
downloadATCD-6fe5790f97a39adbfd9768f53a949e495a78987a.tar.gz
Thu Aug 29 11:11:22 UTC 2013 Johnny Willemsen <jwillemsen@remedy.nl>
* connectors/dds4ccm/impl/Coherent_Changes_Guard.h: * connectors/dds4ccm/impl/DDS_Event_Connector_T.h: * connectors/dds4ccm/impl/DDS_Listen_T.h: * connectors/dds4ccm/impl/DDS_Listen_T.cpp: * connectors/dds4ccm/impl/DDS_StateListen_T.h: * connectors/dds4ccm/impl/DDS_StateListen_T.cpp: * connectors/dds4ccm/impl/DDS_State_Connector_T.h: * connectors/dds4ccm/impl/DataReaderListener_T.h: * connectors/dds4ccm/impl/DataReaderListener_T.cpp: * connectors/dds4ccm/impl/DataReaderStateListener_T.h: * connectors/dds4ccm/impl/DataReaderStateListener_T.cpp: * connectors/dds4ccm/impl/Getter_T.h: * connectors/dds4ccm/impl/LocalObject.h: * connectors/dds4ccm/impl/Utils.h: Fixes for the DDS State connector. The semantics of this connector is that the state is kept in DDS, but the listeners where doing a take which removed the data from DDS. The basic and extended listener ports C++ templates are extended with a new template argument which is used to control the semantics of the listener, DDS4CCM_READ or DDS4CCM_TAKE. The State connector does use read, the Event connector does use take. This fixes bugzilla 4123 * connectors/dds4ccm/examples/Hello/Sender/Hello_Sender_exec.h: * connectors/dds4ccm/examples/Hello/Sender/Hello_Sender_exec.cpp: * connectors/dds4ccm/tests/KeyedSamples/Sender/Keyed_Test_Sender_exec.h: * connectors/dds4ccm/tests/KeyedSamples/Sender/Keyed_Test_Sender_exec.cpp: * connectors/dds4ccm/tests/ListenManyByMany/Receiver/LMBM_Test_Receiver_exec.h: * connectors/dds4ccm/tests/ListenManyByMany/Receiver/LMBM_Test_Receiver_exec.cpp: * connectors/dds4ccm/tests/ListenManyByMany/descriptors/Plan.cdp: * connectors/dds4ccm/tests/MultiTopic/Connector/MultiTopic_Connector_T.h: * connectors/dds4ccm/tests/MultipleTemp/Sender/MultipleTemp_Sender_exec.cpp: * connectors/dds4ccm/tests/SLDisabled/Sender/SL_Disabled_Sender_exec.cpp: * connectors/dds4ccm/tests/SLManyByMany/Receiver/SL_ManyByMany_Receiver_exec.h: * connectors/dds4ccm/tests/SLManyByMany/Receiver/SL_ManyByMany_Receiver_exec.cpp: * connectors/dds4ccm/tests/SLOneByOne/Receiver/SL_OneByOne_Receiver_exec.h: * connectors/dds4ccm/tests/SLOneByOne/Receiver/SL_OneByOne_Receiver_exec.cpp: * connectors/dds4ccm/tests/SLOneByOne/Sender/SL_OneByOne_Sender_exec.h: * connectors/dds4ccm/tests/SLOneByOne/Sender/SL_OneByOne_Sender_exec.cpp: * connectors/dds4ccm/tests/Updater/Sender/Updater_Sender_exec.cpp: Extended a few tests to check the state in DDS after they have received some samples through the listener. In previous versions this never returned data, with the updated DDS4CCM State connector semantics this now returns data
Diffstat (limited to 'CIAO/connectors/dds4ccm/impl/DataReaderListener_T.h')
-rw-r--r--CIAO/connectors/dds4ccm/impl/DataReaderListener_T.h73
1 files changed, 68 insertions, 5 deletions
diff --git a/CIAO/connectors/dds4ccm/impl/DataReaderListener_T.h b/CIAO/connectors/dds4ccm/impl/DataReaderListener_T.h
index b1914887483..cd87b3cb9ff 100644
--- a/CIAO/connectors/dds4ccm/impl/DataReaderListener_T.h
+++ b/CIAO/connectors/dds4ccm/impl/DataReaderListener_T.h
@@ -23,18 +23,21 @@ namespace CIAO
{
namespace DDS4CCM
{
- template <typename CCM_TYPE, typename TYPED_READER, typename SEQ_TYPE>
- class DataReaderListener_T :
+ template <typename CCM_TYPE, typename TYPED_DDS_READER, typename SEQ_TYPE, DDS4CCM_LISTENER_READ_TAKE LRT>
+ class DataReaderListener_T;
+
+ template <typename CCM_TYPE, typename TYPED_DDS_READER, typename SEQ_TYPE, DDS4CCM_LISTENER_READ_TAKE LRT>
+ class DataReaderListenerBase_T :
public PortStatusListener
{
- typedef DataReaderListener_T<CCM_TYPE, TYPED_READER, SEQ_TYPE>
+ typedef DataReaderListenerBase_T<CCM_TYPE, TYPED_DDS_READER, SEQ_TYPE, LRT>
DataReaderListener_type;
typedef ::CIAO::DDS4CCM::DataReaderHandler_T<DataReaderListener_type>
DataReaderHandler_type;
public:
/// Constructor
- DataReaderListener_T (
+ DataReaderListenerBase_T (
typename CCM_TYPE::data_listener_type::_ptr_type listener,
::CCM_DDS::PortStatusListener_ptr port_status_listener,
::CCM_DDS::DataListenerControl_ptr control,
@@ -42,7 +45,7 @@ namespace CIAO
ConditionManager& condition_manager);
/// Destructor
- virtual ~DataReaderListener_T (void);
+ virtual ~DataReaderListenerBase_T (void);
virtual void on_data_available (::DDS::DataReader_ptr rdr);
@@ -53,10 +56,70 @@ namespace CIAO
void on_data_available_i (::DDS::DataReader_ptr rdr);
private:
+ /// Helper method to get data from DDS
+ virtual ::DDS::ReturnCode_t get_data_i (
+ typename TYPED_DDS_READER::_ptr_type reader,
+ ::DDS::QueryCondition_ptr qc,
+ SEQ_TYPE &data,
+ ::DDS::SampleInfoSeq &sample_info,
+ ::CORBA::Long max_samples) = 0;
+
typename CCM_TYPE::data_listener_type::_var_type listener_;
::CCM_DDS::DataListenerControl_var control_;
ConditionManager& condition_manager_;
};
+
+ template <typename CCM_TYPE, typename TYPED_DDS_READER, typename SEQ_TYPE>
+ class DataReaderListener_T <CCM_TYPE, TYPED_DDS_READER, SEQ_TYPE, CIAO::DDS4CCM::DDS4CCM_TAKE> :
+ public DataReaderListenerBase_T <CCM_TYPE, TYPED_DDS_READER, SEQ_TYPE, CIAO::DDS4CCM::DDS4CCM_TAKE>
+ {
+ public:
+ /// Constructor
+ DataReaderListener_T (
+ typename CCM_TYPE::data_listener_type::_ptr_type listener,
+ ::CCM_DDS::PortStatusListener_ptr port_status_listener,
+ ::CCM_DDS::DataListenerControl_ptr control,
+ ACE_Reactor * reactor,
+ ConditionManager& condition_manager) :
+ DataReaderListenerBase_T<CCM_TYPE, TYPED_DDS_READER, SEQ_TYPE, CIAO::DDS4CCM::DDS4CCM_TAKE> (
+ listener, port_status_listener, control, reactor, condition_manager)
+ {
+ }
+ private:
+ /// Helper method to get data from DDS
+ virtual ::DDS::ReturnCode_t get_data_i (
+ typename TYPED_DDS_READER::_ptr_type reader,
+ ::DDS::QueryCondition_ptr qc,
+ SEQ_TYPE &data,
+ ::DDS::SampleInfoSeq &sample_info,
+ ::CORBA::Long max_samples);
+ };
+
+ template <typename CCM_TYPE, typename TYPED_DDS_READER, typename SEQ_TYPE>
+ class DataReaderListener_T <CCM_TYPE, TYPED_DDS_READER, SEQ_TYPE, CIAO::DDS4CCM::DDS4CCM_READ> :
+ public DataReaderListenerBase_T <CCM_TYPE, TYPED_DDS_READER, SEQ_TYPE, CIAO::DDS4CCM::DDS4CCM_READ>
+ {
+ public:
+ /// Constructor
+ DataReaderListener_T (
+ typename CCM_TYPE::data_listener_type::_ptr_type listener,
+ ::CCM_DDS::PortStatusListener_ptr port_status_listener,
+ ::CCM_DDS::DataListenerControl_ptr control,
+ ACE_Reactor * reactor,
+ ConditionManager& condition_manager) :
+ DataReaderListenerBase_T<CCM_TYPE, TYPED_DDS_READER, SEQ_TYPE, CIAO::DDS4CCM::DDS4CCM_READ> (
+ listener, port_status_listener, control, reactor, condition_manager)
+ {
+ }
+ private:
+ /// Helper method to get data from DDS
+ virtual ::DDS::ReturnCode_t get_data_i (
+ typename TYPED_DDS_READER::_ptr_type reader,
+ ::DDS::QueryCondition_ptr qc,
+ SEQ_TYPE &data,
+ ::DDS::SampleInfoSeq &sample_info,
+ ::CORBA::Long max_samples);
+ };
}
}