summaryrefslogtreecommitdiff
path: root/TAO/orbsvcs/tests/EC_Custom_Marshal/ECM_Supplier.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/orbsvcs/tests/EC_Custom_Marshal/ECM_Supplier.cpp')
-rw-r--r--TAO/orbsvcs/tests/EC_Custom_Marshal/ECM_Supplier.cpp206
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