summaryrefslogtreecommitdiff
path: root/TAO/orbsvcs/orbsvcs/Notify/Notify_EventChannel_i.h
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/orbsvcs/orbsvcs/Notify/Notify_EventChannel_i.h')
-rw-r--r--TAO/orbsvcs/orbsvcs/Notify/Notify_EventChannel_i.h318
1 files changed, 318 insertions, 0 deletions
diff --git a/TAO/orbsvcs/orbsvcs/Notify/Notify_EventChannel_i.h b/TAO/orbsvcs/orbsvcs/Notify/Notify_EventChannel_i.h
new file mode 100644
index 00000000000..74d7a6601d8
--- /dev/null
+++ b/TAO/orbsvcs/orbsvcs/Notify/Notify_EventChannel_i.h
@@ -0,0 +1,318 @@
+//=============================================================================
+/**
+ * @file Notify_EventChannel_i.h
+ *
+ * $Id$
+ *
+ * Implements the CosNotifyChannelAdmin::EventChannel interface.
+ *
+ *
+ * @author Pradeep Gore <pradeep@cs.wustl.edu>
+ */
+//=============================================================================
+
+
+#ifndef TAO_NOTIFY_EVENTCHANNEL_I_H_
+#define TAO_NOTIFY_EVENTCHANNEL_I_H_
+#include "ace/pre.h"
+#include "ace/Hash_Map_Manager.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+#pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+#include "orbsvcs/CosNotifyChannelAdminS.h"
+#include "Notify_ID_Pool_T.h"
+#include "Notify_QoSAdmin_i.h"
+#include "Notify_Collection.h"
+
+class TAO_Notify_EventChannelFactory_i;
+class TAO_Notify_Resource_Manager;
+class TAO_Notify_Event_Manager;
+class TAO_Notify_CO_Factory;
+class TAO_Notify_POA_Factory;
+class TAO_Notify_EMO_Factory;
+class TAO_Notify_EventListener;
+
+#if defined (_MSC_VER)
+#if (_MSC_VER >= 1200)
+#pragma warning (push)
+#endif /* _MSC_VER >= 1200 */
+#pragma warning (disable:4250)
+#endif /* _MSC_VER */
+
+ /**
+ * @class TAO_Notify_EventChannel_i
+ *
+ * @brief TAO_Notify_EventChannel_i
+ *
+ * This class handles all the object factory functionality.All the event
+ * routing is handled by its contained Event Manager class.
+ * = MISC. NOTES
+ * This class creates and owns 2 child POA's. one to contain CA's and the other for SA's.
+ * Now, a Channel object can be destoyed in 2 ways - as a side effect of its parent POA being
+ * destroyed or if this class's <destroy> method is invoked. If the object is being destroyed
+ * as a result of its Parent POA being destroyed, it is illegal to destroy a childPOA
+ * because, the root poa destruction will destroy all child poa's.
+ * So in the destructor we conditionally check if the child POAs should be destroyed explicitly
+ * or not.
+ */
+class TAO_Notify_Export TAO_Notify_EventChannel_i : public virtual POA_CosNotifyChannelAdmin::EventChannel, public PortableServer::RefCountServantBase
+{
+ public:
+ /// Constructor.
+ /// <channel_factory> is the parent.
+ TAO_Notify_EventChannel_i (TAO_Notify_EventChannelFactory_i* channel_factory);
+
+ /// Destructor
+ virtual ~TAO_Notify_EventChannel_i (void);
+
+ /**
+ * Initialize this object.
+ * checks if the <initial_qos> and <initial admin> are valid.
+ * creates default filter, consumer admin and supplier admin.
+ */
+ void init (CosNotifyChannelAdmin::ChannelID channel_id,
+ const CosNotification::QoSProperties& initial_qos,
+ const CosNotification::AdminProperties& initial_admin,
+ PortableServer::POA_ptr default_POA,
+ PortableServer::POA_ptr my_POA
+ ACE_ENV_ARG_DECL);
+
+ // = Accessors
+ /// Get the default POA.
+ PortableServer::POA_ptr get_default_POA (void);
+
+ /// Get the CORBA object for this servant
+ CosNotifyChannelAdmin::EventChannel_ptr get_ref (ACE_ENV_SINGLE_ARG_DECL);
+
+ /// Get the event manager.
+ TAO_Notify_Event_Manager* get_event_manager (void);
+
+ // = Child destroyed notification.
+ /// This id is no longer in use.It can be reused by <consumer_admin_ids_>.
+ void consumer_admin_destroyed (CosNotifyChannelAdmin::AdminID CA_ID);
+
+ /// This id is no longer in use.It can be reused by <supplier_admin_ids_>.
+ void supplier_admin_destroyed (CosNotifyChannelAdmin::AdminID SA_ID);
+
+ /// Consumer Admin's are Group Listeners that are registered automatically with the EC when a ConsumerAdmin
+ /// is created. When a consumer is destroyed, it asks the EC to unregister itself.
+ void unregister_listener (TAO_Notify_EventListener* group_listener ACE_ENV_ARG_DECL);
+
+ // = Interface methods
+ virtual CosNotifyChannelAdmin::EventChannelFactory_ptr MyFactory (
+ ACE_ENV_SINGLE_ARG_DECL
+ )
+ ACE_THROW_SPEC ((
+ CORBA::SystemException
+ ));
+
+virtual CosNotifyChannelAdmin::ConsumerAdmin_ptr default_consumer_admin (
+ ACE_ENV_SINGLE_ARG_DECL
+ )
+ ACE_THROW_SPEC ((
+ CORBA::SystemException
+ ));
+
+virtual CosNotifyChannelAdmin::SupplierAdmin_ptr default_supplier_admin (
+ ACE_ENV_SINGLE_ARG_DECL
+ )
+ ACE_THROW_SPEC ((
+ CORBA::SystemException
+ ));
+
+virtual CosNotifyFilter::FilterFactory_ptr default_filter_factory (
+ ACE_ENV_SINGLE_ARG_DECL
+ )
+ ACE_THROW_SPEC ((
+ CORBA::SystemException
+ ));
+
+virtual CosNotifyChannelAdmin::ConsumerAdmin_ptr new_for_consumers (
+ CosNotifyChannelAdmin::InterFilterGroupOperator op,
+ CosNotifyChannelAdmin::AdminID_out id
+ ACE_ENV_ARG_DECL
+ )
+ ACE_THROW_SPEC ((
+ CORBA::SystemException
+ ));
+
+virtual CosNotifyChannelAdmin::SupplierAdmin_ptr new_for_suppliers (
+ CosNotifyChannelAdmin::InterFilterGroupOperator op,
+ CosNotifyChannelAdmin::AdminID_out id
+ ACE_ENV_ARG_DECL
+ )
+ ACE_THROW_SPEC ((
+ CORBA::SystemException
+ ));
+
+virtual CosNotifyChannelAdmin::ConsumerAdmin_ptr get_consumeradmin (
+ CosNotifyChannelAdmin::AdminID id
+ ACE_ENV_ARG_DECL
+ )
+ ACE_THROW_SPEC ((
+ CORBA::SystemException,
+ CosNotifyChannelAdmin::AdminNotFound
+ ));
+
+virtual CosNotifyChannelAdmin::SupplierAdmin_ptr get_supplieradmin (
+ CosNotifyChannelAdmin::AdminID id
+ ACE_ENV_ARG_DECL
+ )
+ ACE_THROW_SPEC ((
+ CORBA::SystemException,
+ CosNotifyChannelAdmin::AdminNotFound
+ ));
+
+virtual CosNotifyChannelAdmin::AdminIDSeq * get_all_consumeradmins (
+ ACE_ENV_SINGLE_ARG_DECL
+ )
+ ACE_THROW_SPEC ((
+ CORBA::SystemException
+ ));
+
+virtual CosNotifyChannelAdmin::AdminIDSeq * get_all_supplieradmins (
+ ACE_ENV_SINGLE_ARG_DECL
+ )
+ ACE_THROW_SPEC ((
+ CORBA::SystemException
+ ));
+
+virtual CosNotification::QoSProperties * get_qos (
+ ACE_ENV_SINGLE_ARG_DECL
+ )
+ ACE_THROW_SPEC ((
+ CORBA::SystemException
+ ));
+
+ virtual void set_qos (
+ const CosNotification::QoSProperties & qos
+ ACE_ENV_ARG_DECL
+ )
+ ACE_THROW_SPEC ((
+ CORBA::SystemException,
+ CosNotification::UnsupportedQoS
+ ));
+
+ virtual void validate_qos (
+ const CosNotification::QoSProperties & required_qos,
+ CosNotification::NamedPropertyRangeSeq_out available_qos
+ ACE_ENV_ARG_DECL
+ )
+ ACE_THROW_SPEC ((
+ CORBA::SystemException,
+ CosNotification::UnsupportedQoS
+ ));
+
+ virtual CosNotification::AdminProperties * get_admin (
+ ACE_ENV_SINGLE_ARG_DECL
+ )
+ ACE_THROW_SPEC ((
+ CORBA::SystemException
+ ));
+
+ virtual void set_admin (
+ const CosNotification::AdminProperties & admin
+ ACE_ENV_ARG_DECL
+ )
+ ACE_THROW_SPEC ((
+ CORBA::SystemException,
+ CosNotification::UnsupportedAdmin
+ ));
+
+ virtual CosEventChannelAdmin::ConsumerAdmin_ptr for_consumers (
+ ACE_ENV_SINGLE_ARG_DECL
+ )
+ ACE_THROW_SPEC ((
+ CORBA::SystemException
+ ));
+
+ virtual CosEventChannelAdmin::SupplierAdmin_ptr for_suppliers (
+ ACE_ENV_SINGLE_ARG_DECL
+ )
+ ACE_THROW_SPEC ((
+ CORBA::SystemException
+ ));
+
+ virtual void destroy (
+ ACE_ENV_SINGLE_ARG_DECL
+ )
+ ACE_THROW_SPEC ((
+ CORBA::SystemException
+ ));
+
+ const TAO_Notify_QoSAdmin_i& qos_admin (void) const;
+
+protected:
+ // = Data Members
+ /// The locking strategy.
+ ACE_Lock* lock_;
+
+ /**
+ * Flag to tell our destructor if we should destroy the CA and SA POA's.
+ * default is false, the parent poa destruction will remove these.
+ * set to true if the <destroy> method is invoked.
+ */
+ CORBA::Boolean destory_child_POAs_;
+
+ /// The factory that created us.
+ TAO_Notify_EventChannelFactory_i* channel_factory_;
+
+ /// The default POA in which we activate objects that don't have ids' pre-assigned.
+ PortableServer::POA_var default_POA_;
+
+ /// The POA in which i live.
+ PortableServer::POA_var my_POA_;
+
+ /// The POA in which we should activate ConsumerAdmins in.
+ /// We create and own this.
+ PortableServer::POA_var CA_POA_;
+
+ /// The POA in which we should activate SupplierAdmins in.
+ /// We create and own this.
+ PortableServer::POA_var SA_POA_;
+
+ /// The ID assigned to this channel.
+ CosNotifyChannelAdmin::ChannelID channel_id_;
+
+ /// The factory for channel objects.
+ TAO_Notify_CO_Factory* channel_objects_factory_;
+
+ /// The factory for POA based containers.
+ TAO_Notify_POA_Factory* poa_factory_;
+
+ /// Event manager objects factory,
+ TAO_Notify_EMO_Factory* event_manager_objects_factory_;
+
+ /// Id generator for consumer admins.
+ TAO_Notify_ID_Pool_Ex<CosNotifyChannelAdmin::AdminID,
+ CosNotifyChannelAdmin::AdminIDSeq> consumer_admin_ids_;
+
+ /// Id generator for supplier admins.
+ TAO_Notify_ID_Pool_Ex<CosNotifyChannelAdmin::AdminID,
+ CosNotifyChannelAdmin::AdminIDSeq> supplier_admin_ids_;
+
+ /// Default InterFilterGroupOperator operator used when creating
+ /// the default ConsumerAdmin and SupplierAdmin.
+ const CosNotifyChannelAdmin::InterFilterGroupOperator default_op_;
+
+ /// Default id's to CosEventChannelAdmin::ConsumerAdmin, SupplierAdmin.
+ const CosNotifyChannelAdmin::AdminID default_id_;
+
+ /// Handle QoS admin methods.
+ TAO_Notify_QoSAdmin_i qos_admin_;
+
+ /// The event manager.
+ TAO_Notify_Event_Manager* event_manager_;
+
+ /// The list of group event listeners that have registered with us.
+ TAO_Notify_EventListener_List* event_listener_list_;
+};
+
+#if defined (_MSC_VER) && (_MSC_VER >= 1200)
+#pragma warning (pop)
+#endif /* _MSC_VER */
+
+#include "ace/post.h"
+#endif /* TAO_NOTIFY_EVENTCHANNEL_I_H_ */