TAO_RTEvent 4.0.4
Loading...
Searching...
No Matches
Public Member Functions | Static Public Member Functions | Private Attributes | List of all members
ACE_ConsumerQOS_Factory Class Reference

Consumer QOS Factory. More...

#include <Event_Utilities.h>

Collaboration diagram for ACE_ConsumerQOS_Factory:
Collaboration graph
[legend]

Public Member Functions

 ACE_ConsumerQOS_Factory (TAO_EC_Event_Initializer initializer=0, CORBA::ULong qos_max_len=0)
 Default construction.
 
 ~ACE_ConsumerQOS_Factory ()
 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 ()
 
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 ()
 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 ()
 
 operator const RtecEventChannelAdmin::ConsumerQOS & ()
 Calls this->get_ConsumerQOS.
 

Static Public Member Functions

static 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::ACE_ConsumerQOS_Factory ( TAO_EC_Event_Initializer initializer = 0,
CORBA::ULong qos_max_len = 0 )

Default construction.

◆ ~ACE_ConsumerQOS_Factory()

ACE_ConsumerQOS_Factory::~ACE_ConsumerQOS_Factory ( )

Death and destruction.

Member Function Documentation

◆ debug()

void ACE_ConsumerQOS_Factory::debug ( const RtecEventChannelAdmin::ConsumerQOS & qos)
static

◆ get_ConsumerQOS()

const RtecEventChannelAdmin::ConsumerQOS & ACE_ConsumerQOS_Factory::get_ConsumerQOS ( )

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

◆ insert() [1/2]

int ACE_ConsumerQOS_Factory::insert ( const RtecEventChannelAdmin::Dependency & subscribe)

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

◆ insert() [2/2]

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.

◆ insert_act()

int ACE_ConsumerQOS_Factory::insert_act ( RtecEventComm::EventData act)

This will be inserted as type ACE_ES_EVENT_ACT.

◆ insert_bitmasked_value()

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

◆ insert_null_terminator()

int ACE_ConsumerQOS_Factory::insert_null_terminator ( )

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

◆ insert_source()

int ACE_ConsumerQOS_Factory::insert_source ( RtecEventComm::EventSourceID source,
RtecBase::handle_t rt_info )

Insert source-only dependency.

◆ insert_time()

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.

◆ insert_type()

int ACE_ConsumerQOS_Factory::insert_type ( RtecEventComm::EventType type,
RtecBase::handle_t rt_info )

Insert type-only dependency.

◆ operator const RtecEventChannelAdmin::ConsumerQOS &()

ACE_ConsumerQOS_Factory::operator const RtecEventChannelAdmin::ConsumerQOS & ( )

Calls this->get_ConsumerQOS.

◆ start_bitmask()

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.

◆ start_conjunction_group()

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.

◆ start_disjunction_group()

int ACE_ConsumerQOS_Factory::start_disjunction_group ( int nchildren = 0)

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

◆ start_logical_and_group()

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.

◆ start_negation()

int ACE_ConsumerQOS_Factory::start_negation ( )

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

Member Data Documentation

◆ designator_set_

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.

◆ event_initializer_

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.

◆ qos_

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: