summaryrefslogtreecommitdiff
path: root/trunk/TAO/orbsvcs/tests/Event/Mcast/Common/EC_Wrapper.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'trunk/TAO/orbsvcs/tests/Event/Mcast/Common/EC_Wrapper.cpp')
-rw-r--r--trunk/TAO/orbsvcs/tests/Event/Mcast/Common/EC_Wrapper.cpp163
1 files changed, 163 insertions, 0 deletions
diff --git a/trunk/TAO/orbsvcs/tests/Event/Mcast/Common/EC_Wrapper.cpp b/trunk/TAO/orbsvcs/tests/Event/Mcast/Common/EC_Wrapper.cpp
new file mode 100644
index 00000000000..fe118587fac
--- /dev/null
+++ b/trunk/TAO/orbsvcs/tests/Event/Mcast/Common/EC_Wrapper.cpp
@@ -0,0 +1,163 @@
+// $Id$
+
+#include "EC_Wrapper.h"
+#include "orbsvcs/Event/EC_Event_Channel.h"
+#include "ace/Auto_Ptr.h"
+
+EC_Wrapper::EC_Wrapper (void)
+ : ec_impl_ (0),
+ orb_ ()
+{
+}
+
+TAO_EC_Servant_Var<EC_Wrapper>
+EC_Wrapper::create (void)
+{
+ TAO_EC_Servant_Var<EC_Wrapper> w;
+ ACE_NEW_RETURN (w,
+ EC_Wrapper,
+ w);
+ return w;
+}
+
+EC_Wrapper::~EC_Wrapper (void)
+{
+ ACE_TRY_NEW_ENV
+ {
+ this->destroy_ec (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+ }
+ ACE_CATCHANY
+ {
+ // ignore
+ }
+ ACE_ENDTRY;
+}
+
+int
+EC_Wrapper::init (CORBA::ORB_ptr orb,
+ PortableServer::POA_ptr poa)
+{
+ if (CORBA::is_nil (orb)
+ || this->ec_impl_)
+ {
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "EC_Wrapper::init invoked improperly\n"),
+ -1);
+ }
+
+ this->orb_ = CORBA::ORB::_duplicate (orb);
+
+ TAO_EC_Event_Channel_Attributes attr (poa, poa);
+
+ // Allow reconnections - used by some tests.
+ attr.consumer_reconnect = 1;
+
+ TAO_EC_Event_Channel * impl = 0;
+ ACE_NEW_RETURN (impl,
+ TAO_EC_Event_Channel (attr),
+ -1);
+ auto_ptr<TAO_EC_Event_Channel> impl_release (impl);
+
+ ACE_TRY_NEW_ENV
+ {
+ impl->activate (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+ }
+ ACE_CATCHANY
+ {
+ ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION,
+ "Suppressed the following exception "
+ "in EC_Wrapper::init:\n");
+ return -1;
+ }
+ ACE_ENDTRY;
+
+ this->ec_impl_ = impl_release.release ();
+ return 0;
+}
+
+RtecEventChannelAdmin::ConsumerAdmin_ptr
+EC_Wrapper::for_consumers (ACE_ENV_SINGLE_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+{
+ if (this->ec_impl_)
+ return this->ec_impl_->for_consumers (ACE_ENV_SINGLE_ARG_PARAMETER);
+ else
+ ACE_THROW_RETURN (CORBA::OBJECT_NOT_EXIST (), RtecEventChannelAdmin::ConsumerAdmin::_nil());
+}
+
+RtecEventChannelAdmin::SupplierAdmin_ptr
+EC_Wrapper::for_suppliers (ACE_ENV_SINGLE_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+{
+ if (this->ec_impl_)
+ return this->ec_impl_->for_suppliers (ACE_ENV_SINGLE_ARG_PARAMETER);
+ else
+ ACE_THROW_RETURN (CORBA::OBJECT_NOT_EXIST (), RtecEventChannelAdmin::SupplierAdmin::_nil());
+}
+
+void
+EC_Wrapper::destroy_ec (ACE_ENV_SINGLE_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+{
+ auto_ptr<TAO_EC_Event_Channel> ec_impl_aptr (this->ec_impl_);
+ this->ec_impl_ = 0;
+
+ if (ec_impl_aptr.get ())
+ {
+ ec_impl_aptr->destroy (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK;
+ }
+}
+
+void
+EC_Wrapper::destroy (ACE_ENV_SINGLE_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+{
+ // Deregister from POA.
+ this->deactivator_.deactivate ();
+
+ ACE_TRY
+ {
+ this->destroy_ec (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+ }
+ ACE_CATCHANY
+ {
+ this->orb_->shutdown ();
+ ACE_RE_THROW;
+ }
+ ACE_ENDTRY;
+ ACE_CHECK;
+
+ this->orb_->shutdown ();
+}
+
+RtecEventChannelAdmin::Observer_Handle
+EC_Wrapper::append_observer (RtecEventChannelAdmin::Observer_ptr observer
+ ACE_ENV_ARG_DECL)
+ ACE_THROW_SPEC ((
+ CORBA::SystemException,
+ RtecEventChannelAdmin::EventChannel::SYNCHRONIZATION_ERROR,
+ RtecEventChannelAdmin::EventChannel::CANT_APPEND_OBSERVER))
+{
+ if (this->ec_impl_)
+ return this->ec_impl_->append_observer (observer ACE_ENV_ARG_PARAMETER);
+ else
+ ACE_THROW_RETURN (CORBA::OBJECT_NOT_EXIST (), 0);
+}
+
+void
+EC_Wrapper::remove_observer (RtecEventChannelAdmin::Observer_Handle handle
+ ACE_ENV_ARG_DECL)
+ ACE_THROW_SPEC ((
+ CORBA::SystemException,
+ RtecEventChannelAdmin::EventChannel::SYNCHRONIZATION_ERROR,
+ RtecEventChannelAdmin::EventChannel::CANT_REMOVE_OBSERVER))
+{
+ if (this->ec_impl_)
+ this->ec_impl_->remove_observer (handle ACE_ENV_ARG_PARAMETER);
+ else
+ ACE_THROW (CORBA::OBJECT_NOT_EXIST ());
+}