Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

TAO_ECG_Mcast_EH Class Reference

Event Handler for Mcast messages. NOT THREAD-SAFE. More...

#include <ECG_Mcast_EH.h>

Inheritance diagram for TAO_ECG_Mcast_EH:

Inheritance graph
[legend]
Collaboration diagram for TAO_ECG_Mcast_EH:

Collaboration graph
[legend]
List of all members.

Public Member Functions

virtual int handle_input (ACE_HANDLE fd)
 TAO_ECG_Mcast_EH (TAO_ECG_Dgram_Handler *recv, const ACE_TCHAR *net_if=0, CORBA::ULong buf_sz=0)
virtual ~TAO_ECG_Mcast_EH (void)
 Destructor.
void open (RtecEventChannelAdmin::EventChannel_ptr ec ACE_ENV_ARG_DECL_WITH_DEFAULTS)
virtual int shutdown (void)
 TAO_ECG_Handler_Shutdown method.

Private Types

typedef ACE_Unbounded_Set<
ACE_INET_Addr
Address_Set
typedef ACE_Array_Base< SubscriptionSubscriptions

Private Member Functions

void update_consumer (const RtecEventChannelAdmin::ConsumerQOS &sub ACE_ENV_ARG_DECL) throw (CORBA::SystemException)
void compute_required_subscriptions (const RtecEventChannelAdmin::ConsumerQOS &sub, Address_Set &multicast_addresses ACE_ENV_ARG_DECL) throw (CORBA::SystemException)
int delete_unwanted_subscriptions (Address_Set &multicast_addresses)
void add_new_subscriptions (Address_Set &multicast_addresses)

Private Attributes

ACE_TCHARnet_if_
 The NIC used to subscribe for multicast traffic.
Subscriptions subscriptions_
 List of multicast addresses we subscribe to and dgrams we use.
TAO_ECG_Dgram_Handlerreceiver_
 We callback to this object when a message arrives.
CORBA::ULong recvbuf_size_
 SOCKbuf size.
TAO_EC_Servant_Var< Observerobserver_
TAO_EC_Auto_Command< Observer_Disconnect_Commandauto_observer_disconnect_

Friends

class Observer
 Make update_consumer () accessible to Observer.

Detailed Description

Event Handler for Mcast messages. NOT THREAD-SAFE.

This object acts as an Observer to Event Channel. It subscribes to multicast groups that carry events matching the EC's subscriptions. This object then receives callbacks from the Reactor when data is available on the mcast sockets and alerts TAO_ECG_Dgram_Handler, which reads the data, transforms it into event and pushes to the Event Channel.


Member Typedef Documentation

typedef ACE_Unbounded_Set<ACE_INET_Addr> TAO_ECG_Mcast_EH::Address_Set [private]
 

typedef ACE_Array_Base<Subscription> TAO_ECG_Mcast_EH::Subscriptions [private]
 


Constructor & Destructor Documentation

TAO_ECG_Mcast_EH::TAO_ECG_Mcast_EH TAO_ECG_Dgram_Handler recv,
const ACE_TCHAR net_if = 0,
CORBA::ULong  buf_sz = 0
 

Constructor. Messages received by this EH will be forwarded to the recv. net_if can be used to specify NIC where multicast messages are expected. would be used to alter the default buffer size.

See comments for receiver_ data member on why raw pointer is used for the recv argument.

TAO_ECG_Mcast_EH::~TAO_ECG_Mcast_EH void   )  [virtual]
 

Destructor.


Member Function Documentation

void TAO_ECG_Mcast_EH::add_new_subscriptions Address_Set multicast_addresses  )  [private]
 

Parameters:
multicast_addresses List of multicast addresses to which we need to subscribe to in order to be receiving all event types in the current consumer subscriptions.

void TAO_ECG_Mcast_EH::compute_required_subscriptions const RtecEventChannelAdmin::ConsumerQOS sub,
Address_Set &multicast_addresses  ACE_ENV_ARG_DECL
throw (CORBA::SystemException) [private]
 

Parameters:
sub The list of event types that our event channel consumers are interested in.
multicast_addresses This method populates this list with multicast addresses that we need to be subscribed to in order to receive event types specified in /a sub.
Exceptions:
CORBA::SystemException This method needs to perform several CORBA invocations, and it propagates any exceptions back to the caller.

int TAO_ECG_Mcast_EH::delete_unwanted_subscriptions Address_Set multicast_addresses  )  [private]
 

Parameters:
multicast_addresses List of multicast addresses we need to be subscribed to in order receive all event types in the current consumer subscriptions.

int TAO_ECG_Mcast_EH::handle_input ACE_HANDLE  fd  )  [virtual]
 

Reactor callback. Notify receiver_ that a dgram corresponding to fd is ready for reading.

Reimplemented from ACE_Event_Handler.

void TAO_ECG_Mcast_EH::open RtecEventChannelAdmin::EventChannel_ptr ec  ACE_ENV_ARG_DECL_WITH_DEFAULTS  ) 
 

Register for changes in the EC subscription list. When the subscription list becomes non-empty we join the proper multicast groups (using Dgram_Handler to translate between event types and mcast groups) and the class registers itself with the reactor.

To insure proper resource clean up, if open () is successful, the user MUST call shutdown () when handler is no longer needed (and its reactor still exists).

int TAO_ECG_Mcast_EH::shutdown void   )  [virtual]
 

TAO_ECG_Handler_Shutdown method.

Remove ourselves from the event channel, unsubscribe from the multicast groups, close the sockets and deregister from the reactor.

Implements TAO_ECG_Handler_Shutdown.

void TAO_ECG_Mcast_EH::update_consumer const RtecEventChannelAdmin::ConsumerQOS &sub  ACE_ENV_ARG_DECL  )  throw (CORBA::SystemException) [private]
 

The Observer method. Subscribe/unsubscribe to multicast groups according to changes in consumer subscriptions.


Friends And Related Function Documentation

friend class Observer [friend]
 

Make update_consumer () accessible to Observer.


Member Data Documentation

TAO_EC_Auto_Command<Observer_Disconnect_Command> TAO_ECG_Mcast_EH::auto_observer_disconnect_ [private]
 

Manages connection of our observer to the Event Channel. ORDER DEPENDENCY: this member should be declared AFTER <observer_>.

ACE_TCHAR* TAO_ECG_Mcast_EH::net_if_ [private]
 

The NIC used to subscribe for multicast traffic.

TAO_EC_Servant_Var<Observer> TAO_ECG_Mcast_EH::observer_ [private]
 

Event Channel Observer. Detects changes in EC consumer subscriptions. ORDER DEPENDENCY: this member should be declared before <auto_observer_disconnect_>.

TAO_ECG_Dgram_Handler* TAO_ECG_Mcast_EH::receiver_ [private]
 

We callback to this object when a message arrives.

CORBA::ULong TAO_ECG_Mcast_EH::recvbuf_size_ [private]
 

SOCKbuf size.

Subscriptions TAO_ECG_Mcast_EH::subscriptions_ [private]
 

List of multicast addresses we subscribe to and dgrams we use.


The documentation for this class was generated from the following files:
Generated on Sat Aug 6 03:31:16 2005 for TAO_RTEvent by  doxygen 1.3.9.1