#include <EC_Gateway.h>
Inheritance diagram for TAO_EC_Gateway_IIOP:
Public Methods | |
TAO_EC_Gateway_IIOP (void) | |
~TAO_EC_Gateway_IIOP (void) | |
void | init (RtecEventChannelAdmin::EventChannel_ptr rmt_ec, RtecEventChannelAdmin::EventChannel_ptr lcl_ec ACE_ENV_ARG_DECL) |
void | disconnect_push_supplier (ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS) |
The channel is disconnecting. | |
void | disconnect_push_consumer (ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS) |
The channel is disconnecting. | |
void | push (const RtecEventComm::EventSet &events ACE_ENV_ARG_DECL_WITH_DEFAULTS) |
int | shutdown (ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS) |
Disconnect and shutdown the gateway. | |
virtual void | close (ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS) |
virtual void | update_consumer (const RtecEventChannelAdmin::ConsumerQOS &sub ACE_ENV_ARG_DECL_WITH_DEFAULTS) throw (CORBA::SystemException) |
virtual void | update_supplier (const RtecEventChannelAdmin::SupplierQOS &pub ACE_ENV_ARG_DECL_WITH_DEFAULTS) throw (CORBA::SystemException) |
Protected Types | |
typedef ACE_Map_Manager< RtecEventComm::EventSourceID, RtecEventChannelAdmin::ProxyPushConsumer_ptr, ACE_Null_Mutex > | Consumer_Map |
typedef ACE_Map_Iterator< RtecEventComm::EventSourceID, RtecEventChannelAdmin::ProxyPushConsumer_ptr, ACE_Null_Mutex > | Consumer_Map_Iterator |
Protected Methods | |
void | init_i (RtecEventChannelAdmin::EventChannel_ptr rmt_ec, RtecEventChannelAdmin::EventChannel_ptr lcl_ec ACE_ENV_ARG_DECL) |
Do the real work in init(). | |
Protected Attributes | |
TAO_SYNCH_MUTEX | lock_ |
Lock to synchronize internal changes. | |
CORBA::ULong | busy_count_ |
int | update_posted_ |
RtecEventChannelAdmin::ConsumerQOS | c_qos_ |
RtecEventChannelAdmin::EventChannel_var | rmt_ec_ |
The remote and the local EC, so we can reconnect when the list changes. | |
RtecEventChannelAdmin::EventChannel_var | lcl_ec_ |
RtecBase::handle_t | rmt_info_ |
Our local and remote RT_Infos. | |
RtecBase::handle_t | lcl_info_ |
ACE_PushConsumer_Adapter< TAO_EC_Gateway_IIOP > | consumer_ |
int | consumer_is_active_ |
ACE_PushSupplier_Adapter< TAO_EC_Gateway_IIOP > | supplier_ |
int | supplier_is_active_ |
Consumer_Map | consumer_proxy_map_ |
RtecEventChannelAdmin::ProxyPushConsumer_var | default_consumer_proxy_ |
RtecEventChannelAdmin::ProxyPushSupplier_var | supplier_proxy_ |
We talk to the EC (as a consumer) using this proxy. | |
Private Methods | |
void | close_i (ACE_ENV_SINGLE_ARG_DECL_NOT_USED) |
void | update_consumer_i (const RtecEventChannelAdmin::ConsumerQOS &sub ACE_ENV_ARG_DECL) |
This class mediates among two event channels, it connects as a consumer of events with a remote event channel, and as a supplier of events with the local EC. As a consumer it gives a QoS designed to only accept the events in which *local* consumers are interested. Eventually the local EC should create this object and compute its QoS in an automated manner; but this requires some way to filter out the peers registered as consumers, otherwise we will get loops in the QoS graph. It uses exactly the same set of events in the publications list when connected as a supplier.
|
|
|
|
|
|
|
|
|
The gateway must disconnect from all the relevant event channels, or any other communication media (such as multicast groups). Implements TAO_EC_Gateway. |
|
|
|
The channel is disconnecting.
|
|
The channel is disconnecting.
|
|
To do its job this class requires to know the local and remote ECs it will connect to, |
|
Do the real work in init().
|
|
This is the Consumer side behavior, it pushes the events to the local event channel. |
|
Disconnect and shutdown the gateway.
|
|
|
|
|
|
|
|
How many threads are running push() we cannot make changes until that reaches 0 |
|
|
|
Our consumer personality.... If it is not 0 then we must deactivate the supplier |
|
|
|
We talk to the EC (as a supplier) using either an per-supplier proxy or a generic proxy for the type only subscriptions. |
|
|
|
|
|
|
|
Lock to synchronize internal changes.
|
|
The remote and the local EC, so we can reconnect when the list changes.
|
|
Our local and remote RT_Infos.
|
|
Our supplier personality.... If it is not 0 then we must deactivate the supplier |
|
|
|
We talk to the EC (as a consumer) using this proxy.
|
|
An update_consumer() message arrived *while* we were doing a push() the modification is stored <pub_>, if multiple update_consumer messages arrive only the last one is executed. |