summaryrefslogtreecommitdiff
path: root/TAO/orbsvcs/examples/CosEC/RtEC_Based/lib/EventChannel_i.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/orbsvcs/examples/CosEC/RtEC_Based/lib/EventChannel_i.cpp')
-rw-r--r--TAO/orbsvcs/examples/CosEC/RtEC_Based/lib/EventChannel_i.cpp124
1 files changed, 124 insertions, 0 deletions
diff --git a/TAO/orbsvcs/examples/CosEC/RtEC_Based/lib/EventChannel_i.cpp b/TAO/orbsvcs/examples/CosEC/RtEC_Based/lib/EventChannel_i.cpp
new file mode 100644
index 00000000000..e5dd9fb0348
--- /dev/null
+++ b/TAO/orbsvcs/examples/CosEC/RtEC_Based/lib/EventChannel_i.cpp
@@ -0,0 +1,124 @@
+// $Id$
+#include "EventChannel_i.h"
+#include "ace/Auto_Ptr.h"
+
+TAO_CosEC_EventChannel_i::TAO_CosEC_EventChannel_i (void)
+ : consumer_admin_ (0),
+ supplier_admin_ (0),
+ consumeradmin_ (CosEventChannelAdmin::ConsumerAdmin::_nil ()),
+ supplieradmin_ (CosEventChannelAdmin::SupplierAdmin::_nil ())
+{
+ // No-Op.
+}
+
+TAO_CosEC_EventChannel_i::~TAO_CosEC_EventChannel_i (void)
+{
+ //No-Op.
+}
+
+int
+TAO_CosEC_EventChannel_i::init (const RtecEventChannelAdmin::ConsumerQOS &consumerqos,
+ const RtecEventChannelAdmin::SupplierQOS &supplierqos,
+ RtecEventChannelAdmin::EventChannel_ptr rtec
+ ACE_ENV_ARG_DECL)
+{
+ // Allocate the admins..
+ TAO_CosEC_ConsumerAdmin_i *consumer_;
+ ACE_NEW_RETURN (consumer_,
+ TAO_CosEC_ConsumerAdmin_i (),
+ -1);
+
+ auto_ptr <TAO_CosEC_ConsumerAdmin_i> auto_consumer_ (consumer_);
+
+ TAO_CosEC_SupplierAdmin_i *supplier_;
+ ACE_NEW_RETURN (supplier_,
+ TAO_CosEC_SupplierAdmin_i (),
+ -1);
+
+ auto_ptr <TAO_CosEC_SupplierAdmin_i> auto_supplier_ (supplier_);
+
+ RtecEventChannelAdmin::ConsumerAdmin_ptr rtec_consumeradmin =
+ rtec->for_consumers (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ if (auto_consumer_.get ()->init (consumerqos,
+ rtec_consumeradmin) == -1)
+ return -1;
+
+ this->consumeradmin_ =
+ auto_consumer_.get ()->_this (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ // give the ownership to the POA.
+ auto_consumer_.get ()->_remove_ref (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ RtecEventChannelAdmin::SupplierAdmin_ptr rtec_supplieradmin =
+ rtec->for_suppliers (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ if (auto_supplier_.get ()->init (supplierqos,
+ rtec_supplieradmin) == -1)
+ return -1;
+
+ this->supplieradmin_ =
+ auto_supplier_.get ()->_this (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ // give the ownership to the POA.
+ auto_supplier_.get ()->_remove_ref (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ this->consumer_admin_ = auto_consumer_.release ();
+ this->supplier_admin_ = auto_supplier_.release ();
+
+ return 0;
+}
+
+CosEventChannelAdmin::ConsumerAdmin_ptr
+TAO_CosEC_EventChannel_i::for_consumers (ACE_ENV_SINGLE_ARG_DECL_NOT_USED)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+{
+ // @@ Pradeep: you must make a copy here, because the caller is
+ // responsible of removing this object.
+ return
+ CosEventChannelAdmin::ConsumerAdmin::_duplicate (this->consumeradmin_.in());
+}
+
+CosEventChannelAdmin::SupplierAdmin_ptr
+TAO_CosEC_EventChannel_i::for_suppliers (ACE_ENV_SINGLE_ARG_DECL_NOT_USED)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+{
+ // @@ Pradeep: you must make a copy here, because the caller is
+ // responsible of removing this object, same here..
+ return
+ CosEventChannelAdmin::SupplierAdmin::_duplicate (this->supplieradmin_.in ());
+}
+
+void
+TAO_CosEC_EventChannel_i::destroy (ACE_ENV_SINGLE_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+{
+ // Deactivate the CosEventChannel
+ PortableServer::POA_var poa =
+ this->_default_POA (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK;
+
+ PortableServer::ObjectId_var id = poa->servant_to_id (this
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
+
+ poa->deactivate_object (id.in ()
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
+
+ this->supplieradmin_ = CosEventChannelAdmin::SupplierAdmin::_nil ();
+ this->consumeradmin_ = CosEventChannelAdmin::ConsumerAdmin::_nil ();
+}
+
+void
+TAO_CosEC_EventChannel_i::shutdown (ACE_ENV_SINGLE_ARG_DECL)
+{
+ this->destroy (ACE_ENV_SINGLE_ARG_PARAMETER);
+}
+