diff options
Diffstat (limited to 'TAO/orbsvcs/tests/EC_Custom_Marshal/ECM_Supplier.cpp')
-rw-r--r-- | TAO/orbsvcs/tests/EC_Custom_Marshal/ECM_Supplier.cpp | 206 |
1 files changed, 123 insertions, 83 deletions
diff --git a/TAO/orbsvcs/tests/EC_Custom_Marshal/ECM_Supplier.cpp b/TAO/orbsvcs/tests/EC_Custom_Marshal/ECM_Supplier.cpp index b824e35626d..b21f12ec045 100644 --- a/TAO/orbsvcs/tests/EC_Custom_Marshal/ECM_Supplier.cpp +++ b/TAO/orbsvcs/tests/EC_Custom_Marshal/ECM_Supplier.cpp @@ -7,8 +7,10 @@ #include "tao/Timeprobe.h" #include "orbsvcs/Event_Utilities.h" #include "orbsvcs/Event_Service_Constants.h" +#include "orbsvcs/Scheduler_Factory.h" #include "orbsvcs/Time_Utilities.h" -#include "orbsvcs/CosNamingC.h" +#include "orbsvcs/Sched/Config_Scheduler.h" +#include "orbsvcs/Event/Event_Channel.h" #include "ECM_Supplier.h" #include "ECM_Data.h" @@ -39,12 +41,11 @@ ECMS_Driver::ECMS_Driver (void) int ECMS_Driver::run (int argc, char* argv[]) { - ACE_DECLARE_NEW_CORBA_ENV; - ACE_TRY + TAO_TRY { CORBA::ORB_var orb = - CORBA::ORB_init (argc, argv, "", ACE_TRY_ENV); - ACE_TRY_CHECK; + CORBA::ORB_init (argc, argv, "", TAO_TRY_ENV); + TAO_CHECK_ENV; CORBA::Object_var poa_object = orb->resolve_initial_references("RootPOA"); @@ -54,12 +55,12 @@ ECMS_Driver::run (int argc, char* argv[]) 1); PortableServer::POA_var root_poa = - PortableServer::POA::_narrow (poa_object.in (), ACE_TRY_ENV); - ACE_TRY_CHECK; + PortableServer::POA::_narrow (poa_object.in (), TAO_TRY_ENV); + TAO_CHECK_ENV; PortableServer::POAManager_var poa_manager = - root_poa->the_POAManager (ACE_TRY_ENV); - ACE_TRY_CHECK; + root_poa->the_POAManager (TAO_TRY_ENV); + TAO_CHECK_ENV; if (this->parse_args (argc, argv)) return 1; @@ -124,35 +125,38 @@ ECMS_Driver::run (int argc, char* argv[]) 1); CosNaming::NamingContext_var naming_context = - CosNaming::NamingContext::_narrow (naming_obj.in (), ACE_TRY_ENV); - ACE_TRY_CHECK; + CosNaming::NamingContext::_narrow (naming_obj.in (), TAO_TRY_ENV); + TAO_CHECK_ENV; + + if (ACE_Scheduler_Factory::use_config (naming_context.in ()) == -1) + return -1; CosNaming::Name name (1); name.length (1); name[0].id = CORBA::string_dup ("EventService"); CORBA::Object_var ec_obj = - naming_context->resolve (name, ACE_TRY_ENV); - ACE_TRY_CHECK; + naming_context->resolve (name, TAO_TRY_ENV); + TAO_CHECK_ENV; RtecEventChannelAdmin::EventChannel_var channel; if (CORBA::is_nil (ec_obj.in ())) channel = RtecEventChannelAdmin::EventChannel::_nil (); else channel = RtecEventChannelAdmin::EventChannel::_narrow (ec_obj.in (), - ACE_TRY_ENV); - ACE_TRY_CHECK; + TAO_TRY_ENV); + TAO_CHECK_ENV; - poa_manager->activate (ACE_TRY_ENV); - ACE_TRY_CHECK; + poa_manager->activate (TAO_TRY_ENV); + TAO_CHECK_ENV; - this->connect_suppliers (channel.in (), ACE_TRY_ENV); - ACE_TRY_CHECK; + this->connect_suppliers (channel.in (), TAO_TRY_ENV); + TAO_CHECK_ENV; ACE_DEBUG ((LM_DEBUG, "connected supplier(s)\n")); - this->activate_suppliers (ACE_TRY_ENV); - ACE_TRY_CHECK; + this->activate_suppliers (TAO_TRY_ENV); + TAO_CHECK_ENV; ACE_DEBUG ((LM_DEBUG, "suppliers are active\n")); @@ -165,20 +169,20 @@ ECMS_Driver::run (int argc, char* argv[]) ACE_DEBUG ((LM_DEBUG, "suppliers finished\n")); - this->disconnect_suppliers (ACE_TRY_ENV); - ACE_TRY_CHECK; + this->disconnect_suppliers (TAO_TRY_ENV); + TAO_CHECK_ENV; // @@ Deactivate the suppliers (as CORBA Objects?) } - ACE_CATCH (CORBA::SystemException, sys_ex) + TAO_CATCH (CORBA::SystemException, sys_ex) { - ACE_PRINT_EXCEPTION (sys_ex, "SYS_EX"); + TAO_TRY_ENV.print_exception ("SYS_EX"); } - ACE_CATCHANY + TAO_CATCHANY { - ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION, "NON SYS EX"); + TAO_TRY_ENV.print_exception ("NON SYS EX"); } - ACE_ENDTRY; + TAO_ENDTRY; return 0; } @@ -186,8 +190,7 @@ int ECMS_Driver::supplier_task (Test_Supplier *supplier, void* /* cookie */) { - ACE_DECLARE_NEW_CORBA_ENV; - ACE_TRY + TAO_TRY { ACE_Time_Value tv (0, this->event_period_); @@ -225,8 +228,8 @@ ECMS_Driver::supplier_task (Test_Supplier *supplier, // general the CDR interface is not specified). // @@ TODO once the compiled marshalling approach is in place // this will read: cdr << info; - cdr.encode (ECM_IDLData::_tc_Info, &info, 0, ACE_TRY_ENV); - ACE_TRY_CHECK; + cdr.encode (ECM_IDLData::_tc_Info, &info, 0, TAO_TRY_ENV); + TAO_CHECK_ENV; // Here we marshall a non-IDL type. cdr << other; @@ -265,29 +268,29 @@ ECMS_Driver::supplier_task (Test_Supplier *supplier, // in just one memory allocation; event[0].data.payload.replace (mblen, mb); - supplier->consumer_proxy ()->push(event, ACE_TRY_ENV); - ACE_TRY_CHECK; + supplier->consumer_proxy ()->push(event, TAO_TRY_ENV); + TAO_CHECK_ENV; // ACE_DEBUG ((LM_DEBUG, "(%t) supplier push event\n")); ACE_OS::sleep (tv); } } - ACE_CATCH (CORBA::SystemException, sys_ex) + TAO_CATCH (CORBA::SystemException, sys_ex) { - ACE_PRINT_EXCEPTION (sys_ex, "SYS_EX"); + TAO_TRY_ENV.print_exception ("SYS_EX"); } - ACE_CATCHANY + TAO_CATCHANY { - ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION, "NON SYS EX"); + TAO_TRY_ENV.print_exception ("NON SYS EX"); } - ACE_ENDTRY; + TAO_ENDTRY; return 0; } void ECMS_Driver::connect_suppliers (RtecEventChannelAdmin::EventChannel_ptr channel, - CORBA::Environment &ACE_TRY_ENV) + CORBA::Environment &TAO_IN_ENV) { for (int i = 0; i < this->n_suppliers_; ++i) { @@ -299,9 +302,10 @@ ECMS_Driver::connect_suppliers (RtecEventChannelAdmin::EventChannel_ptr channel, this->suppliers_[i]->connect (buf, this->event_a_, this->event_b_, + this->event_period_, channel, - ACE_TRY_ENV); - ACE_CHECK; + TAO_IN_ENV); + if (TAO_IN_ENV.exception () != 0) return; } } @@ -315,12 +319,12 @@ ECMS_Driver::activate_suppliers (CORBA::Environment &) } void -ECMS_Driver::disconnect_suppliers (CORBA::Environment &ACE_TRY_ENV) +ECMS_Driver::disconnect_suppliers (CORBA::Environment &TAO_IN_ENV) { for (int i = 0; i < this->n_suppliers_; ++i) { - this->suppliers_[i]->disconnect (ACE_TRY_ENV); - ACE_CHECK; + this->suppliers_[i]->disconnect (TAO_IN_ENV); + if (TAO_IN_ENV.exception () != 0) return; } } @@ -425,54 +429,90 @@ void Test_Supplier::connect (const char* name, int event_a, int event_b, + int event_period, RtecEventChannelAdmin::EventChannel_ptr ec, - CORBA::Environment &ACE_TRY_ENV) + CORBA::Environment &TAO_IN_ENV) { - this->supplier_id_ = ACE::crc32 (name); - ACE_DEBUG ((LM_DEBUG, - "ID for <%s> is %04.4x\n", - name, - this->supplier_id_)); - - ACE_SupplierQOS_Factory qos; - qos.insert (this->supplier_id_, - event_a, - 0, 1); - qos.insert (this->supplier_id_, - event_b, - 0, 1); - qos.insert (this->supplier_id_, - ACE_ES_EVENT_SHUTDOWN, - 0, 1); - - RtecEventChannelAdmin::SupplierAdmin_var supplier_admin = - ec->for_suppliers (ACE_TRY_ENV); - ACE_CHECK; - - this->consumer_proxy_ = - supplier_admin->obtain_push_consumer (ACE_TRY_ENV); - ACE_CHECK; - - RtecEventComm::PushSupplier_var objref = - this->supplier_._this (ACE_TRY_ENV); - ACE_CHECK; - - this->consumer_proxy_->connect_push_supplier (objref.in (), - qos.get_SupplierQOS (), - ACE_TRY_ENV); - ACE_CHECK; + TAO_TRY + { + RtecScheduler::Scheduler_ptr server = + ACE_Scheduler_Factory::server (); + + RtecScheduler::handle_t rt_info = + server->create (name, TAO_TRY_ENV); + TAO_CHECK_ENV; + + ACE_Time_Value tv (0, event_period); + RtecScheduler::Period_t rate = tv.usec () * 10; + + // The execution times are set to reasonable values, but + // actually they are changed on the real execution, i.e. we + // lie to the scheduler to obtain right priorities; but we + // don't care if the set is schedulable. + tv.set (0, 2000); + TimeBase::TimeT time; + ORBSVCS_Time::Time_Value_to_TimeT (time, tv); + server->set (rt_info, + RtecScheduler::VERY_HIGH_CRITICALITY, + time, time, time, + rate, + RtecScheduler::VERY_LOW_IMPORTANCE, + time, + 1, + RtecScheduler::OPERATION, + TAO_TRY_ENV); + TAO_CHECK_ENV; + + this->supplier_id_ = ACE::crc32 (name); + ACE_DEBUG ((LM_DEBUG, "ID for <%s> is %04.4x\n", name, + this->supplier_id_)); + + ACE_SupplierQOS_Factory qos; + qos.insert (this->supplier_id_, + event_a, + rt_info, 1); + qos.insert (this->supplier_id_, + event_b, + rt_info, 1); + qos.insert (this->supplier_id_, + ACE_ES_EVENT_SHUTDOWN, + rt_info, 1); + + RtecEventChannelAdmin::SupplierAdmin_var supplier_admin = + ec->for_suppliers (TAO_TRY_ENV); + TAO_CHECK_ENV; + + this->consumer_proxy_ = + supplier_admin->obtain_push_consumer (TAO_TRY_ENV); + TAO_CHECK_ENV; + + RtecEventComm::PushSupplier_var objref = + this->supplier_._this (TAO_TRY_ENV); + TAO_CHECK_ENV; + + this->consumer_proxy_->connect_push_supplier (objref.in (), + qos.get_SupplierQOS (), + TAO_TRY_ENV); + TAO_CHECK_ENV; + + } + TAO_CATCHANY + { + TAO_RETHROW; + } + TAO_ENDTRY; } void -Test_Supplier::disconnect (CORBA::Environment &ACE_TRY_ENV) +Test_Supplier::disconnect (CORBA::Environment &TAO_IN_ENV) { if (CORBA::is_nil (this->consumer_proxy_.in ())) return; - RtecEventChannelAdmin::ProxyPushConsumer_var proxy = - this->consumer_proxy_._retn (); + this->consumer_proxy_->disconnect_push_consumer (TAO_IN_ENV); + if (TAO_IN_ENV.exception () != 0) return; - this->consumer_proxy_->disconnect_push_consumer (ACE_TRY_ENV); + this->consumer_proxy_ = 0; } int |