diff options
Diffstat (limited to 'TAO/orbsvcs/tests/Event/Basic/Wildcard.cpp')
-rw-r--r-- | TAO/orbsvcs/tests/Event/Basic/Wildcard.cpp | 479 |
1 files changed, 245 insertions, 234 deletions
diff --git a/TAO/orbsvcs/tests/Event/Basic/Wildcard.cpp b/TAO/orbsvcs/tests/Event/Basic/Wildcard.cpp index 707257855c7..78b57c87ed0 100644 --- a/TAO/orbsvcs/tests/Event/Basic/Wildcard.cpp +++ b/TAO/orbsvcs/tests/Event/Basic/Wildcard.cpp @@ -9,240 +9,6 @@ ACE_RCSID(EC_Tests, Wildcard, "$Id$") -#if defined (ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION) -template class ACE_PushConsumer_Adapter<Supplier>; -#elif defined(ACE_HAS_TEMPLATE_INSTANTIATION_PRAGMA) -#pragma instantiate ACE_PushConsumer_Adapter<Supplier> -#endif /* ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION */ - -Consumer::Consumer (const char* name) - : event_count (0), - name_ (name) -{ -} - -void -Consumer::connect (RtecEventChannelAdmin::ConsumerAdmin_ptr consumer_admin, - const RtecEventChannelAdmin::ConsumerQOS &qos, - CORBA::Environment &ACE_TRY_ENV) -{ - // The canonical protocol to connect to the EC - - RtecEventComm::PushConsumer_var consumer = - this->_this (ACE_TRY_ENV); - ACE_CHECK; - - this->supplier_proxy_ = - consumer_admin->obtain_push_supplier (ACE_TRY_ENV); - ACE_CHECK; - - this->supplier_proxy_->connect_push_consumer (consumer.in (), - qos, - ACE_TRY_ENV); - ACE_CHECK; -} - -void -Consumer::disconnect (CORBA::Environment &ACE_TRY_ENV) -{ - this->supplier_proxy_->disconnect_push_supplier (ACE_TRY_ENV); - ACE_CHECK; - - PortableServer::POA_var consumer_poa = - this->_default_POA (ACE_TRY_ENV); - ACE_CHECK; - PortableServer::ObjectId_var consumer_id = - consumer_poa->servant_to_id (this, ACE_TRY_ENV); - ACE_CHECK; - consumer_poa->deactivate_object (consumer_id.in (), ACE_TRY_ENV); - ACE_CHECK; -} - -void -Consumer::dump_results (int expected_count, int tolerance) -{ - int diff = this->event_count - expected_count; - if (diff > tolerance || diff < -tolerance) - { - ACE_DEBUG ((LM_DEBUG, - "ERROR - %s unexpected number of events <%d>\n", - this->name_, - this->event_count)); - } - else - { - ACE_DEBUG ((LM_DEBUG, - "%s - number of events <%d> within margins\n", - this->name_, - this->event_count)); - } -} - -void -Consumer::push (const RtecEventComm::EventSet& events, - CORBA::Environment &) - ACE_THROW_SPEC ((CORBA::SystemException)) -{ - if (events.length () == 0) - { - ACE_DEBUG ((LM_DEBUG, - "%s (%P|%t) no events\n", this->name_)); - return; - } - - this->event_count ++; -#if 0 - if (this->event_count % 10 == 0) - { - ACE_DEBUG ((LM_DEBUG, - "%s (%P|%t): %d events received\n", - this->name_, - this->event_count)); - } -#endif /* 0 */ -} - -void -Consumer::disconnect_push_consumer (CORBA::Environment &) - ACE_THROW_SPEC ((CORBA::SystemException)) -{ -} - -Supplier::Supplier (void) - : consumer_adapter_ (this), - event_source_ (-1), - event_type_ (ACE_ES_EVENT_UNDEFINED) -{ -} - -void -Supplier::connect (RtecEventChannelAdmin::EventChannel_ptr event_channel, - int milliseconds, - int published_source, - int published_type, - int event_source, - int event_type, - CORBA::Environment &ACE_TRY_ENV) -{ - this->event_source_ = event_source; - this->event_type_ = event_type; - - // The canonical protocol to connect to the EC - RtecEventChannelAdmin::ConsumerAdmin_var consumer_admin = - event_channel->for_consumers (ACE_TRY_ENV); - ACE_CHECK; - - RtecEventComm::PushConsumer_var consumer = - this->consumer_adapter_._this (ACE_TRY_ENV); - ACE_CHECK; - - this->supplier_proxy_ = - consumer_admin->obtain_push_supplier (ACE_TRY_ENV); - ACE_CHECK; - - // Let's say that the execution time for event 2 is 1 - // milliseconds... - ACE_Time_Value tv (0, milliseconds * 1000); - TimeBase::TimeT time; - ORBSVCS_Time::Time_Value_to_TimeT (time, tv); - - ACE_ConsumerQOS_Factory consumer_qos; - consumer_qos.start_disjunction_group (); - consumer_qos.insert_time (ACE_ES_EVENT_INTERVAL_TIMEOUT, - time, - 0); - - this->supplier_proxy_->connect_push_consumer (consumer.in (), - consumer_qos.get_ConsumerQOS (), - ACE_TRY_ENV); - ACE_CHECK; - - RtecEventChannelAdmin::SupplierAdmin_var supplier_admin = - event_channel->for_suppliers (ACE_TRY_ENV); - ACE_CHECK; - - RtecEventComm::PushSupplier_var supplier = - this->_this (ACE_TRY_ENV); - ACE_CHECK; - - this->consumer_proxy_ = - supplier_admin->obtain_push_consumer (ACE_TRY_ENV); - ACE_CHECK; - - ACE_SupplierQOS_Factory supplier_qos; - supplier_qos.insert (published_source, - published_type, - 0, 1); - - this->consumer_proxy_->connect_push_supplier (supplier.in (), - supplier_qos.get_SupplierQOS (), - ACE_TRY_ENV); - ACE_CHECK; -} - -void -Supplier::disconnect (CORBA::Environment &ACE_TRY_ENV) -{ - this->supplier_proxy_->disconnect_push_supplier (ACE_TRY_ENV); - ACE_CHECK; - - PortableServer::POA_var consumer_poa = - this->consumer_adapter_._default_POA (ACE_TRY_ENV); - ACE_CHECK; - PortableServer::ObjectId_var consumer_id = - consumer_poa->servant_to_id (&this->consumer_adapter_, ACE_TRY_ENV); - ACE_CHECK; - consumer_poa->deactivate_object (consumer_id.in (), ACE_TRY_ENV); - ACE_CHECK; - - this->consumer_proxy_->disconnect_push_consumer (ACE_TRY_ENV); - ACE_CHECK; - - PortableServer::POA_var supplier_poa = - this->_default_POA (ACE_TRY_ENV); - ACE_CHECK; - PortableServer::ObjectId_var supplier_id = - supplier_poa->servant_to_id (this, ACE_TRY_ENV); - ACE_CHECK; - supplier_poa->deactivate_object (supplier_id.in (), ACE_TRY_ENV); - ACE_CHECK; -} - -void -Supplier::push (const RtecEventComm::EventSet&, - CORBA::Environment &ACE_TRY_ENV) - ACE_THROW_SPEC ((CORBA::SystemException)) -{ - RtecEventComm::EventSet event (1); - event.length (1); - event[0].header.source = this->event_source_; - event[0].header.type = this->event_type_; - - this->consumer_proxy_->push (event, ACE_TRY_ENV); - -#if 0 - static int event_count = 0; - event_count++; - if (event_count % 10 == 0) - { - ACE_DEBUG ((LM_DEBUG, - "Supplier (%P|%t): %d events sent\n", - event_count)); - } -#endif /* 0 */ -} - -void -Supplier::disconnect_push_consumer (CORBA::Environment &) - ACE_THROW_SPEC ((CORBA::SystemException)) -{ -} - -void -Supplier::disconnect_push_supplier (CORBA::Environment &) - ACE_THROW_SPEC ((CORBA::SystemException)) -{ -} int main (int argc, char* argv[]) { @@ -491,3 +257,248 @@ main (int argc, char* argv[]) ACE_ENDTRY; return 0; } + +// **************************************************************** + +Consumer::Consumer (const char* name) + : event_count (0), + name_ (name) +{ +} + +void +Consumer::connect (RtecEventChannelAdmin::ConsumerAdmin_ptr consumer_admin, + const RtecEventChannelAdmin::ConsumerQOS &qos, + CORBA::Environment &ACE_TRY_ENV) +{ + // The canonical protocol to connect to the EC + + RtecEventComm::PushConsumer_var consumer = + this->_this (ACE_TRY_ENV); + ACE_CHECK; + + this->supplier_proxy_ = + consumer_admin->obtain_push_supplier (ACE_TRY_ENV); + ACE_CHECK; + + this->supplier_proxy_->connect_push_consumer (consumer.in (), + qos, + ACE_TRY_ENV); + ACE_CHECK; +} + +void +Consumer::disconnect (CORBA::Environment &ACE_TRY_ENV) +{ + this->supplier_proxy_->disconnect_push_supplier (ACE_TRY_ENV); + ACE_CHECK; + + PortableServer::POA_var consumer_poa = + this->_default_POA (ACE_TRY_ENV); + ACE_CHECK; + PortableServer::ObjectId_var consumer_id = + consumer_poa->servant_to_id (this, ACE_TRY_ENV); + ACE_CHECK; + consumer_poa->deactivate_object (consumer_id.in (), ACE_TRY_ENV); + ACE_CHECK; +} + +void +Consumer::dump_results (int expected_count, int tolerance) +{ + int diff = this->event_count - expected_count; + if (diff > tolerance || diff < -tolerance) + { + ACE_DEBUG ((LM_DEBUG, + "ERROR - %s unexpected number of events <%d>\n", + this->name_, + this->event_count)); + } + else + { + ACE_DEBUG ((LM_DEBUG, + "%s - number of events <%d> within margins\n", + this->name_, + this->event_count)); + } +} + +void +Consumer::push (const RtecEventComm::EventSet& events, + CORBA::Environment &) + ACE_THROW_SPEC ((CORBA::SystemException)) +{ + if (events.length () == 0) + { + ACE_DEBUG ((LM_DEBUG, + "%s (%P|%t) no events\n", this->name_)); + return; + } + + this->event_count ++; +#if 0 + if (this->event_count % 10 == 0) + { + ACE_DEBUG ((LM_DEBUG, + "%s (%P|%t): %d events received\n", + this->name_, + this->event_count)); + } +#endif /* 0 */ +} + +void +Consumer::disconnect_push_consumer (CORBA::Environment &) + ACE_THROW_SPEC ((CORBA::SystemException)) +{ +} + +// **************************************************************** + +Supplier::Supplier (void) + : consumer_adapter_ (this), + event_source_ (-1), + event_type_ (ACE_ES_EVENT_UNDEFINED) +{ +} + +void +Supplier::connect (RtecEventChannelAdmin::EventChannel_ptr event_channel, + int milliseconds, + int published_source, + int published_type, + int event_source, + int event_type, + CORBA::Environment &ACE_TRY_ENV) +{ + this->event_source_ = event_source; + this->event_type_ = event_type; + + // The canonical protocol to connect to the EC + RtecEventChannelAdmin::ConsumerAdmin_var consumer_admin = + event_channel->for_consumers (ACE_TRY_ENV); + ACE_CHECK; + + RtecEventComm::PushConsumer_var consumer = + this->consumer_adapter_._this (ACE_TRY_ENV); + ACE_CHECK; + + this->supplier_proxy_ = + consumer_admin->obtain_push_supplier (ACE_TRY_ENV); + ACE_CHECK; + + // Let's say that the execution time for event 2 is 1 + // milliseconds... + ACE_Time_Value tv (0, milliseconds * 1000); + TimeBase::TimeT time; + ORBSVCS_Time::Time_Value_to_TimeT (time, tv); + + ACE_ConsumerQOS_Factory consumer_qos; + consumer_qos.start_disjunction_group (); + consumer_qos.insert_time (ACE_ES_EVENT_INTERVAL_TIMEOUT, + time, + 0); + + this->supplier_proxy_->connect_push_consumer (consumer.in (), + consumer_qos.get_ConsumerQOS (), + ACE_TRY_ENV); + ACE_CHECK; + + RtecEventChannelAdmin::SupplierAdmin_var supplier_admin = + event_channel->for_suppliers (ACE_TRY_ENV); + ACE_CHECK; + + RtecEventComm::PushSupplier_var supplier = + this->_this (ACE_TRY_ENV); + ACE_CHECK; + + this->consumer_proxy_ = + supplier_admin->obtain_push_consumer (ACE_TRY_ENV); + ACE_CHECK; + + ACE_SupplierQOS_Factory supplier_qos; + supplier_qos.insert (published_source, + published_type, + 0, 1); + + this->consumer_proxy_->connect_push_supplier (supplier.in (), + supplier_qos.get_SupplierQOS (), + ACE_TRY_ENV); + ACE_CHECK; +} + +void +Supplier::disconnect (CORBA::Environment &ACE_TRY_ENV) +{ + this->supplier_proxy_->disconnect_push_supplier (ACE_TRY_ENV); + ACE_CHECK; + + PortableServer::POA_var consumer_poa = + this->consumer_adapter_._default_POA (ACE_TRY_ENV); + ACE_CHECK; + PortableServer::ObjectId_var consumer_id = + consumer_poa->servant_to_id (&this->consumer_adapter_, ACE_TRY_ENV); + ACE_CHECK; + consumer_poa->deactivate_object (consumer_id.in (), ACE_TRY_ENV); + ACE_CHECK; + + this->consumer_proxy_->disconnect_push_consumer (ACE_TRY_ENV); + ACE_CHECK; + + PortableServer::POA_var supplier_poa = + this->_default_POA (ACE_TRY_ENV); + ACE_CHECK; + PortableServer::ObjectId_var supplier_id = + supplier_poa->servant_to_id (this, ACE_TRY_ENV); + ACE_CHECK; + supplier_poa->deactivate_object (supplier_id.in (), ACE_TRY_ENV); + ACE_CHECK; +} + +void +Supplier::push (const RtecEventComm::EventSet&, + CORBA::Environment &ACE_TRY_ENV) + ACE_THROW_SPEC ((CORBA::SystemException)) +{ + RtecEventComm::EventSet event (1); + event.length (1); + event[0].header.source = this->event_source_; + event[0].header.type = this->event_type_; + + this->consumer_proxy_->push (event, ACE_TRY_ENV); + +#if 0 + static int event_count = 0; + event_count++; + if (event_count % 10 == 0) + { + ACE_DEBUG ((LM_DEBUG, + "Supplier (%P|%t): %d events sent\n", + event_count)); + } +#endif /* 0 */ +} + +void +Supplier::disconnect_push_consumer (CORBA::Environment &) + ACE_THROW_SPEC ((CORBA::SystemException)) +{ +} + +void +Supplier::disconnect_push_supplier (CORBA::Environment &) + ACE_THROW_SPEC ((CORBA::SystemException)) +{ +} + +// **************************************************************** + +#if defined (ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION) + +template class ACE_PushConsumer_Adapter<Supplier>; + +#elif defined(ACE_HAS_TEMPLATE_INSTANTIATION_PRAGMA) + +#pragma instantiate ACE_PushConsumer_Adapter<Supplier> + +#endif /* ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION */ |