diff options
author | Johnny Willemsen <jwillemsen@remedy.nl> | 2013-08-29 11:15:22 +0000 |
---|---|---|
committer | Johnny Willemsen <jwillemsen@remedy.nl> | 2013-08-29 11:15:22 +0000 |
commit | 6fe5790f97a39adbfd9768f53a949e495a78987a (patch) | |
tree | 22af43971e86d9c7a00cb14a96c48b8cdc2e49f5 /CIAO/connectors/dds4ccm/impl/DataReaderListener_T.h | |
parent | 9b4dfe46b8b375a19e26085f02a98602b88ca8aa (diff) | |
download | ATCD-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.h | 73 |
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); + }; } } |