EventChannel.h

Go to the documentation of this file.
00001 /* -*- C++ -*- */
00002 /**
00003  *  @file EventChannel.h
00004  *
00005  *  $Id: EventChannel.h 81422 2008-04-24 12:33:29Z johnnyw $
00006  *
00007  *  @author Pradeep Gore <pradeep@oomworks.com>
00008  *
00009  *
00010  */
00011 
00012 #ifndef TAO_Notify_EVENTCHANNEL_H
00013 #define TAO_Notify_EVENTCHANNEL_H
00014 
00015 #include /**/ "ace/pre.h"
00016 
00017 #include "orbsvcs/Notify/notify_serv_export.h"
00018 
00019 #if !defined (ACE_LACKS_PRAGMA_ONCE)
00020 # pragma once
00021 #endif /* ACE_LACKS_PRAGMA_ONCE */
00022 
00023 #include "orbsvcs/CosNotifyChannelAdminS.h"
00024 #include "orbsvcs/Notify/Topology_Object.h"
00025 #include "orbsvcs/Notify/Object.h"
00026 #include "orbsvcs/Notify/EventChannelFactory.h"
00027 
00028 TAO_BEGIN_VERSIONED_NAMESPACE_DECL
00029 
00030 class TAO_Notify_ConsumerAdmin;
00031 class TAO_Notify_SupplierAdmin;
00032 class TAO_Notify_EventChannelFactory;
00033 class TAO_Notify_ProxyConsumer;
00034 class TAO_Notify_ProxySupplier;
00035 template <class TYPE> class TAO_Notify_Container_T;
00036 
00037 #if defined(_MSC_VER)
00038 #pragma warning(push)
00039 #pragma warning(disable:4250)
00040 #endif /* _MSC_VER */
00041 
00042 /**
00043  * @class TAO_Notify_EventChannel
00044  *
00045  * @brief Implementation of CosNotifyChannelAdmin::EventChannel
00046  *
00047  */
00048 class TAO_Notify_Serv_Export TAO_Notify_EventChannel
00049   : public virtual POA_CosNotifyChannelAdmin::EventChannel,
00050     public TAO_Notify::Topology_Parent
00051 {
00052   friend class TAO_Notify_Builder;
00053 
00054 public:
00055   typedef TAO_Notify_Refcountable_Guard_T< TAO_Notify_EventChannel > Ptr;
00056   typedef CosNotifyChannelAdmin::ChannelIDSeq SEQ;
00057   typedef CosNotifyChannelAdmin::ChannelIDSeq_var SEQ_VAR;
00058 
00059   /// Constructor
00060   TAO_Notify_EventChannel (void);
00061 
00062   /// Destructor
00063   virtual ~TAO_Notify_EventChannel ();
00064 
00065   /// Init
00066   void init (TAO_Notify_EventChannelFactory* ecf
00067              , const CosNotification::QoSProperties & initial_qos
00068              , const CosNotification::AdminProperties & initial_admin);
00069 
00070   /// Init (for reload)
00071   void init (TAO_Notify::Topology_Parent * parent);
00072 
00073   /// Remove ConsumerAdmin from its container.
00074   void remove (TAO_Notify_ConsumerAdmin* consumer_admin);
00075 
00076   /// Remove SupplierAdmin from its container.
00077   void remove (TAO_Notify_SupplierAdmin* supplier_admin);
00078 
00079   /// ServantBase refcount methods.
00080   virtual void _add_ref (void);
00081   virtual void _remove_ref (void);
00082 
00083   // TAO_Notify::Topology_Parent
00084 
00085   virtual void save_persistent (TAO_Notify::Topology_Saver& saver);
00086   virtual TAO_Notify::Topology_Object* load_child (const ACE_CString &type,
00087                                                    CORBA::Long id,
00088                                                    const TAO_Notify::NVPList& attrs);
00089   virtual void reconnect (void);
00090 
00091   virtual TAO_Notify_Object::ID get_id () const {return id();}
00092 
00093   TAO_Notify_ProxyConsumer * find_proxy_consumer (TAO_Notify::IdVec & id_path, size_t position);
00094   TAO_Notify_ProxySupplier * find_proxy_supplier (TAO_Notify::IdVec & id_path, size_t position);
00095 
00096   // cleanup any proxy resources held by the EC
00097   virtual void cleanup_proxy (CosNotifyChannelAdmin::ProxyID id,
00098                               bool is_supplier);
00099 
00100   /// Shutdown
00101   virtual int shutdown (void);
00102   virtual void load_attrs(const TAO_Notify::NVPList& attrs);
00103 
00104   /// TAO_Notify_Container_T requires a destroy method
00105   virtual void destroy (void);
00106 
00107   /// This is public to allow TAO_MonitorConsumerAdmin access.
00108   virtual CosNotifyChannelAdmin::ConsumerAdmin_ptr
00109     get_consumeradmin (CosNotifyChannelAdmin::AdminID id);
00110 
00111   /// This is public to allow TAO_MonitorSupplierAdmin access.
00112   virtual CosNotifyChannelAdmin::SupplierAdmin_ptr
00113     get_supplieradmin (CosNotifyChannelAdmin::AdminID id);
00114 
00115 private:
00116   typedef TAO_Notify_Container_T <TAO_Notify_ConsumerAdmin> TAO_Notify_ConsumerAdmin_Container;
00117   typedef TAO_Notify_Container_T <TAO_Notify_SupplierAdmin> TAO_Notify_SupplierAdmin_Container;
00118 
00119   virtual void save_attrs(TAO_Notify::NVPList& attrs);
00120 
00121   /// = Data Members
00122   /// The parent object.
00123   TAO_Notify_EventChannelFactory::Ptr ecf_;
00124 
00125   TAO_SYNCH_MUTEX default_admin_mutex_;
00126 
00127   /// Default Consumer Admin
00128   CosNotifyChannelAdmin::ConsumerAdmin_var default_consumer_admin_;
00129 
00130   /// Default Supplier Admin
00131   CosNotifyChannelAdmin::SupplierAdmin_var default_supplier_admin_;
00132 
00133 protected:
00134   /// =CosNotifyChannelAdmin::EventChannel methods
00135 
00136   virtual ::CosNotifyChannelAdmin::EventChannelFactory_ptr MyFactory ();
00137 
00138   virtual ::CosNotifyChannelAdmin::ConsumerAdmin_ptr default_consumer_admin (void);
00139 
00140   virtual ::CosNotifyChannelAdmin::SupplierAdmin_ptr default_supplier_admin (void);
00141 
00142   virtual ::CosNotifyFilter::FilterFactory_ptr default_filter_factory (void);
00143 
00144   virtual ::CosNotifyChannelAdmin::ConsumerAdmin_ptr new_for_consumers (CosNotifyChannelAdmin::InterFilterGroupOperator op,
00145                                                                         CosNotifyChannelAdmin::AdminID_out id);
00146 
00147   virtual ::CosNotifyChannelAdmin::SupplierAdmin_ptr new_for_suppliers (CosNotifyChannelAdmin::InterFilterGroupOperator op,
00148                                                                         CosNotifyChannelAdmin::AdminID_out id);
00149 
00150   virtual ::CosNotifyChannelAdmin::AdminIDSeq * get_all_consumeradmins (void);
00151 
00152   virtual ::CosNotifyChannelAdmin::AdminIDSeq * get_all_supplieradmins (void);
00153 
00154   virtual ::CosNotification::QoSProperties * get_qos (void);
00155 
00156   virtual void set_qos (const CosNotification::QoSProperties & qos);
00157 
00158   virtual void validate_qos (const CosNotification::QoSProperties & required_qos,
00159                              CosNotification::NamedPropertyRangeSeq_out available_qos);
00160 
00161   virtual ::CosNotification::AdminProperties * get_admin (void);
00162 
00163   virtual void set_admin (const CosNotification::AdminProperties & admin);
00164 
00165   virtual ::CosEventChannelAdmin::ConsumerAdmin_ptr for_consumers (void);
00166 
00167   virtual ::CosEventChannelAdmin::SupplierAdmin_ptr for_suppliers (void);
00168 
00169 private:
00170   TAO_Notify_ConsumerAdmin_Container& ca_container();
00171   TAO_Notify_SupplierAdmin_Container& sa_container();
00172 
00173   /// ConsumerAdmin Container.
00174   ACE_Auto_Ptr< TAO_Notify_ConsumerAdmin_Container > ca_container_;
00175 
00176   /// SupplierAdmin Container.
00177   ACE_Auto_Ptr< TAO_Notify_SupplierAdmin_Container > sa_container_;
00178 
00179   /// The default filter factory.
00180   CosNotifyFilter::FilterFactory_var default_filter_factory_;
00181 
00182   /// Release
00183   virtual void release (void);
00184 };
00185 
00186 TAO_END_VERSIONED_NAMESPACE_DECL
00187 
00188 #if defined(_MSC_VER)
00189 #pragma warning(pop)
00190 #endif /* _MSC_VER */
00191 
00192 #include /**/ "ace/post.h"
00193 
00194 #endif /* TAO_Notify_EVENTCHANNEL_H */

Generated on Tue Feb 2 17:45:29 2010 for TAO_CosNotification by  doxygen 1.4.7