00001
00002
00003 #include "orbsvcs/CosEvent/CEC_EventChannel.h"
00004 #include "orbsvcs/CosEvent/CEC_Dispatching.h"
00005 #include "orbsvcs/CosEvent/CEC_Pulling_Strategy.h"
00006 #include "orbsvcs/CosEvent/CEC_ConsumerAdmin.h"
00007 #include "orbsvcs/CosEvent/CEC_SupplierAdmin.h"
00008 #include "orbsvcs/CosEvent/CEC_ConsumerControl.h"
00009 #include "orbsvcs/CosEvent/CEC_SupplierControl.h"
00010 #include "ace/Dynamic_Service.h"
00011
00012 #if ! defined (__ACE_INLINE__)
00013 #include "orbsvcs/CosEvent/CEC_EventChannel.i"
00014 #endif
00015
00016 ACE_RCSID(CosEvent, CEC_EventChannel, "CEC_EventChannel.cpp,v 1.11 2006/03/14 06:14:24 jtc Exp")
00017
00018 TAO_BEGIN_VERSIONED_NAMESPACE_DECL
00019
00020 TAO_CEC_EventChannel::
00021 TAO_CEC_EventChannel (const TAO_CEC_EventChannel_Attributes& attr,
00022 TAO_CEC_Factory* factory,
00023 int own_factory)
00024 : supplier_poa_ (PortableServer::POA::_duplicate (attr.supplier_poa)),
00025 consumer_poa_ (PortableServer::POA::_duplicate (attr.consumer_poa)),
00026 factory_ (factory),
00027 own_factory_ (own_factory),
00028 consumer_reconnect_ (attr.consumer_reconnect),
00029 supplier_reconnect_ (attr.supplier_reconnect),
00030 disconnect_callbacks_ (attr.disconnect_callbacks)
00031 {
00032 if (this->factory_ == 0)
00033 {
00034 this->factory_ =
00035 ACE_Dynamic_Service<TAO_CEC_Factory>::instance ("CEC_Factory");
00036 this->own_factory_ = 0;
00037 ACE_ASSERT (this->factory_ != 0);
00038 }
00039
00040 this->dispatching_ =
00041 this->factory_->create_dispatching (this);
00042 this->pulling_strategy_ =
00043 this->factory_->create_pulling_strategy (this);
00044 this->consumer_admin_ =
00045 this->factory_->create_consumer_admin (this);
00046 this->supplier_admin_ =
00047 this->factory_->create_supplier_admin (this);
00048 this->consumer_control_ =
00049 this->factory_->create_consumer_control (this);
00050 this->supplier_control_ =
00051 this->factory_->create_supplier_control (this);
00052 }
00053
00054 TAO_CEC_EventChannel::~TAO_CEC_EventChannel (void)
00055 {
00056 this->factory_->destroy_dispatching (this->dispatching_);
00057 this->dispatching_ = 0;
00058
00059 this->factory_->destroy_pulling_strategy (this->pulling_strategy_);
00060 this->pulling_strategy_ = 0;
00061
00062 this->factory_->destroy_consumer_admin (this->consumer_admin_);
00063 this->consumer_admin_ = 0;
00064 this->factory_->destroy_supplier_admin (this->supplier_admin_);
00065 this->supplier_admin_ = 0;
00066
00067 this->factory_->destroy_consumer_control (this->consumer_control_);
00068 this->consumer_control_ = 0;
00069 this->factory_->destroy_supplier_control (this->supplier_control_);
00070 this->supplier_control_ = 0;
00071
00072 if (this->own_factory_)
00073 delete this->factory_;
00074 }
00075
00076 void
00077 TAO_CEC_EventChannel::activate (ACE_ENV_SINGLE_ARG_DECL_NOT_USED)
00078 {
00079 this->dispatching_->activate ();
00080 this->pulling_strategy_->activate ();
00081 this->consumer_control_->activate ();
00082 this->supplier_control_->activate ();
00083 }
00084
00085 void
00086 TAO_CEC_EventChannel::shutdown (ACE_ENV_SINGLE_ARG_DECL)
00087 {
00088 this->dispatching_->shutdown ();
00089 this->pulling_strategy_->shutdown ();
00090 this->supplier_control_->shutdown ();
00091 this->consumer_control_->shutdown ();
00092
00093 PortableServer::POA_var consumer_poa =
00094 this->consumer_admin_->_default_POA (ACE_ENV_SINGLE_ARG_PARAMETER);
00095 ACE_CHECK;
00096 PortableServer::ObjectId_var consumer_id =
00097 consumer_poa->servant_to_id (this->consumer_admin_ ACE_ENV_ARG_PARAMETER);
00098 ACE_CHECK;
00099 consumer_poa->deactivate_object (consumer_id.in () ACE_ENV_ARG_PARAMETER);
00100 ACE_CHECK;
00101
00102 PortableServer::POA_var supplier_poa =
00103 this->supplier_admin_->_default_POA (ACE_ENV_SINGLE_ARG_PARAMETER);
00104 ACE_CHECK;
00105 PortableServer::ObjectId_var supplier_id =
00106 supplier_poa->servant_to_id (this->supplier_admin_ ACE_ENV_ARG_PARAMETER);
00107 ACE_CHECK;
00108 supplier_poa->deactivate_object (supplier_id.in () ACE_ENV_ARG_PARAMETER);
00109 ACE_CHECK;
00110
00111 this->supplier_admin_->shutdown (ACE_ENV_SINGLE_ARG_PARAMETER);
00112 ACE_CHECK;
00113
00114 this->consumer_admin_->shutdown (ACE_ENV_SINGLE_ARG_PARAMETER);
00115 ACE_CHECK;
00116 }
00117
00118 void
00119 TAO_CEC_EventChannel::connected (TAO_CEC_ProxyPushConsumer* consumer
00120 ACE_ENV_ARG_DECL)
00121 {
00122 this->supplier_admin_->connected (consumer ACE_ENV_ARG_PARAMETER);
00123 ACE_CHECK;
00124 }
00125
00126 void
00127 TAO_CEC_EventChannel::reconnected (TAO_CEC_ProxyPushConsumer* consumer
00128 ACE_ENV_ARG_DECL)
00129 {
00130 this->supplier_admin_->reconnected (consumer ACE_ENV_ARG_PARAMETER);
00131 ACE_CHECK;
00132 }
00133
00134 void
00135 TAO_CEC_EventChannel::disconnected (TAO_CEC_ProxyPushConsumer* consumer
00136 ACE_ENV_ARG_DECL)
00137 {
00138 this->supplier_admin_->disconnected (consumer ACE_ENV_ARG_PARAMETER);
00139 ACE_CHECK;
00140 }
00141
00142 void
00143 TAO_CEC_EventChannel::connected (TAO_CEC_ProxyPullConsumer* consumer
00144 ACE_ENV_ARG_DECL)
00145 {
00146 this->supplier_admin_->connected (consumer ACE_ENV_ARG_PARAMETER);
00147 ACE_CHECK;
00148 }
00149
00150 void
00151 TAO_CEC_EventChannel::reconnected (TAO_CEC_ProxyPullConsumer* consumer
00152 ACE_ENV_ARG_DECL)
00153 {
00154 this->supplier_admin_->reconnected (consumer ACE_ENV_ARG_PARAMETER);
00155 ACE_CHECK;
00156 }
00157
00158 void
00159 TAO_CEC_EventChannel::disconnected (TAO_CEC_ProxyPullConsumer* consumer
00160 ACE_ENV_ARG_DECL)
00161 {
00162 this->supplier_admin_->disconnected (consumer ACE_ENV_ARG_PARAMETER);
00163 ACE_CHECK;
00164 }
00165
00166 void
00167 TAO_CEC_EventChannel::connected (TAO_CEC_ProxyPushSupplier* supplier
00168 ACE_ENV_ARG_DECL)
00169 {
00170 this->consumer_admin_->connected (supplier ACE_ENV_ARG_PARAMETER);
00171 ACE_CHECK;
00172 }
00173
00174 void
00175 TAO_CEC_EventChannel::reconnected (TAO_CEC_ProxyPushSupplier* supplier
00176 ACE_ENV_ARG_DECL)
00177 {
00178 this->consumer_admin_->reconnected (supplier ACE_ENV_ARG_PARAMETER);
00179 ACE_CHECK;
00180 }
00181
00182 void
00183 TAO_CEC_EventChannel::disconnected (TAO_CEC_ProxyPushSupplier* supplier
00184 ACE_ENV_ARG_DECL)
00185 {
00186 this->consumer_admin_->disconnected (supplier ACE_ENV_ARG_PARAMETER);
00187 ACE_CHECK;
00188 }
00189
00190 void
00191 TAO_CEC_EventChannel::connected (TAO_CEC_ProxyPullSupplier* supplier
00192 ACE_ENV_ARG_DECL)
00193 {
00194 this->consumer_admin_->connected (supplier ACE_ENV_ARG_PARAMETER);
00195 ACE_CHECK;
00196 }
00197
00198 void
00199 TAO_CEC_EventChannel::reconnected (TAO_CEC_ProxyPullSupplier* supplier
00200 ACE_ENV_ARG_DECL)
00201 {
00202 this->consumer_admin_->reconnected (supplier ACE_ENV_ARG_PARAMETER);
00203 ACE_CHECK;
00204 }
00205
00206 void
00207 TAO_CEC_EventChannel::disconnected (TAO_CEC_ProxyPullSupplier* supplier
00208 ACE_ENV_ARG_DECL)
00209 {
00210 this->consumer_admin_->disconnected (supplier ACE_ENV_ARG_PARAMETER);
00211 ACE_CHECK;
00212 }
00213
00214 CosEventChannelAdmin::ConsumerAdmin_ptr
00215 TAO_CEC_EventChannel::for_consumers (ACE_ENV_SINGLE_ARG_DECL)
00216 ACE_THROW_SPEC ((CORBA::SystemException))
00217 {
00218 return this->consumer_admin_->_this (ACE_ENV_SINGLE_ARG_PARAMETER);
00219 }
00220
00221 CosEventChannelAdmin::SupplierAdmin_ptr
00222 TAO_CEC_EventChannel::for_suppliers (ACE_ENV_SINGLE_ARG_DECL)
00223 ACE_THROW_SPEC ((CORBA::SystemException))
00224 {
00225 return this->supplier_admin_->_this (ACE_ENV_SINGLE_ARG_PARAMETER);
00226 }
00227
00228 void
00229 TAO_CEC_EventChannel::destroy (ACE_ENV_SINGLE_ARG_DECL)
00230 ACE_THROW_SPEC ((CORBA::SystemException))
00231 {
00232 this->shutdown (ACE_ENV_SINGLE_ARG_PARAMETER);
00233 }
00234
00235 TAO_END_VERSIONED_NAMESPACE_DECL