diff options
author | coryan <coryan@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 1999-01-27 02:05:32 +0000 |
---|---|---|
committer | coryan <coryan@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 1999-01-27 02:05:32 +0000 |
commit | da4efba80a21f4af52bb19e3c1dea33b8fc2d7bd (patch) | |
tree | 55118c32e47784bfbedd55c673a94c1cc34b5c49 | |
parent | 64b136bc3a08978caf3017ab2784f5502320f806 (diff) | |
download | ATCD-da4efba80a21f4af52bb19e3c1dea33b8fc2d7bd.tar.gz |
ChangeLogTag:Tue Jan 26 16:24:57 1999 Carlos O'Ryan <coryan@cs.wustl.edu>
-rw-r--r-- | TAO/ChangeLog-99c | 15 | ||||
-rw-r--r-- | TAO/orbsvcs/orbsvcs/Event/EC_Dispatching.cpp | 48 | ||||
-rw-r--r-- | TAO/orbsvcs/orbsvcs/Event/EC_Dispatching.h | 18 | ||||
-rw-r--r-- | TAO/orbsvcs/orbsvcs/Event/EC_Factory.cpp | 13 | ||||
-rw-r--r-- | TAO/orbsvcs/orbsvcs/Event/EC_Filter.cpp | 80 | ||||
-rw-r--r-- | TAO/orbsvcs/orbsvcs/Event/EC_Filter.h | 74 | ||||
-rw-r--r-- | TAO/orbsvcs/orbsvcs/Event/EC_Filter.i | 2 | ||||
-rw-r--r-- | TAO/orbsvcs/orbsvcs/Event/EC_Filter_Builder.cpp | 27 | ||||
-rw-r--r-- | TAO/orbsvcs/orbsvcs/Event/EC_Filter_Builder.h | 10 | ||||
-rw-r--r-- | TAO/orbsvcs/orbsvcs/Event/EC_Filter_Builder.i | 5 | ||||
-rw-r--r-- | TAO/orbsvcs/orbsvcs/Event/EC_ProxySupplier.cpp | 24 | ||||
-rw-r--r-- | TAO/orbsvcs/orbsvcs/Event/EC_ProxySupplier.h | 10 |
12 files changed, 295 insertions, 31 deletions
diff --git a/TAO/ChangeLog-99c b/TAO/ChangeLog-99c index f42d94ad6ad..cc95f835a06 100644 --- a/TAO/ChangeLog-99c +++ b/TAO/ChangeLog-99c @@ -5,6 +5,21 @@ Tue Jan 26 16:24:57 1999 Carlos O'Ryan <coryan@cs.wustl.edu> Added some documentation about the new Event Channel implementation. + * orbsvcs/orbsvcs/Event/EC_Dispatching.cpp: + * orbsvcs/orbsvcs/Event/EC_Dispatching.h: + * orbsvcs/orbsvcs/Event/EC_Factory.cpp: + * orbsvcs/orbsvcs/Event/EC_Filter.cpp: + * orbsvcs/orbsvcs/Event/EC_Filter.h: + * orbsvcs/orbsvcs/Event/EC_Filter.i: + * orbsvcs/orbsvcs/Event/EC_Filter_Builder.cpp: + * orbsvcs/orbsvcs/Event/EC_Filter_Builder.h: + * orbsvcs/orbsvcs/Event/EC_Filter_Builder.i: + * orbsvcs/orbsvcs/Event/EC_ProxySupplier.cpp: + * orbsvcs/orbsvcs/Event/EC_ProxySupplier.h: + Added the implementation of a null filter and the corresponding + filter builder. Also implemented the reactive dispatching + strategy. + Mon Jan 25 17:24:50 1999 Carlos O'Ryan <coryan@cs.wustl.edu> * orbsvcs/orbsvcs/Event/Timer_Module.h: diff --git a/TAO/orbsvcs/orbsvcs/Event/EC_Dispatching.cpp b/TAO/orbsvcs/orbsvcs/Event/EC_Dispatching.cpp new file mode 100644 index 00000000000..52ead5002c8 --- /dev/null +++ b/TAO/orbsvcs/orbsvcs/Event/EC_Dispatching.cpp @@ -0,0 +1,48 @@ +// $Id$ + +#include "EC_Dispatching.h" +#include "EC_ProxySupplier.h" + +#if ! defined (__ACE_INLINE__) +#include "EC_Dispatching.i" +#endif /* __ACE_INLINE__ */ + +ACE_RCSID(Event, EC_Dispatching, "$Id$") + +TAO_EC_Dispatching::~TAO_EC_Dispatching (void) +{ +} + +// **************************************************************** + +TAO_EC_Reactive_Dispatching::TAO_EC_Reactive_Dispatching (void) +{ +} + +void +TAO_EC_Reactive_Dispatching::activate (void) +{ +} + +void +TAO_EC_Reactive_Dispatching::shutdown (void) +{ +} + +void +TAO_EC_Reactive_Dispatching::push (TAO_EC_ProxyPushSupplier* proxy, + const RtecEventComm::EventSet& event, + TAO_EC_QOS_Info& qos_info, + CORBA::Environment& ACE_TRY_ENV) +{ + proxy->consumer ()->push (event, ACE_TRY_ENV); +} + +void +TAO_EC_Reactive_Dispatching::push_nocopy (TAO_EC_ProxyPushSupplier* proxy, + RtecEventComm::EventSet& event, + TAO_EC_QOS_Info& qos_info, + CORBA::Environment& ACE_TRY_ENV) +{ + proxy->consumer ()->push (event, ACE_TRY_ENV); +} diff --git a/TAO/orbsvcs/orbsvcs/Event/EC_Dispatching.h b/TAO/orbsvcs/orbsvcs/Event/EC_Dispatching.h index 126e478b0eb..f4814447695 100644 --- a/TAO/orbsvcs/orbsvcs/Event/EC_Dispatching.h +++ b/TAO/orbsvcs/orbsvcs/Event/EC_Dispatching.h @@ -40,6 +40,7 @@ #endif /* ACE_LACKS_PRAGMA_ONCE */ class TAO_EC_QOS_Info; +class TAO_EC_ProxyPushSupplier; class TAO_EC_Dispatching { @@ -64,8 +65,12 @@ public: virtual void push (TAO_EC_ProxyPushSupplier* proxy, const RtecEventComm::EventSet& event, - const TAO_EC_QOS_Info& qos_info, + TAO_EC_QOS_Info& qos_info, CORBA::Environment& env) = 0; + virtual void push_nocopy (TAO_EC_ProxyPushSupplier* proxy, + RtecEventComm::EventSet& event, + const TAO_EC_QOS_Info& qos_info, + CORBA::Environment& env) = 0; // The consumer represented by <proxy> should receive <event>. // It can use the information in <qos_info> to determine the event // priority (among other things). @@ -83,8 +88,7 @@ class TAO_EC_Reactive_Dispatching // thread to push the event to the consumer. // public: - TAO_EC_Priority_Dispatching (RtecScheduler::Scheduler_ptr - scheduler); + TAO_EC_Reactive_Dispatching (void); // The scheduler is used to find the range of priorities and similar // info. @@ -93,10 +97,12 @@ public: virtual void shutdown (void); virtual void push (TAO_EC_ProxyPushSupplier* proxy, const RtecEventComm::EventSet& event, - const TAO_EC_QOS_Info& qos_info, + TAO_EC_QOS_Info& qos_info, CORBA::Environment& env); - // @@ proxy->consumer ()->push (event, env); - + virtual void push_nocopy (TAO_EC_ProxyPushSupplier* proxy, + RtecEventComm::EventSet& event, + TAO_EC_QOS_Info& qos_info, + CORBA::Environment& env); }; // **************************************************************** diff --git a/TAO/orbsvcs/orbsvcs/Event/EC_Factory.cpp b/TAO/orbsvcs/orbsvcs/Event/EC_Factory.cpp new file mode 100644 index 00000000000..e77c179bdf5 --- /dev/null +++ b/TAO/orbsvcs/orbsvcs/Event/EC_Factory.cpp @@ -0,0 +1,13 @@ +// $Id$ + +#include "EC_Factory.h" + +#if ! defined (__ACE_INLINE__) +#include "EC_Factory.i" +#endif /* __ACE_INLINE__ */ + +ACE_RCSID(Event, EC_Factory, "$Id$") + +TAO_EC_Factory::~TAO_EC_Factory (void) +{ +} diff --git a/TAO/orbsvcs/orbsvcs/Event/EC_Filter.cpp b/TAO/orbsvcs/orbsvcs/Event/EC_Filter.cpp new file mode 100644 index 00000000000..d2558f3c5f3 --- /dev/null +++ b/TAO/orbsvcs/orbsvcs/Event/EC_Filter.cpp @@ -0,0 +1,80 @@ +// $Id$ + +#include "EC_Filter.h" + +#if ! defined (__ACE_INLINE__) +#include "EC_Filter.i" +#endif /* __ACE_INLINE__ */ + +ACE_RCSID(Event, EC_Filter, "$Id$") + +TAO_EC_Filter::~TAO_EC_Filter (void) +{ +} + +void +TAO_EC_Filter::adopt_child (TAO_EC_Filter* child) +{ + child->parent_ = this; +} + +// **************************************************************** + +int +TAO_EC_Null_Filter::filter (const RtecEventComm::EventSet& event, + TAO_EC_QOS_Info& qos_info, + CORBA::Environment& ACE_TRY_ENV) +{ + // This is a leaf, no need to query any children, and we accept all + // events, so push it. + this->push (event, qos_info, ACE_TRY_ENV); + return 1; +} + +int +TAO_EC_Null_Filter::filter_nocopy (RtecEventComm::EventSet& event, + TAO_EC_QOS_Info& qos_info, + CORBA::Environment& ACE_TRY_ENV) +{ + // This is a leaf, no need to query any children, and we accept all + // events, so push it. + this->push_nocopy (event, qos_info, ACE_TRY_ENV); + return 1; +} + +void +TAO_EC_Null_Filter::push (const RtecEventComm::EventSet& event, + TAO_EC_QOS_Info& qos_info, + CORBA::Environment& ACE_TRY_ENV) +{ + if (this->parent () != 0) + this->parent ()->push (event, qos_info, ACE_TRY_ENV); +} + +void +TAO_EC_Null_Filter::push_nocopy (RtecEventComm::EventSet& event, + TAO_EC_QOS_Info& qos_info, + CORBA::Environment& ACE_TRY_ENV) +{ + if (this->parent () != 0) + this->parent ()->push_nocopy (event, qos_info, ACE_TRY_ENV); +} + +void +TAO_EC_Null_Filter::clear (void) +{ + // do nothing +} + +CORBA::ULong +TAO_EC_Null_Filter::max_event_size (void) const +{ + return 0; +} + +void +TAO_EC_Null_Filter::event_ids(TAO_EC_Filter::Headers& headers) +{ + // @@ TODO maybe we should add the AnyType/AnySource header? + // right now we do nothing... +} diff --git a/TAO/orbsvcs/orbsvcs/Event/EC_Filter.h b/TAO/orbsvcs/orbsvcs/Event/EC_Filter.h index 76349661932..c909610dd67 100644 --- a/TAO/orbsvcs/orbsvcs/Event/EC_Filter.h +++ b/TAO/orbsvcs/orbsvcs/Event/EC_Filter.h @@ -65,7 +65,7 @@ public: virtual ~TAO_EC_Filter (void); // destructor... - const TAO_EC_Filter* parent (void) const; + TAO_EC_Filter* parent (void) const; // Obtain the parent of this filter. void adopt_child (TAO_EC_Filter* child); @@ -77,16 +77,26 @@ public: // @@ TODO: strategize this... virtual int filter (const RtecEventComm::EventSet& event, - const TAO_EC_QOS_Info& qos_info, + TAO_EC_QOS_Info& qos_info, CORBA::Environment& env) = 0; + virtual int filter_nocopy (RtecEventComm::EventSet& event, + TAO_EC_QOS_Info& qos_info, + CORBA::Environment& env) = 0; // Filter this event, returns 1 if the event is accepted, 0 // otherwise. + // Notice that there are two versions of the method, if the event is + // not const then filter can take ownership of the event. virtual void push (const RtecEventComm::EventSet& event, - const TAO_EC_QOS_Info& qos_info, + TAO_EC_QOS_Info& qos_info, CORBA::Environment& env) = 0; + virtual void push_nocopy (RtecEventComm::EventSet& event, + TAO_EC_QOS_Info& qos_info, + CORBA::Environment& env) = 0; // This is called by the children when they accept an event and // which to pass it up. + // Notice that there are two versions of the method, if the event is + // not const then filter can take ownership of the event. virtual void clear (void) = 0; // Clear any saved state, must reset and assume no events have been @@ -97,7 +107,7 @@ public: typedef ACE_Array<RtecEventComm::EventHeader> Headers; - virtual void event_ids (Headers& headerset) = 0; + virtual void event_ids (Headers& headers) = 0; // Compute the disjunction of all the event types that could be of // interest for this filter (and its children). @@ -111,8 +121,16 @@ private: class TAO_EC_Null_Filter : public TAO_EC_Filter { // = TITLE + // A null filter // // = DESCRIPTION + // This filter accepts any kind of event, it is useful for the + // implementation: + // a) Consumers that accept all events + // b) Consumers that trust the filtering done at the Supplier + // layer. + // c) Event Channels that don't do filtering (such as CosEC + // backends) // // = MEMORY MANAGMENT // @@ -123,14 +141,20 @@ public: // = The TAO_EC_Filter methods, please check the documentation in // TAO_EC_Filter. virtual int filter (const RtecEventComm::EventSet& event, - const TAO_EC_QOS_Info& qos_info, + TAO_EC_QOS_Info& qos_info, CORBA::Environment& env); + virtual int filter_nocopy (RtecEventComm::EventSet& event, + TAO_EC_QOS_Info& qos_info, + CORBA::Environment& env); virtual void push (const RtecEventComm::EventSet& event, - const TAO_EC_QOS_Info& qos_info, + TAO_EC_QOS_Info& qos_info, CORBA::Environment& env); + virtual void push_nocopy (RtecEventComm::EventSet& event, + TAO_EC_QOS_Info& qos_info, + CORBA::Environment& env); virtual void clear (void); virtual CORBA::ULong max_event_size (void) const; - virtual void event_ids (TAO_EC_Filter::Headers& headerset); + virtual void event_ids (TAO_EC_Filter::Headers& headers); }; // **************************************************************** @@ -148,14 +172,20 @@ public: // = The TAO_EC_Filter methods, please check the documentation in // TAO_EC_Filter. virtual int filter (const RtecEventComm::EventSet& event, - const TAO_EC_QOS_Info& qos_info, + TAO_EC_QOS_Info& qos_info, CORBA::Environment& env); + virtual int filter_nocopy (RtecEventComm::EventSet& event, + TAO_EC_QOS_Info& qos_info, + CORBA::Environment& env); virtual void push (const RtecEventComm::EventSet& event, - const TAO_EC_QOS_Info& qos_info, + TAO_EC_QOS_Info& qos_info, CORBA::Environment& env); + virtual void push_nocopy (RtecEventComm::EventSet& event, + TAO_EC_QOS_Info& qos_info, + CORBA::Environment& env); virtual void clear (void); virtual CORBA::ULong max_event_size (void) const; - virtual void event_ids (TAO_EC_Filter::Headers& headerset); + virtual void event_ids (TAO_EC_Filter::Headers& headers); }; // **************************************************************** @@ -173,14 +203,20 @@ public: // = The TAO_EC_Filter methods, please check the documentation in // TAO_EC_Filter. virtual int filter (const RtecEventComm::EventSet& event, - const TAO_EC_QOS_Info& qos_info, + TAO_EC_QOS_Info& qos_info, CORBA::Environment& env); + virtual int filter_nocopy (RtecEventComm::EventSet& event, + TAO_EC_QOS_Info& qos_info, + CORBA::Environment& env); virtual void push (const RtecEventComm::EventSet& event, - const TAO_EC_QOS_Info& qos_info, + TAO_EC_QOS_Info& qos_info, CORBA::Environment& env); + virtual void push_nocopy (RtecEventComm::EventSet& event, + TAO_EC_QOS_Info& qos_info, + CORBA::Environment& env); virtual void clear (void); virtual CORBA::ULong max_event_size (void) const; - virtual void event_ids (TAO_EC_Filter::Headers& headerset); + virtual void event_ids (TAO_EC_Filter::Headers& headers); }; // **************************************************************** @@ -198,14 +234,20 @@ public: // = The TAO_EC_Filter methods, please check the documentation in // TAO_EC_Filter. virtual int filter (const RtecEventComm::EventSet& event, - const TAO_EC_QOS_Info& qos_info, + TAO_EC_QOS_Info& qos_info, CORBA::Environment& env); + virtual int filter_nocopy (RtecEventComm::EventSet& event, + TAO_EC_QOS_Info& qos_info, + CORBA::Environment& env); virtual void push (const RtecEventComm::EventSet& event, - const TAO_EC_QOS_Info& qos_info, + TAO_EC_QOS_Info& qos_info, CORBA::Environment& env); + virtual void push_nocopy (RtecEventComm::EventSet& event, + TAO_EC_QOS_Info& qos_info, + CORBA::Environment& env); virtual void clear (void); virtual CORBA::ULong max_event_size (void) const; - virtual void event_ids (TAO_EC_Filter::Headers& headerset); + virtual void event_ids (TAO_EC_Filter::Headers& headers); }; // **************************************************************** diff --git a/TAO/orbsvcs/orbsvcs/Event/EC_Filter.i b/TAO/orbsvcs/orbsvcs/Event/EC_Filter.i index 367356df657..4b95832a627 100644 --- a/TAO/orbsvcs/orbsvcs/Event/EC_Filter.i +++ b/TAO/orbsvcs/orbsvcs/Event/EC_Filter.i @@ -6,7 +6,7 @@ TAO_EC_Filter::TAO_EC_Filter (void) { } -ACE_INLINE const TAO_EC_Filter* +ACE_INLINE TAO_EC_Filter* TAO_EC_Filter::parent (void) const { return this->parent_; diff --git a/TAO/orbsvcs/orbsvcs/Event/EC_Filter_Builder.cpp b/TAO/orbsvcs/orbsvcs/Event/EC_Filter_Builder.cpp new file mode 100644 index 00000000000..5600df57453 --- /dev/null +++ b/TAO/orbsvcs/orbsvcs/Event/EC_Filter_Builder.cpp @@ -0,0 +1,27 @@ +// $Id$ + +#include "EC_Filter_Builder.h" +#include "EC_Filter.h" + +#if ! defined (__ACE_INLINE__) +#include "EC_Filter_Builder.i" +#endif /* __ACE_INLINE__ */ + +ACE_RCSID(Event, EC_Filter_Builder, "$Id$") + +TAO_EC_Filter_Builder::~TAO_EC_Filter_Builder (void) +{ +} + +// **************************************************************** + +TAO_EC_Null_Filter_Builder::~TAO_EC_Null_Filter_Builder (void) +{ +} + +TAO_EC_Filter* +TAO_EC_Null_Filter_Builder:: + build (RtecEventChannelAdmin::ConsumerQOS&) const +{ + return new TAO_EC_Null_Filter; +} diff --git a/TAO/orbsvcs/orbsvcs/Event/EC_Filter_Builder.h b/TAO/orbsvcs/orbsvcs/Event/EC_Filter_Builder.h index 1dc92b28c1a..4f03d363efc 100644 --- a/TAO/orbsvcs/orbsvcs/Event/EC_Filter_Builder.h +++ b/TAO/orbsvcs/orbsvcs/Event/EC_Filter_Builder.h @@ -37,6 +37,8 @@ # pragma once #endif /* ACE_LACKS_PRAGMA_ONCE */ +class TAO_EC_Filter; + class TAO_EC_Filter_Builder { // = TITLE @@ -58,19 +60,19 @@ public: // **************************************************************** -class TAO_EC_Default_Filter_Builder +class TAO_EC_Null_Filter_Builder { // = TITLE // A simple implementation of the filter builder. // // = DESCRIPTION - // Defines the default filter builder. + // Simply creates a Null_Filter in every case. // public: - TAO_EC_Default_Filter_Builder (void); + TAO_EC_Null_Filter_Builder (void); // constructor. - virtual ~TAO_EC_Default_Filter_Builder (void); + virtual ~TAO_EC_Null_Filter_Builder (void); // destructor... // = The TAO_EC_Filter_Builder methods... diff --git a/TAO/orbsvcs/orbsvcs/Event/EC_Filter_Builder.i b/TAO/orbsvcs/orbsvcs/Event/EC_Filter_Builder.i index cfa1da318d3..2592a19f93b 100644 --- a/TAO/orbsvcs/orbsvcs/Event/EC_Filter_Builder.i +++ b/TAO/orbsvcs/orbsvcs/Event/EC_Filter_Builder.i @@ -1 +1,6 @@ // $Id$ + +ACE_INLINE +TAO_EC_Null_Filter_Builder::TAO_EC_Null_Filter_Builder (void) +{ +} diff --git a/TAO/orbsvcs/orbsvcs/Event/EC_ProxySupplier.cpp b/TAO/orbsvcs/orbsvcs/Event/EC_ProxySupplier.cpp index 96e0ecd251b..f2f24deb0f0 100644 --- a/TAO/orbsvcs/orbsvcs/Event/EC_ProxySupplier.cpp +++ b/TAO/orbsvcs/orbsvcs/Event/EC_ProxySupplier.cpp @@ -98,15 +98,23 @@ TAO_EC_ProxyPushSupplier::resume_connection (CORBA::Environment &ACE_TRY_ENV) int TAO_EC_ProxyPushSupplier::filter (const RtecEventComm::EventSet& event, - const TAO_EC_QOS_Info& qos_info, + TAO_EC_QOS_Info& qos_info, CORBA::Environment& ACE_TRY_ENV) { return this->child_->filter (event, qos_info, ACE_TRY_ENV); } +int +TAO_EC_ProxyPushSupplier::filter_nocopy (RtecEventComm::EventSet& event, + TAO_EC_QOS_Info& qos_info, + CORBA::Environment& ACE_TRY_ENV) +{ + return this->child_->filter_nocopy (event, qos_info, ACE_TRY_ENV); +} + void TAO_EC_ProxyPushSupplier::push (const RtecEventComm::EventSet& event, - const TAO_EC_QOS_Info& qos_info, + TAO_EC_QOS_Info& qos_info, CORBA::Environment& ACE_TRY_ENV) { this->event_channel_->dispatching ()->push (this, @@ -117,6 +125,18 @@ TAO_EC_ProxyPushSupplier::push (const RtecEventComm::EventSet& event, } void +TAO_EC_ProxyPushSupplier::push_nocopy (RtecEventComm::EventSet& event, + TAO_EC_QOS_Info& qos_info, + CORBA::Environment& ACE_TRY_ENV) +{ + this->event_channel_->dispatching ()->push_nocopy (this, + event, + qos_info, + ACE_TRY_ENV); + this->child_->clear (); +} + +void TAO_EC_ProxyPushSupplier::clear (void) { this->child_->clear (); diff --git a/TAO/orbsvcs/orbsvcs/Event/EC_ProxySupplier.h b/TAO/orbsvcs/orbsvcs/Event/EC_ProxySupplier.h index ab81be2f4c6..eb4f145fcc9 100644 --- a/TAO/orbsvcs/orbsvcs/Event/EC_ProxySupplier.h +++ b/TAO/orbsvcs/orbsvcs/Event/EC_ProxySupplier.h @@ -116,11 +116,17 @@ public: // = The TAO_EC_Filter methods, only push() is implemented... virtual int filter (const RtecEventComm::EventSet& event, - const TAO_EC_QOS_Info& qos_info, + TAO_EC_QOS_Info& qos_info, CORBA::Environment& env); + virtual int filter_nocopy (RtecEventComm::EventSet& event, + TAO_EC_QOS_Info& qos_info, + CORBA::Environment& env); virtual void push (const RtecEventComm::EventSet& event, - const TAO_EC_QOS_Info& qos_info, + TAO_EC_QOS_Info& qos_info, CORBA::Environment& env); + virtual void push_nocopy (RtecEventComm::EventSet& event, + TAO_EC_QOS_Info& qos_info, + CORBA::Environment& env); virtual void clear (void); virtual CORBA::ULong max_event_size (void) const; virtual void event_ids (TAO_EC_Filter::Headers& headerset); |