diff options
Diffstat (limited to 'TAO/orbsvcs/orbsvcs/RtecEventComm.idl')
-rw-r--r-- | TAO/orbsvcs/orbsvcs/RtecEventComm.idl | 175 |
1 files changed, 175 insertions, 0 deletions
diff --git a/TAO/orbsvcs/orbsvcs/RtecEventComm.idl b/TAO/orbsvcs/orbsvcs/RtecEventComm.idl new file mode 100644 index 00000000000..59fe732f592 --- /dev/null +++ b/TAO/orbsvcs/orbsvcs/RtecEventComm.idl @@ -0,0 +1,175 @@ +/** + * @file RtecEventComm.idl + * + * @brief Define the RtecEventComm module + * + * $Id$ + * + * TAO's Real-time Event Service is described in: + * + * http://doc.ece.uci.edu/~coryan/EC/ + * + * @author Carlos O'Ryan <coryan@uci.edu> + * @author Tim Harrison <harrison@cs.wustl.edu> + */ +#ifndef TAO_RTEC_EVENTCOMM_IDL +#define TAO_RTEC_EVENTCOMM_IDL + +#include "TimeBase.idl" + +// Remove the prefix definition... +// @@ TODO Is this the "Right Thing"? AFAIK the spec does not mention +// if pragmas should survive the file scope... +#pragma prefix "" + +#include "RtecDefaultEventData.idl" + +/** + * @namespace RtecEventComm + * + * @brief Interfaces and data structures used by the event service + * clients + */ +module RtecEventComm +{ + /// The event data + typedef RtecEventData EventData; + + /// Shortcut for the time structures. + typedef TimeBase::TimeT Time; + + typedef long EventSourceID; + typedef long _EventType; + + /** + * @struct EventHeader + * + * @brief Define the structure of an event header + * + * The event header is the portion of the event examined by the + * event service for filtering purposes. + * + * Events can be filtered based on their type and SourceID, though + * the latest is a misnomer, over time it has evolved into a 'source + * class' or 'event domain' field, i.e. multiple sources can have + * the same 'ID' and the same source can generate events with + * different IDs. + */ + struct EventHeader + { + /// The event type. + /** + * Notice that the 'type' of the event may or may not be related + * to the data type in its contents. I.e. it is perfectly + * possible to send the same payload with different values in this + * field. In other words, this is just a filterable value, and + * it is up to the application to define (or not) its relation to + * the contents of the event. + */ + _EventType type; + + /// Some way to identify the supplier. + EventSourceID source; + + /// The "Time To Live" counter. + /** + * Each time an EC process the event it decreases the TTL field, + * when it gets to zero the message is no longer forwarded. + */ + long ttl; + + /// Applications can use this field to time-stamp the event at the + /// source. + /** + * @todo Because the filtering language uses EventHeaders as + * filtering expressions (yeah, it sucks) we also use this field + * to pass timeout values into the EC filter. + */ + Time creation_time; + +#ifndef TAO_LACKS_EVENT_CHANNEL_TIMESTAMPS + //@{ + /** @name Benchmarking timestamps + * + * The following timestamps are used to benchmark the Event + * Channel, they should not be used by the application and may be + * removed without notice. + */ + Time ec_recv_time; + Time ec_send_time; + //@} +#endif /* TAO_LACKS_EVENT_CHANNEL_TIMESTAMPS */ + }; + + /** + * @struct Event + * + * @brief The basic events delivered by the Event Service. + * + * The event service uses this structure to pass events around. + */ + struct Event + { + /// The header, used for filtering + EventHeader header; + + /// The payload, the event service treats this as an opaque data + /// field. + EventData data; + }; + /// The real argument to the push() operations. + /** + * For performance reasons TAO's Real-time Event Service uses + * sequences of events + */ + typedef sequence<Event> EventSet; + + /** + * @interface PushConsumer + * + * @brief Define the interface used by consumers to receive events. + * + * Applications usually implement this interface to subscribe for + * events. + */ + interface PushConsumer + { + /// Main event delivery callback + oneway void push (in EventSet data); + + /// Callback method to indicate a disconnection. + /** + * If the event service is destroyed while a consumer is still + * connected then the following callback operation is invoked on + * the consumer. + * + * The same operation is used by suppliers to disconnect from the + * Event Channel, but it is invoked via their + * RtecEventChannelAdmin::ProxyPushConsumer peer. + */ + void disconnect_push_consumer (); + }; + + /** + * @interface PushSupplier + * + * @brief Defines the interface used by suppliers to receive + * callbacks from the Event Channel. + */ + interface PushSupplier + { + /// Callback method to indicate a disconnection. + /** + * If the event service is destroyed while a supplier is still + * connected then the following callback operation is invoked on + * the supplier. + * + * The same operation is used by consumers to disconnect from the + * Event Channel, but it is invoked via their + * RtecEventChannelAdmin::ProxyPushSupplier peer. + */ + void disconnect_push_supplier (); + }; +}; + +#endif /* TAO_RTEC_EVENTCOMM_IDL */ |