#include <CEC_ProxyPushSupplier.h>
Collaboration diagram for TAO_CEC_ProxyPushSupplier:
Public Types | |
typedef CosEventChannelAdmin::ProxyPushSupplier_ptr | _ptr_type |
typedef CosEventChannelAdmin::ProxyPushSupplier_var | _var_type |
Public Member Functions | |
TAO_CEC_ProxyPushSupplier (TAO_CEC_EventChannel *event_channel) | |
constructor... | |
virtual | ~TAO_CEC_ProxyPushSupplier (void) |
destructor... | |
CosEventComm::PushConsumer_ptr | consumer (void) const |
virtual void | shutdown (ACE_ENV_SINGLE_ARG_DECL) |
The event channel is shutting down. | |
virtual void | push (const CORBA::Any &event ACE_ENV_ARG_DECL) |
Internal methods to push an event to each consumer. | |
virtual void | push_nocopy (CORBA::Any &event ACE_ENV_ARG_DECL) |
void | push_to_consumer (const CORBA::Any &event ACE_ENV_ARG_DECL) |
Pushes to the consumer, verifies that it is connected. | |
void | reactive_push_to_consumer (const CORBA::Any &event ACE_ENV_ARG_DECL) |
CORBA::Boolean | consumer_non_existent (CORBA::Boolean_out disconnected ACE_ENV_ARG_DECL) |
CORBA::ULong | _decr_refcnt (void) |
virtual PortableServer::POA_ptr | _default_POA (ACE_ENV_SINGLE_ARG_DECL) |
virtual void | _add_ref (ACE_ENV_SINGLE_ARG_DECL) |
virtual void | _remove_ref (ACE_ENV_SINGLE_ARG_DECL) |
Public Attributes | |
virtual void virtual activate(CosEventChannelAdmin::ProxyPushSupplier_ptr &ACE_ENV_ARG_DECL) ACE_THROW_SPEC((CORBA void deactivate(ACE_ENV_SINGLE_ARG_DECL) ACE_THROW_SPEC((CORBA CORBA::Boolea | is_connected )(void) const |
Return 0 if no consumer is connected... | |
virtual void virtual connect_push_consumer(CosEventComm::PushConsumer_ptr push_consumer ACE_ENV_ARG_DECL_NOT_USED) ACE_THROW_SPEC((CORBA void disconnect_push_supplier(ACE_ENV_SINGLE_ARG_DECL_NOT_USED) ACE_THROW_SPEC((CORBA CORBA::ULon | _incr_refcnt )(void) |
Increment and decrement the reference count. | |
Protected Member Functions | |
void | consumer (CosEventComm::PushConsumer_ptr consumer) |
void | consumer_i (CosEventComm::PushConsumer_ptr consumer) |
CORBA::Boolean | is_connected_i (void) const |
The private version (without locking) of is_connected(). | |
void | cleanup_i (void) |
Release the child and the consumer. | |
Private Attributes | |
TAO_CEC_EventChannel * | event_channel_ |
The Event Channel that owns this object. | |
ACE_Lock * | lock_ |
The locking strategy. | |
CORBA::ULong | refcount_ |
The reference count. | |
CosEventComm::PushConsumer_var | consumer_ |
The consumer.... | |
PortableServer::POA_var | default_POA_ |
Store the default POA. |
Implement the CosEventChannelAdmin::ProxyPushSupplier interface, remember that this class is used to communicate with a PushConsumer, so, in effect, this is the ambassador for a consumer inside the event channel. = MEMORY MANAGMENT It does not assume ownership of the TAO_CEC_Dispatching object. It makes a copy of the ConsumerQOS and the consumer object reference. = LOCKING Locking is strategized, the event channel acts as a factory for the locking strategies.
Definition at line 58 of file CEC_ProxyPushSupplier.h.
|
Definition at line 61 of file CEC_ProxyPushSupplier.h. |
|
Definition at line 62 of file CEC_ProxyPushSupplier.h. |
|
constructor...
Definition at line 38 of file CEC_ProxyPushSupplier.cpp. References TAO_CEC_EventChannel::create_supplier_lock(), TAO_CEC_EventChannel::get_servant_retry_map(), and TAO_CEC_EventChannel::supplier_poa().
00039 : event_channel_ (ec), 00040 refcount_ (1) 00041 { 00042 #if defined (TAO_HAS_TYPED_EVENT_CHANNEL) 00043 typed_event_channel_ = 0; 00044 #endif /* TAO_HAS_TYPED_EVENT_CHANNEL */ 00045 00046 this->lock_ = 00047 this->event_channel_->create_supplier_lock (); 00048 00049 this->default_POA_ = 00050 this->event_channel_->supplier_poa (); 00051 00052 this->event_channel_->get_servant_retry_map ().bind (this, 0); 00053 } |
|
destructor...
Definition at line 73 of file CEC_ProxyPushSupplier.cpp. References TAO_CEC_EventChannel::destroy_supplier_lock(), and TAO_CEC_EventChannel::get_servant_retry_map().
00074 { 00075 #if defined (TAO_HAS_TYPED_EVENT_CHANNEL) 00076 if (this->is_typed_ec () ) 00077 { 00078 this->typed_event_channel_->get_servant_retry_map ().unbind (this); 00079 this->typed_event_channel_->destroy_supplier_lock (this->lock_); 00080 } 00081 else 00082 { 00083 this->event_channel_->get_servant_retry_map ().unbind (this); 00084 this->event_channel_->destroy_supplier_lock (this->lock_); 00085 } 00086 #else 00087 this->event_channel_->get_servant_retry_map ().unbind (this); 00088 this->event_channel_->destroy_supplier_lock (this->lock_); 00089 #endif /* TAO_HAS_TYPED_EVENT_CHANNEL */ 00090 } |
|
|
|
Definition at line 323 of file CEC_ProxyPushSupplier.cpp. References ACE_GUARD_RETURN, and TAO_CEC_EventChannel::destroy_proxy(). Referenced by TAO_CEC_Push_Command::~TAO_CEC_Push_Command().
00324 { 00325 { 00326 ACE_GUARD_RETURN (ACE_Lock, ace_mon, *this->lock_, 0); 00327 --this->refcount_; 00328 if (this->refcount_ != 0) 00329 return this->refcount_; 00330 } 00331 00332 // Notify the event channel 00333 #if defined (TAO_HAS_TYPED_EVENT_CHANNEL) 00334 if (this->is_typed_ec () ) 00335 { 00336 this->typed_event_channel_->destroy_proxy (this); 00337 } 00338 else 00339 { 00340 this->event_channel_->destroy_proxy (this); 00341 } 00342 #else 00343 this->event_channel_->destroy_proxy (this); 00344 #endif /* TAO_HAS_TYPED_EVENT_CHANNEL */ 00345 return 0; 00346 } |
|
|
|
|
|
Release the child and the consumer.
Definition at line 305 of file CEC_ProxyPushSupplier.cpp.
00306 { 00307 this->consumer_ = 00308 CosEventComm::PushConsumer::_nil (); 00309 #if defined (TAO_HAS_TYPED_EVENT_CHANNEL) 00310 this->typed_consumer_ = 00311 CosTypedEventComm::TypedPushConsumer::_nil (); 00312 #endif /* TAO_HAS_TYPED_EVENT_CHANNEL */ 00313 } |
|
Set the consumer, used by some implementations to change the policies used when invoking operations on the consumer. Definition at line 66 of file CEC_ProxyPushSupplier.i. References ACE_GUARD, and consumer_i().
00067 { 00068 ACE_GUARD (ACE_Lock, ace_mon, *this->lock_); 00069 00070 this->consumer_i (consumer); 00071 } |
|
Return the consumer object reference. It returns nil() if it has not connected yet. NOTE: This method does not return a new reference!!! Doing so will increase the locking overhead on the critical path. Definition at line 33 of file CEC_ProxyPushSupplier.i. References ACE_GUARD_RETURN.
00034 { 00035 ACE_GUARD_RETURN (ACE_Lock, ace_mon, *this->lock_, 0); 00036 00037 #if defined (TAO_HAS_TYPED_EVENT_CHANNEL) 00038 if (this->is_typed_ec ()) 00039 { 00040 return this->typed_consumer_.in (); 00041 } 00042 else 00043 { 00044 return this->consumer_.in (); 00045 } 00046 #else 00047 return this->consumer_.in (); 00048 #endif /* TAO_HAS_TYPED_EVENT_CHANNEL */ 00049 } |
|
Definition at line 52 of file CEC_ProxyPushSupplier.i. Referenced by consumer().
00053 { 00054 this->consumer_ = consumer; 00055 } |
|
Invoke the _non_existent() pseudo-operation on the consumer. If it is disconnected then it returns true and sets the flag. Definition at line 861 of file CEC_ProxyPushSupplier.cpp. References CORBA::Object::_duplicate(), ACE_CHECK_RETURN, ACE_ENV_SINGLE_ARG_PARAMETER, ACE_GUARD_THROW_EX, is_connected_i(), and CORBA::is_nil().
00864 { 00865 CORBA::Object_var consumer; 00866 { 00867 ACE_GUARD_THROW_EX ( 00868 ACE_Lock, ace_mon, *this->lock_, 00869 CORBA::INTERNAL ()); 00870 ACE_CHECK_RETURN (0); 00871 00872 disconnected = 0; 00873 if (this->is_connected_i () == 0) 00874 { 00875 disconnected = 1; 00876 return 0; 00877 } 00878 00879 #if defined (TAO_HAS_TYPED_EVENT_CHANNEL) 00880 if (this->is_typed_ec () ) 00881 { 00882 if (CORBA::is_nil (this->typed_consumer_.in ())) 00883 { 00884 return 0; 00885 } 00886 consumer = CORBA::Object::_duplicate (this->typed_consumer_.in ()); 00887 } 00888 else 00889 { 00890 #endif /* TAO_HAS_TYPED_EVENT_CHANNEL */ 00891 if (CORBA::is_nil (this->consumer_.in ())) 00892 { 00893 return 0; 00894 } 00895 consumer = CORBA::Object::_duplicate (this->consumer_.in ()); 00896 #if defined (TAO_HAS_TYPED_EVENT_CHANNEL) 00897 } /* ! this->is_typed_ec */ 00898 #endif /* TAO_HAS_TYPED_EVENT_CHANNEL */ 00899 } 00900 00901 #if (TAO_HAS_MINIMUM_CORBA == 0) 00902 return consumer->_non_existent (ACE_ENV_SINGLE_ARG_PARAMETER); 00903 #else 00904 return 0; 00905 #endif /* TAO_HAS_MINIMUM_CORBA */ 00906 } |
|
The private version (without locking) of is_connected().
Definition at line 8 of file CEC_ProxyPushSupplier.i. References CORBA::is_nil(). Referenced by consumer_non_existent().
00009 { 00010 #if defined (TAO_HAS_TYPED_EVENT_CHANNEL) 00011 if (this->is_typed_ec ()) 00012 { 00013 return !CORBA::is_nil (this->typed_consumer_.in ()); 00014 } 00015 else 00016 { 00017 return !CORBA::is_nil (this->consumer_.in ()); 00018 } 00019 #else 00020 return !CORBA::is_nil (this->consumer_.in ()); 00021 #endif /* TAO_HAS_TYPED_EVENT_CHANNEL */ 00022 } |
|
Internal methods to push an event to each consumer.
|
|
|
|
Pushes to the consumer, verifies that it is connected.
Referenced by TAO_CEC_Push_Command::execute(). |
|
Referenced by TAO_CEC_Reactive_Dispatching::push(), and TAO_CEC_Reactive_Dispatching::push_nocopy(). |
|
The event channel is shutting down.
|
|
Increment and decrement the reference count.
Definition at line 316 of file CEC_ProxyPushSupplier.cpp. Referenced by TAO_CEC_Push_Command::TAO_CEC_Push_Command().
00317 { 00318 ACE_GUARD_RETURN (ACE_Lock, ace_mon, *this->lock_, 0); 00319 return this->refcount_++; 00320 } |
|
The consumer....
Definition at line 185 of file CEC_ProxyPushSupplier.h. |
|
Store the default POA.
Definition at line 196 of file CEC_ProxyPushSupplier.h. |
|
The Event Channel that owns this object.
Definition at line 171 of file CEC_ProxyPushSupplier.h. |
|
Return 0 if no consumer is connected...
Definition at line 25 of file CEC_ProxyPushSupplier.i.
00026 { 00027 ACE_GUARD_RETURN (ACE_Lock, ace_mon, *this->lock_, 0); 00028 00029 return this->is_connected_i (); 00030 } |
|
The locking strategy.
Definition at line 179 of file CEC_ProxyPushSupplier.h. |
|
The reference count.
Definition at line 182 of file CEC_ProxyPushSupplier.h. |