summaryrefslogtreecommitdiff
path: root/TAO/orbsvcs/orbsvcs/CosEvent/CEC_ProxyPullConsumer.h
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/orbsvcs/orbsvcs/CosEvent/CEC_ProxyPullConsumer.h')
-rw-r--r--TAO/orbsvcs/orbsvcs/CosEvent/CEC_ProxyPullConsumer.h158
1 files changed, 158 insertions, 0 deletions
diff --git a/TAO/orbsvcs/orbsvcs/CosEvent/CEC_ProxyPullConsumer.h b/TAO/orbsvcs/orbsvcs/CosEvent/CEC_ProxyPullConsumer.h
new file mode 100644
index 00000000000..033e4e5476f
--- /dev/null
+++ b/TAO/orbsvcs/orbsvcs/CosEvent/CEC_ProxyPullConsumer.h
@@ -0,0 +1,158 @@
+// -*- C++ -*-
+
+//=============================================================================
+/**
+ * @file CEC_ProxyPullConsumer.h
+ *
+ * $Id$
+ *
+ * @author Carlos O'Ryan (coryan@cs.wustl.edu)
+ */
+//=============================================================================
+
+#ifndef TAO_CEC_PROXYPULLCONSUMER_H
+#define TAO_CEC_PROXYPULLCONSUMER_H
+
+#include /**/ "ace/pre.h"
+
+#include "orbsvcs/CosEventChannelAdminS.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+# pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+#include "orbsvcs/ESF/ESF_Worker.h"
+#include "orbsvcs/CosEvent/event_serv_export.h"
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+class TAO_CEC_EventChannel;
+class TAO_CEC_Dispatching;
+class TAO_CEC_ProxyPullSupplier;
+
+/**
+ * @class TAO_CEC_ProxyPullConsumer
+ *
+ * @brief ProxyPullConsumer
+ *
+ * Implement the CosEventChannelAdmin::ProxyPullConsumer interface,
+ * remember that this class is used to communicate with a
+ * PullSupplier, so, in effect, this is the ambassador for a
+ * supplier inside the event channel.
+ * = MEMORY MANAGMENT
+ * The object commits suicide when disconnect_pull_consumer() is
+ * called.
+ */
+class TAO_Event_Serv_Export TAO_CEC_ProxyPullConsumer : public POA_CosEventChannelAdmin::ProxyPullConsumer
+{
+public:
+ typedef CosEventChannelAdmin::ProxyPullConsumer_ptr _ptr_type;
+ typedef CosEventChannelAdmin::ProxyPullConsumer_var _var_type;
+
+ /// constructor...
+ TAO_CEC_ProxyPullConsumer (TAO_CEC_EventChannel* event_channel,
+ const ACE_Time_Value &timeout);
+
+ /// destructor...
+ virtual ~TAO_CEC_ProxyPullConsumer (void);
+
+ /// Activate in the POA
+ virtual void activate (
+ CosEventChannelAdmin::ProxyPullConsumer_ptr &activated_proxy
+ ACE_ENV_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ /// Deactivate from the POA
+ virtual void deactivate (ACE_ENV_SINGLE_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ /// Return 0 if no supplier is connected...
+ CORBA::Boolean is_connected (void) const;
+
+ /// Return the consumer object reference. It returns nil() if it has
+ /// not connected yet.
+ CosEventComm::PullSupplier_ptr supplier (void) const;
+
+ /// Pulls from the supplier, verifies that it is connected.
+ CORBA::Any* try_pull_from_supplier (CORBA::Boolean_out has_event
+ ACE_ENV_ARG_DECL);
+ CORBA::Any* pull_from_supplier (ACE_ENV_SINGLE_ARG_DECL);
+
+ /**
+ * Invoke the _non_existent() pseudo-operation on the supplier. If
+ * it is disconnected then it returns true and sets the
+ * <disconnected> flag.
+ */
+ CORBA::Boolean supplier_non_existent (CORBA::Boolean_out disconnected
+ ACE_ENV_ARG_DECL);
+
+ /// The event channel is shutting down
+ virtual void shutdown (ACE_ENV_SINGLE_ARG_DECL_NOT_USED);
+
+ /// Increment and decrement the reference count.
+ CORBA::ULong _incr_refcnt (void);
+ CORBA::ULong _decr_refcnt (void);
+
+ // = The CosEventChannelAdmin::ProxyPullConsumer methods...
+ virtual void connect_pull_supplier (
+ CosEventComm::PullSupplier_ptr pull_supplier
+ ACE_ENV_ARG_DECL_NOT_USED)
+ ACE_THROW_SPEC ((CORBA::SystemException,
+ CosEventChannelAdmin::AlreadyConnected));
+ virtual void disconnect_pull_consumer (ACE_ENV_SINGLE_ARG_DECL_NOT_USED)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ // = The Servant methods
+ virtual PortableServer::POA_ptr _default_POA (ACE_ENV_SINGLE_ARG_DECL);
+ virtual void _add_ref (ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS);
+ virtual void _remove_ref (ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS);
+
+protected:
+ /// Set the supplier, used by some implementations to change the
+ /// policies used when invoking operations on the supplier.
+ void supplier (CosEventComm::PullSupplier_ptr supplier);
+ void supplier_i (CosEventComm::PullSupplier_ptr supplier);
+
+ /// The private version (without locking) of is_connected().
+ CORBA::Boolean is_connected_i (void) const;
+
+ /// Release the supplier
+ void cleanup_i (void);
+
+ /// Assigns the parameter to both supplier_ and nopolicy_supplier_, and
+ /// applies policies (when appropriate) to supplier_.
+ CosEventComm::PullSupplier_ptr apply_policy
+ (CosEventComm::PullSupplier_ptr s);
+
+private:
+ /// The supplier admin, used for activation and memory managment.
+ TAO_CEC_EventChannel* event_channel_;
+
+ ACE_Time_Value timeout_;
+
+ /// The locking strategy.
+ ACE_Lock* lock_;
+
+ /// The reference count.
+ CORBA::ULong refcount_;
+
+ /// The supplier -- use apply_policy() instead of assigning directly to
+ /// supplier_. This will keep supplier_ and nopolicy_supplier_ in sync.
+ CosEventComm::PullSupplier_var supplier_;
+
+ /// The supplier without any policies applied
+ CosEventComm::PullSupplier_var nopolicy_supplier_;
+
+ /// Store the default POA.
+ PortableServer::POA_var default_POA_;
+};
+
+TAO_END_VERSIONED_NAMESPACE_DECL
+
+#if defined (__ACE_INLINE__)
+#include "orbsvcs/CosEvent/CEC_ProxyPullConsumer.inl"
+#endif /* __ACE_INLINE__ */
+
+#include /**/ "ace/post.h"
+
+#endif /* TAO_CEC_PROXYPULLCONSUMER_H */