00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef TAO_EC_EVENT_CHANNEL_BASE_H
00019 #define TAO_EC_EVENT_CHANNEL_BASE_H
00020
00021 #include "ace/pre.h"
00022
00023 #include "orbsvcs/Event/EC_Factory.h"
00024
00025 #if !defined (ACE_LACKS_PRAGMA_ONCE)
00026 # pragma once
00027 #endif
00028
00029 #include "orbsvcs/Event/EC_Defaults.h"
00030
00031 #include "orbsvcs/RtecEventChannelAdminS.h"
00032
00033 TAO_BEGIN_VERSIONED_NAMESPACE_DECL
00034
00035 template<class> class TAO_ESF_Worker;
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053 class TAO_RTEvent_Serv_Export TAO_EC_Event_Channel_Attributes
00054 {
00055 public:
00056
00057
00058
00059
00060
00061 TAO_EC_Event_Channel_Attributes (PortableServer::POA_ptr supplier_poa,
00062 PortableServer::POA_ptr consumer_poa);
00063
00064
00065
00066
00067
00068 int consumer_reconnect;
00069 int supplier_reconnect;
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080 int disconnect_callbacks;
00081
00082
00083
00084
00085
00086
00087 CORBA::Object_ptr scheduler;
00088
00089 private:
00090
00091 friend class TAO_EC_Event_Channel_Base;
00092
00093
00094 PortableServer::POA_ptr supplier_poa;
00095 PortableServer::POA_ptr consumer_poa;
00096 };
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109
00110 class TAO_RTEvent_Serv_Export TAO_EC_Event_Channel_Base
00111 : public POA_RtecEventChannelAdmin::EventChannel
00112 {
00113 public:
00114
00115 virtual ~TAO_EC_Event_Channel_Base (void);
00116
00117
00118
00119 virtual void activate (ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS);
00120
00121
00122
00123 virtual void shutdown (ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS);
00124
00125 virtual void for_each_consumer (
00126 TAO_ESF_Worker<TAO_EC_ProxyPushSupplier> *worker
00127 ACE_ENV_ARG_DECL)
00128 ACE_THROW_SPEC ((CORBA::SystemException));
00129
00130 virtual void for_each_supplier (
00131 TAO_ESF_Worker<TAO_EC_ProxyPushConsumer> *worker
00132 ACE_ENV_ARG_DECL)
00133 ACE_THROW_SPEC ((CORBA::SystemException));
00134
00135
00136 TAO_EC_Dispatching* dispatching (void) const;
00137
00138
00139 TAO_EC_Filter_Builder* filter_builder (void) const;
00140
00141
00142 TAO_EC_Supplier_Filter_Builder* supplier_filter_builder (void) const;
00143
00144
00145
00146 TAO_EC_ConsumerAdmin* consumer_admin (void) const;
00147
00148
00149
00150 TAO_EC_SupplierAdmin* supplier_admin (void) const;
00151
00152
00153 TAO_EC_Timeout_Generator* timeout_generator (void) const;
00154
00155
00156 TAO_EC_Scheduling_Strategy* scheduling_strategy (void) const;
00157
00158
00159 TAO_EC_ConsumerControl *consumer_control (void) const;
00160 TAO_EC_SupplierControl *supplier_control (void) const;
00161
00162
00163
00164 void create_proxy (TAO_EC_ProxyPushSupplier*&);
00165 void destroy_proxy (TAO_EC_ProxyPushSupplier*);
00166
00167
00168 void create_proxy (TAO_EC_ProxyPushConsumer*&);
00169 void destroy_proxy (TAO_EC_ProxyPushConsumer*);
00170
00171
00172
00173
00174 void create_proxy_collection (TAO_EC_ProxyPushSupplier_Collection*&);
00175 void destroy_proxy_collection (TAO_EC_ProxyPushSupplier_Collection*);
00176
00177
00178
00179
00180 void create_proxy_collection (TAO_EC_ProxyPushConsumer_Collection*&);
00181 void destroy_proxy_collection (TAO_EC_ProxyPushConsumer_Collection*);
00182
00183
00184 PortableServer::POA_ptr supplier_poa (void);
00185 PortableServer::POA_ptr consumer_poa (void);
00186
00187
00188
00189 ACE_Lock* create_consumer_lock (void);
00190 void destroy_consumer_lock (ACE_Lock*);
00191 ACE_Lock* create_supplier_lock (void);
00192 void destroy_supplier_lock (ACE_Lock*);
00193
00194
00195
00196 virtual void connected (TAO_EC_ProxyPushConsumer*
00197 ACE_ENV_ARG_DECL_NOT_USED);
00198 virtual void reconnected (TAO_EC_ProxyPushConsumer*
00199 ACE_ENV_ARG_DECL_NOT_USED);
00200 virtual void disconnected (TAO_EC_ProxyPushConsumer*
00201 ACE_ENV_ARG_DECL_NOT_USED);
00202
00203
00204
00205 virtual void connected (TAO_EC_ProxyPushSupplier*
00206 ACE_ENV_ARG_DECL_NOT_USED);
00207 virtual void reconnected (TAO_EC_ProxyPushSupplier*
00208 ACE_ENV_ARG_DECL_NOT_USED);
00209 virtual void disconnected (TAO_EC_ProxyPushSupplier*
00210 ACE_ENV_ARG_DECL_NOT_USED);
00211
00212
00213
00214
00215
00216 int consumer_reconnect (void) const;
00217
00218
00219 int supplier_reconnect (void) const;
00220
00221
00222
00223 int disconnect_callbacks (void) const;
00224
00225
00226 CORBA::Object_ptr scheduler (void);
00227
00228
00229
00230
00231 virtual RtecEventChannelAdmin::ConsumerAdmin_ptr
00232 for_consumers (ACE_ENV_SINGLE_ARG_DECL)
00233 ACE_THROW_SPEC ((CORBA::SystemException));
00234
00235
00236
00237 virtual RtecEventChannelAdmin::SupplierAdmin_ptr
00238 for_suppliers (ACE_ENV_SINGLE_ARG_DECL)
00239 ACE_THROW_SPEC ((CORBA::SystemException));
00240
00241
00242 virtual void destroy (ACE_ENV_SINGLE_ARG_DECL)
00243 ACE_THROW_SPEC ((CORBA::SystemException));
00244
00245 virtual RtecEventChannelAdmin::Observer_Handle
00246 append_observer (RtecEventChannelAdmin::Observer_ptr
00247 ACE_ENV_ARG_DECL)
00248 ACE_THROW_SPEC ((
00249 CORBA::SystemException,
00250 RtecEventChannelAdmin::EventChannel::SYNCHRONIZATION_ERROR,
00251 RtecEventChannelAdmin::EventChannel::CANT_APPEND_OBSERVER));
00252 virtual void
00253 remove_observer (RtecEventChannelAdmin::Observer_Handle
00254 ACE_ENV_ARG_DECL)
00255 ACE_THROW_SPEC ((
00256 CORBA::SystemException,
00257 RtecEventChannelAdmin::EventChannel::SYNCHRONIZATION_ERROR,
00258 RtecEventChannelAdmin::EventChannel::CANT_REMOVE_OBSERVER));
00259
00260
00261 int destroyed (void);
00262
00263 protected:
00264
00265
00266
00267
00268
00269
00270 TAO_EC_Event_Channel_Base (const TAO_EC_Event_Channel_Attributes& attributes,
00271 TAO_EC_Factory* factory = 0,
00272 int own_factory = 0);
00273
00274
00275
00276
00277 TAO_EC_Factory * factory (void) const;
00278
00279
00280
00281
00282
00283 void factory (TAO_EC_Factory* factory,
00284 int own_factory = 0);
00285
00286
00287
00288
00289 void create_strategies (void);
00290
00291
00292
00293
00294 void deactivate_supplier_admin (void);
00295 void deactivate_consumer_admin (void);
00296
00297
00298
00299
00300 PortableServer::POA_var supplier_poa_;
00301 PortableServer::POA_var consumer_poa_;
00302
00303
00304
00305
00306
00307
00308 TAO_EC_Factory *factory_;
00309
00310
00311 int own_factory_;
00312
00313
00314 TAO_EC_Dispatching *dispatching_;
00315
00316
00317 TAO_EC_Filter_Builder *filter_builder_;
00318
00319
00320 TAO_EC_Supplier_Filter_Builder *supplier_filter_builder_;
00321
00322
00323 TAO_EC_ConsumerAdmin *consumer_admin_;
00324
00325
00326 TAO_EC_SupplierAdmin *supplier_admin_;
00327
00328
00329 TAO_EC_Timeout_Generator *timeout_generator_;
00330
00331
00332 TAO_EC_ObserverStrategy *observer_strategy_;
00333
00334
00335 CORBA::Object_var scheduler_;
00336
00337
00338 TAO_EC_Scheduling_Strategy *scheduling_strategy_;
00339
00340
00341 int consumer_reconnect_;
00342
00343
00344 int supplier_reconnect_;
00345
00346
00347 int disconnect_callbacks_;
00348
00349
00350 TAO_EC_ConsumerControl *consumer_control_;
00351
00352
00353 TAO_EC_SupplierControl *supplier_control_;
00354
00355
00356 TAO_SYNCH_MUTEX mutex_;
00357
00358
00359 enum {
00360 EC_S_IDLE
00361 , EC_S_ACTIVATING
00362 , EC_S_ACTIVE
00363 , EC_S_DESTROYING
00364 , EC_S_DESTROYED
00365 };
00366 int status_;
00367 };
00368
00369 TAO_END_VERSIONED_NAMESPACE_DECL
00370
00371 #if defined (__ACE_INLINE__)
00372 #include "orbsvcs/Event/EC_Event_Channel_Base.i"
00373 #endif
00374
00375 #include "ace/post.h"
00376
00377 #endif