1
// EC_Per_Supplier_Filter.cpp,v 1.21 2003/06/26 17:34:38 jwillemsen Exp
3
#include "EC_Per_Supplier_Filter.h"
4
#include "EC_Event_Channel_Base.h"
5
#include "EC_ProxySupplier.h"
6
#include "EC_ProxyConsumer.h"
7
#include "EC_Scheduling_Strategy.h"
8
#include "EC_QOS_Info.h"
10
#include "orbsvcs/ESF/ESF_Proxy_Collection.h"
12
#include "orbsvcs/Event_Service_Constants.h"
14
#if ! defined (__ACE_INLINE__)
15
#include "EC_Per_Supplier_Filter.i"
16
#endif /* __ACE_INLINE__ */
18
ACE_RCSID(Event, EC_Per_Supplier_Filter, "EC_Per_Supplier_Filter.cpp,v 1.21 2003/06/26 17:34:38 jwillemsen Exp")
20
TAO_EC_Per_Supplier_Filter::
21
TAO_EC_Per_Supplier_Filter (TAO_EC_Event_Channel_Base* ec)
22
: event_channel_ (ec),
26
this->event_channel_->create_proxy_collection (this->collection_);
29
TAO_EC_Per_Supplier_Filter::~TAO_EC_Per_Supplier_Filter (void)
31
this->event_channel_->destroy_proxy_collection (this->collection_);
32
this->collection_ = 0;
36
TAO_EC_Per_Supplier_Filter::bind (TAO_EC_ProxyPushConsumer* consumer)
38
ACE_GUARD (TAO_SYNCH_MUTEX, ace_mon, this->lock_);
40
if (this->consumer_ != 0)
43
this->consumer_ = consumer;
47
TAO_EC_Per_Supplier_Filter::unbind (TAO_EC_ProxyPushConsumer* consumer)
49
ACE_GUARD (TAO_SYNCH_MUTEX, ace_mon, this->lock_);
51
if (this->consumer_ == 0 || this->consumer_ != consumer)
58
this->shutdown (ACE_ENV_SINGLE_ARG_PARAMETER);
63
// @@ Ignore exceptions
69
TAO_EC_Per_Supplier_Filter::connected (TAO_EC_ProxyPushSupplier* supplier
72
ACE_GUARD (TAO_SYNCH_MUTEX, ace_mon, this->lock_);
74
if (this->consumer_ == 0)
77
const RtecEventChannelAdmin::SupplierQOS& pub =
78
this->consumer_->publications_i ();
80
for (CORBA::ULong j = 0; j < pub.publications.length (); ++j)
82
const RtecEventComm::Event& event =
83
pub.publications[j].event;
85
#if TAO_EC_ENABLE_DEBUG_MESSAGES
86
ACE_DEBUG ((LM_DEBUG, "Connecting consumer <%x> to <%x>, "
87
"trying event <%d:%d> ",
89
event.header.source, event.header.type));
90
#endif /* TAO_EC_ENABLED_DEBUG_MESSAGES */
91
if (supplier->can_match (event.header))
93
#if TAO_EC_ENABLE_DEBUG_MESSAGES
94
ACE_DEBUG ((LM_DEBUG, " matched\n"));
95
#endif /* TAO_EC_ENABLED_DEBUG_MESSAGES */
96
this->collection_->connected (supplier ACE_ENV_ARG_PARAMETER);
100
#if TAO_EC_ENABLE_DEBUG_MESSAGES
101
ACE_DEBUG ((LM_DEBUG, " not matched\n"));
102
#endif /* TAO_EC_ENABLED_DEBUG_MESSAGES */
107
TAO_EC_Per_Supplier_Filter::reconnected (TAO_EC_ProxyPushSupplier* supplier
110
ACE_GUARD (TAO_SYNCH_MUTEX, ace_mon, this->lock_);
112
if (this->consumer_ == 0)
115
const RtecEventChannelAdmin::SupplierQOS& pub =
116
this->consumer_->publications_i ();
118
for (CORBA::ULong j = 0; j < pub.publications.length (); ++j)
120
const RtecEventComm::Event& event =
121
pub.publications[j].event;
123
// ACE_DEBUG ((LM_DEBUG, "Trying %d:%d in %x\n",
124
// event.header.source, event.header.type,
126
if (supplier->can_match (event.header))
128
// ACE_DEBUG ((LM_DEBUG, " matched %x\n", supplier));
129
this->collection_->connected (supplier ACE_ENV_ARG_PARAMETER);
134
this->collection_->disconnected (supplier ACE_ENV_ARG_PARAMETER);
138
TAO_EC_Per_Supplier_Filter::disconnected (TAO_EC_ProxyPushSupplier* supplier
141
this->collection_->disconnected (supplier ACE_ENV_ARG_PARAMETER);
145
TAO_EC_Per_Supplier_Filter::shutdown (ACE_ENV_SINGLE_ARG_DECL)
147
this->collection_->shutdown (ACE_ENV_SINGLE_ARG_PARAMETER);
151
TAO_EC_Per_Supplier_Filter::push (const RtecEventComm::EventSet& event,
152
TAO_EC_ProxyPushConsumer *consumer
155
TAO_EC_Scheduling_Strategy* scheduling_strategy =
156
this->event_channel_->scheduling_strategy ();
157
scheduling_strategy->schedule_event (event,
160
ACE_ENV_ARG_PARAMETER);
164
TAO_EC_Per_Supplier_Filter::push_scheduled_event (RtecEventComm::EventSet &event,
165
const TAO_EC_QOS_Info &event_info
168
TAO_EC_Filter_Worker worker (event, event_info);
169
this->collection_->for_each (&worker ACE_ENV_ARG_PARAMETER);
173
TAO_EC_Per_Supplier_Filter::_incr_refcnt (void)
175
ACE_GUARD_RETURN (TAO_SYNCH_MUTEX, ace_mon, this->lock_, 0);
178
return this->refcnt_;
182
TAO_EC_Per_Supplier_Filter::_decr_refcnt (void)
185
ACE_GUARD_RETURN (TAO_SYNCH_MUTEX, ace_mon, this->lock_, 0);
188
if (this->refcnt_ != 0)
189
return this->refcnt_;
191
this->event_channel_->supplier_filter_builder ()->destroy (this);
195
// ****************************************************************
197
TAO_EC_Supplier_Filter*
198
TAO_EC_Per_Supplier_Filter_Builder::create (
199
RtecEventChannelAdmin::SupplierQOS&)
201
return new TAO_EC_Per_Supplier_Filter (this->event_channel_);
205
TAO_EC_Per_Supplier_Filter_Builder::destroy (
206
TAO_EC_Supplier_Filter* x)