summaryrefslogtreecommitdiff
path: root/TAO/orbsvcs/tests/EC_Multiple/EC_Multiple.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/orbsvcs/tests/EC_Multiple/EC_Multiple.cpp')
-rw-r--r--TAO/orbsvcs/tests/EC_Multiple/EC_Multiple.cpp612
1 files changed, 0 insertions, 612 deletions
diff --git a/TAO/orbsvcs/tests/EC_Multiple/EC_Multiple.cpp b/TAO/orbsvcs/tests/EC_Multiple/EC_Multiple.cpp
deleted file mode 100644
index 9de9966deaa..00000000000
--- a/TAO/orbsvcs/tests/EC_Multiple/EC_Multiple.cpp
+++ /dev/null
@@ -1,612 +0,0 @@
-//
-// $Id$
-//
-
-#include "ace/Get_Opt.h"
-
-#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/RtecEventChannelAdminC.h"
-#include "EC_Multiple.h"
-
-// ************************************************************
-
-EC_Proxy::EC_Proxy (void)
- : consumer_ (this),
- supplier_ (this)
-{
-}
-
-EC_Proxy::~EC_Proxy (void)
-{
-}
-
-int
-EC_Proxy::open (RtecEventChannelAdmin::EventChannel_ptr remote_ec,
- RtecEventChannelAdmin::EventChannel_ptr local_ec,
- const RtecEventChannelAdmin::ConsumerQOS& subscriptions,
- const RtecEventChannelAdmin::SupplierQOS& publications,
- CORBA::Environment &_env)
-{
- ACE_UNUSED_ARG (_env);
-
- TAO_TRY
- {
- // = Connect as a supplier to the local EC
- RtecEventChannelAdmin::SupplierAdmin_var supplier_admin =
- local_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 supplier_ref =
- this->supplier_._this (TAO_TRY_ENV);
- TAO_CHECK_ENV;
-
- this->consumer_proxy_->connect_push_supplier (supplier_ref.in (),
- publications,
- TAO_TRY_ENV);
- TAO_CHECK_ENV;
-
- RtecEventChannelAdmin::ConsumerAdmin_var consumer_admin =
- remote_ec->for_consumers (TAO_TRY_ENV);
- TAO_CHECK_ENV;
-
- this->supplier_proxy_ =
- consumer_admin->obtain_push_supplier (TAO_TRY_ENV);
- TAO_CHECK_ENV;
-
- RtecEventComm::PushConsumer_var consumer_ref =
- this->consumer_._this (TAO_TRY_ENV);
- TAO_CHECK_ENV;
-
- this->supplier_proxy_->connect_push_consumer (consumer_ref.in (),
- subscriptions,
- TAO_TRY_ENV);
- TAO_CHECK_ENV;
- }
- TAO_CATCHANY
- {
- TAO_TRY_ENV.print_exception ("EC_Proxy::open");
- return -1;
- }
- TAO_ENDTRY;
-
- return 0;
-}
-
-void
-EC_Proxy::disconnect_push_consumer (CORBA::Environment &)
-{
- ACE_DEBUG ((LM_DEBUG,
- "Supplier-consumer received disconnect from channel.\n"));
-}
-
-void
-EC_Proxy::disconnect_push_supplier (CORBA::Environment &)
-{
- ACE_DEBUG ((LM_DEBUG,
- "Supplier received disconnect from channel.\n"));
-}
-
-void
-EC_Proxy::push (const RtecEventComm::EventSet &events,
- CORBA::Environment & _env)
-{
- // ACE_DEBUG ((LM_DEBUG, "EC_Proxy::push - "));
-
- if (events.length () == 0)
- {
- // ACE_DEBUG ((LM_DEBUG, "no events\n"));
- return;
- }
-
- ACE_DEBUG ((LM_DEBUG, "ECP: %d event(s)\n", events.length ()));
-
- // @@ TODO, there is an extra data copy here, we should do the event
- // modification without it and only compact the necessary events.
- int count = 0;
- RtecEventComm::EventSet out (events.length ());
- for (u_int i = 0; i < events.length (); ++i)
- {
- if (events[i].ttl_ > 0)
- {
- count++;
- out.length (count);
- out[count - 1] = events[i];
- out[count - 1].ttl_--;
- }
- }
-
- if (count > 0)
- {
- this->consumer_proxy_->push (events, _env);
- }
-}
-
-// ****************************************************************
-
-Test_ECP::Test_ECP (void)
- : consumer_ (this),
- supplier_ (this),
- event_a_ (0),
- event_b_ (0),
- event_c_ (0),
- interval_ (250)
-{
-}
-
-int
-Test_ECP::run (int argc, char* argv[])
-{
- TAO_TRY
- {
- CORBA::ORB_var orb =
- CORBA::ORB_init (argc, argv, "internet", TAO_TRY_ENV);
- TAO_CHECK_ENV;
-
- CORBA::Object_var poa_object =
- orb->resolve_initial_references("RootPOA");
- if (CORBA::is_nil (poa_object.in ()))
- ACE_ERROR_RETURN ((LM_ERROR,
- " (%P|%t) Unable to initialize the POA.\n"),
- 1);
-
- PortableServer::POA_var root_poa =
- PortableServer::POA::_narrow (poa_object.in (), TAO_TRY_ENV);
- TAO_CHECK_ENV;
-
- PortableServer::POAManager_var poa_manager =
- root_poa->the_POAManager (TAO_TRY_ENV);
- TAO_CHECK_ENV;
-
- if (this->parse_args (argc, argv))
- return 1;
-
- CORBA::Object_var naming_obj =
- orb->resolve_initial_references ("NameService");
- if (CORBA::is_nil (naming_obj.in ()))
- ACE_ERROR_RETURN ((LM_ERROR,
- " (%P|%t) Unable to get the Naming Service.\n"),
- 1);
-
- CosNaming::NamingContext_var naming_context =
- CosNaming::NamingContext::_narrow (naming_obj.in (), TAO_TRY_ENV);
- TAO_CHECK_ENV;
-
- ACE_Scheduler_Factory::use_config (naming_context.in ());
-
- RtecEventChannelAdmin::EventChannel_var local_ec =
- this->get_ec (naming_context.in (),
- this->lcl_ec_name_,
- TAO_TRY_ENV);
- TAO_CHECK_ENV;
-
- RtecEventChannelAdmin::EventChannel_var remote_ec =
- this->get_ec (naming_context.in (),
- this->rmt_ec_name_,
- TAO_TRY_ENV);
- TAO_CHECK_ENV;
-
- if (this->connect_supplier (local_ec.in (),
- TAO_TRY_ENV) == -1)
- return 1;
-
- if (this->connect_consumer (local_ec.in (),
- TAO_TRY_ENV) == -1)
- return 1;
-
- if (this->connect_ecp (local_ec.in (),
- remote_ec.in (),
- TAO_TRY_ENV) == -1)
- return 1;
-
- orb->run ();
- }
- TAO_CATCH (CORBA::SystemException, sys_ex)
- {
- TAO_TRY_ENV.print_exception ("SYS_EX");
- }
- TAO_ENDTRY;
- return 0;
-}
-
-RtecEventChannelAdmin::EventChannel_ptr
-Test_ECP::get_ec (CosNaming::NamingContext_ptr naming_context,
- const char* ec_name,
- CORBA::Environment &_env)
-{
- CosNaming::Name channel_name (1);
- channel_name.length (1);
- channel_name[0].id = CORBA::string_dup (ec_name);
-
- CORBA::Object_ptr ec_ptr =
- naming_context->resolve (channel_name, _env);
- if (_env.exception () != 0 || CORBA::is_nil (ec_ptr))
- return RtecEventChannelAdmin::EventChannel::_nil ();
-
- return RtecEventChannelAdmin::EventChannel::_narrow (ec_ptr, _env);
-}
-
-int
-Test_ECP::connect_supplier (RtecEventChannelAdmin::EventChannel_ptr local_ec,
- CORBA::Environment &_env)
-{
- TAO_TRY
- {
- char buf[BUFSIZ];
- ACE_OS::strcpy (buf, "supplier@");
- ACE_OS::strcat (buf, this->lcl_ec_name_);
-
- RtecScheduler::Scheduler_ptr server =
- ACE_Scheduler_Factory::server ();
-
- RtecScheduler::handle_t rt_info =
- server->create (buf, TAO_TRY_ENV);
- TAO_CHECK_ENV;
-
- server->set (rt_info,
- ORBSVCS_Time::zero,
- ORBSVCS_Time::zero,
- ORBSVCS_Time::zero,
- this->interval_ * 10000, // @@ Make it parametric
- RtecScheduler::VERY_LOW_IMPORTANCE,
- ORBSVCS_Time::zero,
- 1,
- TAO_TRY_ENV);
- TAO_CHECK_ENV;
-
- this->supplier_id_ = ACE::crc32 (buf);
-
- ACE_SupplierQOS_Factory qos;
- qos.insert (this->supplier_id_,
- ACE_ES_EVENT_UNDEFINED + this->event_a_,
- rt_info, 1);
- qos.insert (this->supplier_id_,
- ACE_ES_EVENT_UNDEFINED + this->event_b_,
- rt_info, 1);
- qos.insert (this->supplier_id_,
- ACE_ES_EVENT_SHUTDOWN,
- rt_info, 1);
-
- RtecEventChannelAdmin::SupplierAdmin_var supplier_admin =
- local_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_RETURN (-1);
- }
- TAO_ENDTRY;
- return 0;
-}
-
-int
-Test_ECP::connect_consumer (RtecEventChannelAdmin::EventChannel_ptr local_ec,
- CORBA::Environment &_env)
-{
- TAO_TRY
- {
- RtecScheduler::Scheduler_ptr server =
- ACE_Scheduler_Factory::server ();
-
- char buf[BUFSIZ];
- ACE_OS::strcpy (buf, "consumer@");
- ACE_OS::strcat (buf, this->lcl_ec_name_);
-
- RtecScheduler::handle_t rt_info =
- server->create (buf, TAO_TRY_ENV);
- TAO_CHECK_ENV;
-
- server->set (rt_info,
- ORBSVCS_Time::zero,
- ORBSVCS_Time::zero,
- ORBSVCS_Time::zero,
- this->interval_ * 10000, // @@ Make it parametric
- RtecScheduler::VERY_LOW_IMPORTANCE,
- ORBSVCS_Time::zero,
- 1,
- TAO_TRY_ENV);
- TAO_CHECK_ENV;
-
- ACE_Time_Value tv_timeout (0, this->interval_ * 1000);
- TimeBase::TimeT timeout;
- ORBSVCS_Time::Time_Value_to_TimeT (timeout, tv_timeout);
-
- ACE_ConsumerQOS_Factory qos;
- qos.start_disjunction_group ();
- qos.insert_type (ACE_ES_EVENT_SHUTDOWN,
- rt_info);
- qos.insert_time (ACE_ES_EVENT_INTERVAL_TIMEOUT,
- timeout,
- rt_info);
- qos.insert_type (ACE_ES_EVENT_UNDEFINED + this->event_a_,
- rt_info);
- qos.insert_type (ACE_ES_EVENT_UNDEFINED + this->event_c_,
- rt_info);
-
- // = Connect as a consumer.
- RtecEventChannelAdmin::ConsumerAdmin_var consumer_admin =
- local_ec->for_consumers (TAO_TRY_ENV);
- TAO_CHECK_ENV;
-
- this->supplier_proxy_ =
- consumer_admin->obtain_push_supplier (TAO_TRY_ENV);
- TAO_CHECK_ENV;
-
- RtecEventComm::PushConsumer_var objref =
- this->consumer_._this (TAO_TRY_ENV);
- TAO_CHECK_ENV;
-
- this->supplier_proxy_->connect_push_consumer (objref.in (),
- qos.get_ConsumerQOS (),
- TAO_TRY_ENV);
- TAO_CHECK_ENV;
- }
- TAO_CATCHANY
- {
- TAO_RETHROW_RETURN (-1);
- }
- TAO_ENDTRY;
-
- return 0;
-}
-
-int
-Test_ECP::connect_ecp (RtecEventChannelAdmin::EventChannel_ptr local_ec,
- RtecEventChannelAdmin::EventChannel_ptr remote_ec,
- CORBA::Environment &_env)
-{
- TAO_TRY
- {
- RtecScheduler::Scheduler_ptr server =
- ACE_Scheduler_Factory::server ();
-
- // Generate its ConsumerQOS
- char rmt[BUFSIZ];
- ACE_OS::strcpy (rmt, "ecp@");
- ACE_OS::strcat (rmt, this->rmt_ec_name_);
-
- RtecScheduler::handle_t rmt_info =
- server->create (rmt, TAO_TRY_ENV);
- TAO_CHECK_ENV;
-
- server->set (rmt_info,
- ORBSVCS_Time::zero,
- ORBSVCS_Time::zero,
- ORBSVCS_Time::zero,
- this->interval_ * 10000,
- RtecScheduler::VERY_LOW_IMPORTANCE,
- ORBSVCS_Time::zero,
- 1,
- TAO_TRY_ENV);
- TAO_CHECK_ENV;
-
- ACE_ConsumerQOS_Factory consumer_qos;
- consumer_qos.start_disjunction_group ();
- consumer_qos.insert_type (ACE_ES_EVENT_UNDEFINED + this->event_a_,
- rmt_info);
- consumer_qos.insert_type (ACE_ES_EVENT_UNDEFINED + this->event_c_,
- rmt_info);
-
-
- // Generate its SupplierQOS
- char lcl[BUFSIZ];
- ACE_OS::strcpy (lcl, "ecp@");
- ACE_OS::strcat (lcl, this->lcl_ec_name_);
-
- RtecScheduler::handle_t lcl_info =
- server->create (lcl, TAO_TRY_ENV);
- TAO_CHECK_ENV;
-
- server->set (lcl_info,
- ORBSVCS_Time::zero,
- ORBSVCS_Time::zero,
- ORBSVCS_Time::zero,
- this->interval_ * 10000,
- RtecScheduler::VERY_LOW_IMPORTANCE,
- ORBSVCS_Time::zero,
- 1,
- TAO_TRY_ENV);
- TAO_CHECK_ENV;
-
- CORBA::ULong supplier_id = ACE::crc32 (lcl);
-
- ACE_SupplierQOS_Factory supplier_qos;
- supplier_qos.insert (supplier_id,
- ACE_ES_EVENT_UNDEFINED + this->event_a_,
- lcl_info, 1);
- supplier_qos.insert (supplier_id,
- ACE_ES_EVENT_UNDEFINED + this->event_c_,
- lcl_info, 1);
-
- this->ecp_.open (remote_ec, local_ec,
- consumer_qos.get_ConsumerQOS (),
- supplier_qos.get_SupplierQOS (),
- TAO_TRY_ENV);
- TAO_CHECK_ENV;
- }
- TAO_CATCHANY
- {
- TAO_RETHROW_RETURN (-1);
- }
- TAO_ENDTRY;
-
- return 0;
-}
-
-void
-Test_ECP::disconnect_push_consumer (CORBA::Environment &)
-{
- ACE_DEBUG ((LM_DEBUG,
- "Supplier-consumer received disconnect from channel.\n"));
-}
-
-void
-Test_ECP::disconnect_push_supplier (CORBA::Environment &)
-{
- ACE_DEBUG ((LM_DEBUG,
- "Supplier received disconnect from channel.\n"));
-}
-
-void
-Test_ECP::push (const RtecEventComm::EventSet &events,
- CORBA::Environment & _env)
-{
- // ACE_DEBUG ((LM_DEBUG, "EC_Proxy::push - "));
-
- if (events.length () == 0)
- {
- ACE_DEBUG ((LM_DEBUG, "no events\n"));
- return;
- }
-
- ACE_DEBUG ((LM_DEBUG, "%d event(s)\n", events.length ()));
-
- for (u_int i = 0; i < events.length (); ++i)
- {
- const RtecEventComm::Event& e = events[i];
- if (e.type_ == ACE_ES_EVENT_INTERVAL_TIMEOUT)
- {
- // Generate some random events (acting as a supplier)...
- int n = 2; // ACE_OS::rand () % 2;
- RtecEventComm::EventSet sent (n);
- sent.length (n);
-
- for (int j = 0; j < n; ++j)
- {
- RtecEventComm::Event& s = sent[j];
- s.source_ = this->supplier_id_;
- s.ttl_ = 1;
-
- // @@ TOTAL HACK
- ACE_hrtime_t t = ACE_OS::gethrtime ();
- ORBSVCS_Time::hrtime_to_TimeT (s.creation_time_, t);
- s.ec_recv_time_ = ORBSVCS_Time::zero;
- s.ec_send_time_ = ORBSVCS_Time::zero;
-
- s.data_.x = 0;
- s.data_.y = 0;
-
- if (j % 2 == 0)
- {
- // Generate an A event...
- s.type_ = ACE_ES_EVENT_UNDEFINED + this->event_a_;
- }
- else
- {
- s.type_ = ACE_ES_EVENT_UNDEFINED + this->event_b_;
- }
- }
- this->consumer_proxy_->push (sent, _env);
- ACE_DEBUG ((LM_DEBUG, "Sent %d events\n",
- n));
- }
- else if (e.type_ == ACE_ES_EVENT_SHUTDOWN)
- {
- // @@ TODO
- }
- else
- {
- // Print out the events received...
- ACE_DEBUG ((LM_DEBUG, "Received event %d from %04.4x\n",
- e.type_, e.source_));
- }
- }
-}
-
-int
-Test_ECP::parse_args (int argc, char *argv [])
-{
- ACE_Get_Opt get_opt (argc, argv, "l:r:a:b:c:t:");
- int opt;
-
- while ((opt = get_opt ()) != EOF)
- {
- switch (opt)
- {
- case 'l':
- this->lcl_ec_name_ = get_opt.optarg;
- break;
- case 'r':
- this->rmt_ec_name_ = get_opt.optarg;
- break;
- case 'a':
- this->event_a_ = ACE_OS::atoi (get_opt.optarg);
- break;
- case 'b':
- this->event_b_ = ACE_OS::atoi (get_opt.optarg);
- break;
- case 'c':
- this->event_c_ = ACE_OS::atoi (get_opt.optarg);
- break;
- case 't':
- this->interval_ = ACE_OS::atoi (get_opt.optarg);
- break;
- case '?':
- default:
- ACE_DEBUG ((LM_DEBUG,
- "Usage: %s "
- "-l local_ec_name "
- "-r remote_ec_name "
- "<-a event_type_a> "
- "<-b event_type_b> "
- "<-c event_type_c> "
- "-t event_interval "
- "\n",
- argv[0]));
- return -1;
- }
- }
-
- if (this->event_a_ <= 0
- || this->event_b_ <= 0
- || this->event_c_ <= 0 )
- {
- ACE_DEBUG ((LM_DEBUG,
- "%s: you must specify the event types\n",
- argv[0]));
- return -1;
- }
-
- return 0;
-}
-
-// ****************************************************************
-
-int
-main (int argc, char *argv [])
-{
- Test_ECP test;
- return test.run (argc, argv);
-}
-
-#if defined (ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION)
-template class ACE_PushConsumer_Adapter<Test_ECP>;
-template class ACE_PushSupplier_Adapter<Test_ECP>;
-template class ACE_PushConsumer_Adapter<EC_Proxy>;
-template class ACE_PushSupplier_Adapter<EC_Proxy>;
-#elif defined(ACE_HAS_TEMPLATE_INSTANTIATION_PRAGMA)
-#pragma instantiate ACE_PushConsumer_Adapter<Test_ECP>
-#pragma instantiate ACE_PushSupplier_Adapter<Test_ECP>
-#pragma instantiate ACE_PushConsumer_Adapter<EC_Proxy>
-#pragma instantiate ACE_PushSupplier_Adapter<EC_Proxy>
-#endif /* ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION */