Main Page   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Namespace Members   Compound Members   File Members   Related Pages  

ACE_ConsumerQOS_Factory Class Reference

Consumer QOS Factory. More...

#include <Event_Utilities.h>

Collaboration diagram for ACE_ConsumerQOS_Factory:

Collaboration graph
[legend]
List of all members.

Public Methods

 ACE_ConsumerQOS_Factory (TAO_EC_Event_Initializer initializer=0)
 Default construction.

 ~ACE_ConsumerQOS_Factory (void)
 Death and destruction.

int start_conjunction_group (int nchildren=0)
int start_disjunction_group (int nchildren=0)
int start_logical_and_group (int nchildren=0)
int start_negation (void)
int start_bitmask (CORBA::ULong source_mask, CORBA::ULong type_mask)
int insert_bitmasked_value (CORBA::ULong source_mask, CORBA::ULong type_mask, CORBA::ULong source_value, CORBA::ULong type_value)
int insert_null_terminator (void)
 Insert a node that accepts any event, useful for bitmask filters.

int insert (const RtecEventChannelAdmin::Dependency &subscribe)
int insert (RtecEventComm::EventSourceID source, RtecEventComm::EventType type, RtecBase::handle_t rt_info)
int insert_type (RtecEventComm::EventType type, RtecBase::handle_t rt_info)
 Insert type-only dependency.

int insert_source (RtecEventComm::EventSourceID source, RtecBase::handle_t rt_info)
 Insert source-only dependency.

int insert_time (RtecEventComm::EventType type, RtecEventComm::Time interval, RtecBase::handle_t rt_info)
int insert_act (RtecEventComm::EventData act)
 This will be inserted as type ACE_ES_EVENT_ACT.

const RtecEventChannelAdmin::ConsumerQOSget_ConsumerQOS (void)
 operator const RtecEventChannelAdmin::ConsumerQOS & (void)
 Calls this->get_ConsumerQOS.


Static Public Methods

void debug (const RtecEventChannelAdmin::ConsumerQOS &qos)

Private Attributes

RtecEventChannelAdmin::ConsumerQOS qos_
 The representation to be sent to the channel.

int designator_set_
TAO_EC_Event_Initializer event_initializer_

Detailed Description

Consumer QOS Factory.

This class allows easy (free from CORBA IDL constraints) construction of RtecEventChannelAdmin::ConsumerQOS structures. = CORRELATIONS ACE_ConsumerQOS_Factory separates subscriptions into conjunction and disjunction groups. A group can be thought of as a set of events inside parenthesis: (A+B+C), where A,B, and C are events. The following code would be used to represent (A+B) | (B+C): ACE_ConsumerQOS_Factor factory; factory.start_conjunction_group (); factory.insert (A); factory.insert (B); factory.start_conjunction_group (); factory.insert (B); factory.insert (C); The following code would be used to represent (A|B) | (B|C): ACE_ConsumerQOS_Factor factory; factory.start_disjunction_group (); factory.insert (A); factory.insert (B); factory.start_disjunction_group (); factory.insert (B); factory.insert (C); First, this may not seem to be initially useful, as (A|B) | (B|C) seems the same as A|B|C. However, this form does have a significant use when deadline timers are specified (described below). Note that groups end with the next call to start_XX_group. Groups are always OR'd together. That is, there is no way to directly build (A|B|C) + (D|E|F). You can always expand the previous statement to the OR of multiple ANDs. = TIMEOUTS There are two types of timeout types defined in Event_Service_Constants.h. ACE_ES_EVENT_INTERVAL_TIMEOUT - the consumer wants to receive a timeout every N seconds. ACE_ES_EVENT_DEADLINE_TIMEOUT - the consumer wants the timeout if and only if some dependencies are not resolved first. Using these timeouts with the correlations discussed above, we can construct four different timer semantics: Interval Timer, Deadline Timer, Interval Correlation, Deadline Correlation: Interval Timer: (A+B+C) | (D+E+F) | (G+H+I) | IntervalTimeout This registers to receive an interval timeout regardless of other dependencies. Event if events occur, the interval timeout will still be sent. Deadline Timer: (A+B+C) | (D+E+F) | (G+H+I) | DeadlineTimeout This registers to receive the deadline timeout ONLY if no other events occur. If a single event is sent to the consumer, the timer is cancelled and rescheduled. Deadline Correlation: (A+B+C) | (D+E+F) | (G+H+DeadlineTimeout) If G and H do not occur within DeadlineTimeout time, a deadline timeout is sent. It is cancelled and rescheduled if G and H occur. Interval Correlation: (A+B+C) | (D+E+F) | (G+H+IntervalTimeout) G+H+IntervalTimeout are sent ONLY after all have occurred. If G+H occur, they are queued until IntervalTimeout occurs. If IntervalTimeout occurs, it is queued until G+H occur.


Constructor & Destructor Documentation

ACE_ConsumerQOS_Factory::ACE_ConsumerQOS_Factory TAO_EC_Event_Initializer    initializer = 0
 

Default construction.

ACE_ConsumerQOS_Factory::~ACE_ConsumerQOS_Factory void   
 

Death and destruction.


Member Function Documentation

void ACE_ConsumerQOS_Factory::debug const RtecEventChannelAdmin::ConsumerQOS   qos [static]
 

ACE_INLINE const RtecEventChannelAdmin::ConsumerQOS & ACE_ConsumerQOS_Factory::get_ConsumerQOS void   
 

Allows conversions to ConsumerQOS, which is expected by the PushSupplierProxy::connect_push_consumer interface.

ACE_INLINE int ACE_ConsumerQOS_Factory::insert RtecEventComm::EventSourceID    source,
RtecEventComm::EventType    type,
RtecBase::handle_t    rt_info
 

Insert source/type dependency. source of the event (may be zero), type of the event. rt_info describes the method that will handle the source/type events.

int ACE_ConsumerQOS_Factory::insert const RtecEventChannelAdmin::Dependency   subscribe
 

Insert the subscribe structure describing the event and receiving method into the current group.

ACE_INLINE int ACE_ConsumerQOS_Factory::insert_act RtecEventComm::EventData    act
 

This will be inserted as type ACE_ES_EVENT_ACT.

ACE_INLINE int ACE_ConsumerQOS_Factory::insert_bitmasked_value CORBA::ULong    source_mask,
CORBA::ULong    type_mask,
CORBA::ULong    source_value,
CORBA::ULong    type_value
 

Inser a new filter that only accepts events with the following properties: (event.header.type & type_mask) == type_value (event.header.source & source_mask) == source_value

ACE_INLINE int ACE_ConsumerQOS_Factory::insert_null_terminator void   
 

Insert a node that accepts any event, useful for bitmask filters.

ACE_INLINE int ACE_ConsumerQOS_Factory::insert_source RtecEventComm::EventSourceID    source,
RtecBase::handle_t    rt_info
 

Insert source-only dependency.

ACE_INLINE int ACE_ConsumerQOS_Factory::insert_time RtecEventComm::EventType    type,
RtecEventComm::Time    interval,
RtecBase::handle_t    rt_info
 

Register temporal dependency. type designates interval or deadline timeout that will occur every interval.

ACE_INLINE int ACE_ConsumerQOS_Factory::insert_type RtecEventComm::EventType    type,
RtecBase::handle_t    rt_info
 

Insert type-only dependency.

ACE_INLINE ACE_ConsumerQOS_Factory::operator const RtecEventChannelAdmin::ConsumerQOS & void   
 

Calls this->get_ConsumerQOS.

int ACE_ConsumerQOS_Factory::start_bitmask CORBA::ULong    source_mask,
CORBA::ULong    type_mask
 

Insert a bitmask filter, this acts as a quick rejection mechanism for the subsequent filters.

int ACE_ConsumerQOS_Factory::start_conjunction_group int    nchildren = 0
 

The Event Channel waits until all the children have accepted at least one event, and then send them all as a single event to the consumer.

int ACE_ConsumerQOS_Factory::start_disjunction_group int    nchildren = 0
 

The consumer accepts any event that is accepted by at least one child.

int ACE_ConsumerQOS_Factory::start_logical_and_group int    nchildren = 0
 

The consumer only accepts events that pass all the filter expressions defined by the children.

int ACE_ConsumerQOS_Factory::start_negation void   
 

The consumer wants all the events *except* the group that follows.


Member Data Documentation

int ACE_ConsumerQOS_Factory::designator_set_ [private]
 

Whether a start_XX_group has been called yet. This is to make sure that a designator is placed in the subscription list first.

TAO_EC_Event_Initializer ACE_ConsumerQOS_Factory::event_initializer_ [private]
 

If not zero this is a user-provided function used to initialize the events. When the event contains unions this is required to avoid marshaling and demarshaling of default initialized unions that (AFAIK) is not CORBA compliant.

RtecEventChannelAdmin::ConsumerQOS ACE_ConsumerQOS_Factory::qos_ [private]
 

The representation to be sent to the channel.


The documentation for this class was generated from the following files:
Generated on Thu Jan 15 00:24:34 2004 for TAO_RTEvent by doxygen1.2.18