summaryrefslogtreecommitdiff
path: root/modules/CIAO/connectors/dds4ccm/impl/dds/DDS_Event_Connector_T.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'modules/CIAO/connectors/dds4ccm/impl/dds/DDS_Event_Connector_T.cpp')
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/DDS_Event_Connector_T.cpp261
1 files changed, 261 insertions, 0 deletions
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/DDS_Event_Connector_T.cpp b/modules/CIAO/connectors/dds4ccm/impl/dds/DDS_Event_Connector_T.cpp
new file mode 100644
index 00000000000..3c37ed761bb
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/DDS_Event_Connector_T.cpp
@@ -0,0 +1,261 @@
+// -*- C++ -*-
+// $Id$
+
+#include "dds4ccm/impl/dds/DataReaderListener_T.h"
+#include "dds4ccm/impl/dds/DataWriterListener_T.h"
+#include "dds4ccm/impl/dds/Writer_T.h"
+#include "dds4ccm/impl/dds/Getter_T.h"
+#include "dds4ccm/impl/dds/Reader_T.h"
+#include "dds4ccm/impl/dds/DataListenerControl_T.h"
+#include "dds4ccm/impl/dds/PortStatusListener_T.h"
+
+#include "dds4ccm/impl/logger/Log_Macros.h"
+#include "dds4ccm/impl/dds4ccm_conf.h"
+
+template <typename DDS_TYPE, typename CCM_TYPE, bool FIXED>
+DDS_Event_Connector_T<DDS_TYPE, CCM_TYPE, FIXED>::DDS_Event_Connector_T (void) :
+ TopicBaseConnector (),
+ supplier_obtained_ (false),
+ push_consumer_obtained_ (false),
+ pull_consumer_obtained_ (false)
+
+{
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE, bool FIXED>
+DDS_Event_Connector_T<DDS_TYPE, CCM_TYPE, FIXED>::~DDS_Event_Connector_T (void)
+{
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE, bool FIXED>
+typename CCM_TYPE::writer_type::_ptr_type
+DDS_Event_Connector_T<DDS_TYPE, CCM_TYPE, FIXED>::get_supplier_data (void)
+{
+ DDS4CCM_TRACE ("DDS_Event_Connector_T<DDS_TYPE, CCM_TYPE, FIXED>::get_supplier_data");
+
+ this->supplier_obtained_ = true;
+ return this->supplier_.get_data ();
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE, bool FIXED>
+::DDS::CCM_DataWriter_ptr
+DDS_Event_Connector_T<DDS_TYPE, CCM_TYPE, FIXED>::get_supplier_dds_entity (void)
+{
+ DDS4CCM_TRACE ("DDS_Event_Connector_T<DDS_TYPE, CCM_TYPE, FIXED>::get_supplier_dds_entity");
+
+ this->supplier_obtained_ = true;
+ return this->supplier_.get_dds_entity ();
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE, bool FIXED>
+typename CCM_TYPE::getter_type::_ptr_type
+DDS_Event_Connector_T<DDS_TYPE, CCM_TYPE, FIXED>::get_pull_consumer_fresh_data (void)
+{
+ DDS4CCM_TRACE ("DDS_Event_Connector_T<DDS_TYPE, CCM_TYPE, FIXED>::get_pull_consumer_fresh_data");
+
+ this->pull_consumer_obtained_ = true;
+ return this->pull_consumer_.get_fresh_data ();
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE, bool FIXED>
+typename CCM_TYPE::reader_type::_ptr_type
+DDS_Event_Connector_T<DDS_TYPE, CCM_TYPE, FIXED>::get_push_consumer_data (void)
+{
+ DDS4CCM_TRACE ("DDS_Event_Connector_T<DDS_TYPE, CCM_TYPE, FIXED>::get_push_consumer_data");
+
+ this->push_consumer_obtained_ = true;
+ return this->push_consumer_.get_data ();
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE, bool FIXED>
+typename CCM_TYPE::reader_type::_ptr_type
+DDS_Event_Connector_T<DDS_TYPE, CCM_TYPE, FIXED>::get_pull_consumer_data (void)
+{
+ DDS4CCM_TRACE ("DDS_Event_Connector_T<DDS_TYPE, CCM_TYPE, FIXED>::get_pull_consumer_data");
+
+ this->pull_consumer_obtained_ = true;
+ return this->pull_consumer_.get_data ();
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE, bool FIXED>
+::CCM_DDS::CCM_DataListenerControl_ptr
+DDS_Event_Connector_T<DDS_TYPE, CCM_TYPE, FIXED>::get_push_consumer_data_control (void)
+{
+ DDS4CCM_TRACE ("DDS_Event_Connector_T<DDS_TYPE, CCM_TYPE, FIXED>::get_push_consumer_data_control");
+
+ this->push_consumer_obtained_ = true;
+ return this->push_consumer_.get_data_control ();
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE, bool FIXED>
+::DDS::CCM_DataReader_ptr
+DDS_Event_Connector_T<DDS_TYPE, CCM_TYPE, FIXED>::get_pull_consumer_dds_entity (void)
+{
+ DDS4CCM_TRACE ("DDS_Event_Connector_T<DDS_TYPE, CCM_TYPE, FIXED>::get_pull_consumer_dds_entity");
+
+ this->pull_consumer_obtained_ = true;
+ return this->pull_consumer_.get_dds_entity ();
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE, bool FIXED>
+::DDS::CCM_DataReader_ptr
+DDS_Event_Connector_T<DDS_TYPE, CCM_TYPE, FIXED>::get_push_consumer_dds_entity (void)
+{
+ DDS4CCM_TRACE ("DDS_Event_Connector_T<DDS_TYPE, CCM_TYPE, FIXED>::get_push_consumer_dds_entity");
+
+ this->push_consumer_obtained_ = true;
+ return this->push_consumer_.get_dds_entity ();
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE, bool FIXED>
+void
+DDS_Event_Connector_T<DDS_TYPE, CCM_TYPE, FIXED>::configuration_complete (void)
+{
+ DDS4CCM_TRACE ("DDS_Event_Connector_T<DDS_TYPE, CCM_TYPE, FIXED>::configuration_complete");
+
+ TopicBaseConnector::configuration_complete ();
+
+ this->push_consumer_obtained_ |=
+ ! ::CORBA::is_nil (this->context_->get_connection_push_consumer_data_listener ());
+
+ ::CCM_DDS::PortStatusListener_var push_consumer_psl =
+ this->context_->get_connection_push_consumer_status ();
+ this->push_consumer_obtained_ |= ! ::CORBA::is_nil (push_consumer_psl.in ());
+
+ ::CCM_DDS::PortStatusListener_var pull_consumer_psl =
+ this->context_->get_connection_pull_consumer_status ();
+ this->pull_consumer_obtained_ |=
+ ! ::CORBA::is_nil (pull_consumer_psl.in ());
+
+ if (this->push_consumer_obtained_)
+ {
+ DDS4CCM_DEBUG (6, (LM_DEBUG, CLINFO
+ "DDS_Event_Connector_T<DDS_TYPE, CCM_TYPE, FIXED>::configuration_complete - "
+ "Creating push consumer port.\n"));
+ this->push_consumer_.configuration_complete (
+ this->topic_.in (),
+ this->subscriber_.in (),
+ this->library_name_,
+ this->profile_name_);
+ }
+ else
+ {
+ DDS4CCM_DEBUG (6, (LM_DEBUG, CLINFO
+ "DDS_Event_Connector_T<DDS_TYPE, CCM_TYPE, FIXED>::configuration_complete - "
+ "No need to create push consumer port.\n"));
+ }
+
+ if (this->supplier_obtained_)
+ {
+ DDS4CCM_DEBUG (6, (LM_DEBUG, CLINFO
+ "DDS_Event_Connector_T<DDS_TYPE, CCM_TYPE, FIXED>::configuration_complete - "
+ "Creating supplier port.\n"));
+ this->supplier_.configuration_complete(
+ this->topic_.in (),
+ this->publisher_.in (),
+ this->library_name_,
+ this->profile_name_);
+ }
+ else
+ {
+ DDS4CCM_DEBUG (6, (LM_DEBUG, CLINFO
+ "DDS_Event_Connector_T<DDS_TYPE, CCM_TYPE, FIXED>::configuration_complete - "
+ "No need to create supplier port.\n"));
+ }
+
+ if (this->pull_consumer_obtained_)
+ {
+ DDS4CCM_DEBUG (6, (LM_DEBUG, CLINFO
+ "DDS_Event_Connector_T<DDS_TYPE, CCM_TYPE, FIXED>::configuration_complete - "
+ "Creating pull consumer port.\n"));
+ this->pull_consumer_.configuration_complete (
+ this->topic_.in (),
+ this->subscriber_.in (),
+ this->library_name_,
+ this->profile_name_);
+ }
+ else
+ {
+ DDS4CCM_DEBUG (6, (LM_DEBUG, CLINFO
+ "DDS_Event_Connector_T<DDS_TYPE, CCM_TYPE, FIXED>::configuration_complete - "
+ "No need to create pull consumer port.\n"));
+ }
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE, bool FIXED>
+void
+DDS_Event_Connector_T<DDS_TYPE, CCM_TYPE, FIXED>::ccm_activate (void)
+{
+ DDS4CCM_TRACE ("DDS_Event_Connector_T<DDS_TYPE, CCM_TYPE, FIXED>::ccm_activate");
+ ACE_Reactor* reactor = 0;
+#if (CIAO_DDS4CCM_CONTEXT_SWITCH == 1)
+ reactor = this->context_->get_CCM_object()->_get_orb ()->orb_core ()->reactor ();
+#endif
+ TopicBaseConnector::ccm_activate (reactor);
+
+ if (this->push_consumer_obtained_)
+ {
+ this->push_consumer_.activate (
+ this->context_->get_connection_push_consumer_data_listener (),
+ this->context_->get_connection_push_consumer_status (),
+ reactor);
+ }
+
+ if (this->supplier_obtained_)
+ {
+ this->supplier_.activate ();
+ }
+
+ if (this->pull_consumer_obtained_)
+ {
+ this->pull_consumer_.activate (
+ this->context_->get_connection_pull_consumer_status (),
+ reactor);
+ }
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE, bool FIXED>
+void
+DDS_Event_Connector_T<DDS_TYPE, CCM_TYPE, FIXED>::ccm_passivate (void)
+{
+ DDS4CCM_TRACE ("DDS_Event_Connector_T<DDS_TYPE, CCM_TYPE, FIXED>::ccm_passivate");
+
+ if (this->push_consumer_obtained_)
+ {
+ this->push_consumer_.passivate ();
+ }
+
+ if (this->supplier_obtained_)
+ {
+ this->supplier_.passivate ();
+ }
+
+ if (this->pull_consumer_obtained_)
+ {
+ this->pull_consumer_.passivate ();
+ }
+ TopicBaseConnector::ccm_passivate ();
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE, bool FIXED>
+void
+DDS_Event_Connector_T<DDS_TYPE, CCM_TYPE, FIXED>::ccm_remove (void)
+{
+ DDS4CCM_TRACE ("DDS_Event_Connector_T<DDS_TYPE, CCM_TYPE, FIXED>::ccm_remove");
+
+ if (this->push_consumer_obtained_)
+ {
+ this->push_consumer_.remove (this->subscriber_.in ());
+ }
+
+ if (this->supplier_obtained_)
+ {
+ this->supplier_.remove (this->publisher_.in ());
+ }
+
+ if (this->pull_consumer_obtained_)
+ {
+ this->pull_consumer_.remove (this->subscriber_.in ());
+ }
+ TopicBaseConnector::ccm_remove ();
+}