00001 // -*- C++ -*- 00002 //============================================================================= 00003 /** 00004 * @file CEC_ConsumerAdmin.h 00005 * 00006 * CEC_ConsumerAdmin.h,v 1.19 2006/03/15 07:52:21 jtc Exp 00007 * 00008 * @author Carlos O'Ryan (coryan@cs.wustl.edu) 00009 */ 00010 //============================================================================= 00011 00012 00013 #ifndef TAO_CEC_CONSUMERADMIN_H 00014 #define TAO_CEC_CONSUMERADMIN_H 00015 00016 #include /**/ "ace/pre.h" 00017 00018 #include "orbsvcs/CosEventChannelAdminS.h" 00019 00020 #if !defined (ACE_LACKS_PRAGMA_ONCE) 00021 # pragma once 00022 #endif /* ACE_LACKS_PRAGMA_ONCE */ 00023 00024 #include "orbsvcs/ESF/ESF_Proxy_Admin.h" 00025 00026 #include "orbsvcs/CosEvent/CEC_ProxyPushSupplier.h" 00027 #include "orbsvcs/CosEvent/CEC_ProxyPullSupplier.h" 00028 #include "orbsvcs/CosEvent/event_serv_export.h" 00029 00030 TAO_BEGIN_VERSIONED_NAMESPACE_DECL 00031 00032 class TAO_CEC_EventChannel; 00033 00034 /** 00035 * @class TAO_CEC_ConsumerAdmin 00036 * 00037 * @brief ConsumerAdmin 00038 * 00039 * Implements the ConsumerAdmin interface, i.e. the factory for 00040 * ProxyPushSupplier objects. 00041 * = MEMORY MANAGMENT 00042 * It does not assume ownership of the TAO_CEC_EventChannel 00043 * object; but it *does* assume ownership of the 00044 * TAO_CEC_ProxyPushSupplier_Set object. 00045 * = LOCKING 00046 * No provisions for locking, access must be serialized 00047 * externally. 00048 * = TODO 00049 */ 00050 class TAO_Event_Serv_Export TAO_CEC_ConsumerAdmin 00051 : public POA_CosEventChannelAdmin::ConsumerAdmin 00052 { 00053 public: 00054 /** 00055 * constructor. If <supplier_set> is nil then it builds one using 00056 * the <event_channel> argument. 00057 * In any case it assumes ownership. 00058 */ 00059 TAO_CEC_ConsumerAdmin (TAO_CEC_EventChannel* event_channel); 00060 00061 /// destructor... 00062 virtual ~TAO_CEC_ConsumerAdmin (void); 00063 00064 /// For each elements call <worker->work()>. 00065 void for_each (TAO_ESF_Worker<TAO_CEC_ProxyPushSupplier> *worker 00066 ACE_ENV_ARG_DECL); 00067 void for_each (TAO_ESF_Worker<TAO_CEC_ProxyPullSupplier> *worker 00068 ACE_ENV_ARG_DECL); 00069 00070 /// Push the event to all the consumers 00071 void push (const CORBA::Any &event 00072 ACE_ENV_ARG_DECL); 00073 00074 /// Used to inform the EC that a Supplier has connected or 00075 /// disconnected from it. 00076 virtual void connected (TAO_CEC_ProxyPushSupplier* 00077 ACE_ENV_ARG_DECL_NOT_USED); 00078 virtual void reconnected (TAO_CEC_ProxyPushSupplier* 00079 ACE_ENV_ARG_DECL_NOT_USED); 00080 virtual void disconnected (TAO_CEC_ProxyPushSupplier* 00081 ACE_ENV_ARG_DECL_NOT_USED); 00082 virtual void connected (TAO_CEC_ProxyPullSupplier* 00083 ACE_ENV_ARG_DECL_NOT_USED); 00084 virtual void reconnected (TAO_CEC_ProxyPullSupplier* 00085 ACE_ENV_ARG_DECL_NOT_USED); 00086 virtual void disconnected (TAO_CEC_ProxyPullSupplier* 00087 ACE_ENV_ARG_DECL_NOT_USED); 00088 00089 /// The event channel is shutting down, inform all the consumers of 00090 /// this 00091 virtual void shutdown (ACE_ENV_SINGLE_ARG_DECL_NOT_USED); 00092 00093 // = The CosEventChannelAdmin::ConsumerAdmin methods... 00094 virtual CosEventChannelAdmin::ProxyPushSupplier_ptr 00095 obtain_push_supplier (ACE_ENV_SINGLE_ARG_DECL_NOT_USED) 00096 ACE_THROW_SPEC ((CORBA::SystemException)); 00097 virtual CosEventChannelAdmin::ProxyPullSupplier_ptr 00098 obtain_pull_supplier (ACE_ENV_SINGLE_ARG_DECL_NOT_USED) 00099 ACE_THROW_SPEC ((CORBA::SystemException)); 00100 00101 // = The PortableServer::ServantBase methods 00102 virtual PortableServer::POA_ptr _default_POA (ACE_ENV_SINGLE_ARG_DECL); 00103 00104 private: 00105 /// The Event Channel we belong to 00106 TAO_CEC_EventChannel *event_channel_; 00107 00108 /// Store the default POA. 00109 PortableServer::POA_var default_POA_; 00110 00111 /// Implement the push side of this class 00112 TAO_ESF_Proxy_Admin<TAO_CEC_EventChannel,TAO_CEC_ProxyPushSupplier,CosEventChannelAdmin::ProxyPushSupplier> push_admin_; 00113 00114 /// Implement the pull side of this class 00115 TAO_ESF_Proxy_Admin<TAO_CEC_EventChannel,TAO_CEC_ProxyPullSupplier,CosEventChannelAdmin::ProxyPullSupplier> pull_admin_; 00116 00117 }; 00118 00119 // **************************************************************** 00120 00121 class TAO_CEC_Propagate_Event_Push : public TAO_ESF_Worker<TAO_CEC_ProxyPushSupplier> 00122 { 00123 public: 00124 TAO_CEC_Propagate_Event_Push (const CORBA::Any& event); 00125 00126 void work (TAO_CEC_ProxyPushSupplier *supplier 00127 ACE_ENV_ARG_DECL); 00128 00129 private: 00130 /// The event 00131 CORBA::Any event_; 00132 }; 00133 00134 // **************************************************************** 00135 00136 class TAO_CEC_Propagate_Event_Pull : public TAO_ESF_Worker<TAO_CEC_ProxyPullSupplier> 00137 { 00138 public: 00139 TAO_CEC_Propagate_Event_Pull (const CORBA::Any& event); 00140 00141 void work (TAO_CEC_ProxyPullSupplier *supplier 00142 ACE_ENV_ARG_DECL); 00143 00144 private: 00145 /// The event 00146 CORBA::Any event_; 00147 }; 00148 00149 TAO_END_VERSIONED_NAMESPACE_DECL 00150 00151 #if defined (__ACE_INLINE__) 00152 #include "orbsvcs/CosEvent/CEC_ConsumerAdmin.i" 00153 #endif /* __ACE_INLINE__ */ 00154 00155 #include /**/ "ace/post.h" 00156 00157 #endif /* TAO_CEC_CONSUMERADMIN_H */