CosNotifyChannelAdmin::EventChannel_ptr TAO_Notify_Lanes_Supplier_Client::create_ec (void) { CosNotifyChannelAdmin::EventChannel_var ec; CosNotifyChannelAdmin::EventChannelFactory_var ecf = this->orb_objects_.notify_factory (); // Create an EventChannel CosNotification::QoSProperties qos; CosNotification::AdminProperties admin; // Create an event channel CosNotifyChannelAdmin::ChannelID id; ec = ecf->create_channel (qos, admin, id); // Set the Qos : 2 Lanes NotifyExt::ThreadPoolLanesParams tpl_params; tpl_params.priority_model = NotifyExt::CLIENT_PROPAGATED; tpl_params.server_priority = 0; tpl_params.stacksize = 0; tpl_params.lanes.length (this->consumer_count_ + 1); tpl_params.allow_borrowing = 0; tpl_params.allow_request_buffering = 0; tpl_params.max_buffered_requests = 0; tpl_params.max_request_buffer_size = 0; /* * Note that we actually create 1 extra Lane. * The extra Lane at priority 0 is created to match the priority 0 of the supplier thread. * As the ProxyConsumer is activated in an RT POA with lanes, each invocation must mach some lane. * Now, we typically reserve higer priorities to make requests and the lowest priority 0 for administrative calls * e.g. <subscription_change>. If we do not have a lane at the lowest 0 priority, then the invocation made from * the supplier at priority 0 will fail. */ tpl_params.lanes[0].lane_priority = 0; // Priority 0 tpl_params.lanes[0].static_threads = 1; tpl_params.lanes[0].dynamic_threads = 0; RTCORBA::Priority priority = 1; // The priority at which we send an event each. for (int i = 1; i <= this->consumer_count_; ++i, ++priority) { tpl_params.lanes[i].lane_priority = priority; tpl_params.lanes[i].static_threads = 1; tpl_params.lanes[i].dynamic_threads = 0; } qos.length (1); qos[0].name = CORBA::string_dup (NotifyExt::ThreadPoolLanes); qos[0].value <<= tpl_params; // Note that instead of <set_qos>, the <qos> can also be passed while creating the channel. ec->set_qos (qos); return ec._retn (); }
void TAO_Notify_Tests_EventChannel_Command::handle_set_qos (void) { CosNotifyChannelAdmin::EventChannel_var ec; LOOKUP_MANAGER->resolve (ec, this->name_.c_str ()); ec->set_qos (this->qos_); }
CosNotifyChannelAdmin::EventChannel_ptr TAO_Notify_ThreadPool_Supplier_Client::create_ec (void) { CosNotifyChannelAdmin::EventChannel_var ec; CosNotifyChannelAdmin::EventChannelFactory_var ecf = this->orb_objects_.notify_factory (); // Create an EventChannel CosNotification::QoSProperties qos; CosNotification::AdminProperties admin; // Create an event channel CosNotifyChannelAdmin::ChannelID id; ec = ecf->create_channel (qos, admin, id); // Set the Qos // See $TAO_ROOT/orbsvcs/orbsvcs/NotifyExt.idl if (this->ec_thread_count_) { NotifyExt::ThreadPoolParams tp_params = { NotifyExt::CLIENT_PROPAGATED, 0, 0, static_cast<CORBA::ULong> (this->ec_thread_count_), 0, 0, 0, 0, 0 }; CosNotification::QoSProperties qos (1); qos.length (1); qos[0].name = CORBA::string_dup (NotifyExt::ThreadPool); qos[0].value <<= tp_params; // Note that instead of <set_qos>, the <qos> can also be passed while creating the channel. ec->set_qos (qos); } ACE_DEBUG ((LM_DEBUG, "(%P,%t) Created Event Channel with %d threads\n", this->ec_thread_count_)); return ec._retn (); }
int ACE_TMAIN (int argc, ACE_TCHAR *argv[]) { ACE_Auto_Ptr< sig_i > sig_impl; try { Supplier_Client client; int status = client.init (argc, argv); ACE_UNUSED_ARG(status); ACE_ASSERT(status == 0); CosNotifyChannelAdmin::EventChannel_var ec = client.create_event_channel ("MyEventChannel", 0); CosNotification::QoSProperties qos (1); qos.length (1); qos[0].name = CORBA::string_dup (CosNotification::OrderPolicy); qos[0].value <<= order_policy; ec->set_qos (qos); CORBA::ORB_ptr orb = client.orb (); sig_impl.reset( new sig_i( orb ) ); sig_var sig = sig_impl->_this (); CORBA::String_var ior = orb->object_to_string (sig.in ()); if (ior_output_file != 0) { FILE *output_file= ACE_OS::fopen (ior_output_file, "w"); if (output_file == 0) ACE_ERROR_RETURN ((LM_ERROR, "Cannot open output file %s for " "writing IOR: %C", ior_output_file, ior.in ()), 1); ACE_OS::fprintf (output_file, "%s", ior.in ()); ACE_OS::fclose (output_file); } CosNotifyChannelAdmin::SupplierAdmin_var admin = create_supplieradmin (ec.in ()); ACE_ASSERT(!CORBA::is_nil (admin.in ())); create_suppliers (admin.in (), client.root_poa ()); sig_impl->wait_for_startup(); ACE_DEBUG((LM_DEBUG, "1 supplier sending %d events...\n", num_events)); for (int i = 0; i < num_events / BATCH_SIZE; ++i) { ACE_DEBUG((LM_DEBUG, "+")); SendBatch (i); } ACE_DEBUG((LM_DEBUG, "\nSupplier sent %d events.\n", num_events)); sig_impl->wait_for_completion(); ACE_OS::unlink (ior_output_file); supplier_1->disconnect(); ec->destroy(); return 0; } catch (const CORBA::Exception& e) { e._tao_print_exception ("Error: "); } return 1; }
int ACE_TMAIN (int argc, ACE_TCHAR *argv[]) { int status = 0; ACE_Auto_Ptr< sig_i > sig_impl; try { Supplier_Client client; status = client.init (argc, argv); if (status == 0) { CosNotifyChannelAdmin::EventChannel_var ec = client.create_event_channel ("MyEventChannel", 0); if (use_deadline_ordering) { CosNotification::QoSProperties qos (1); qos.length (1); qos[0].name = CORBA::string_dup (CosNotification::OrderPolicy); qos[0].value <<= (CORBA::Short)CosNotification::DeadlineOrder; ec->set_qos (qos); } sig_impl.reset( new sig_i( client.orb() ) ); sig_var sig = sig_impl->_this (); // If the ior_output_file exists, output the ior to it if (ior_output_file != 0) { CORBA::String_var ior = client.orb ()->object_to_string (sig.in ()); FILE *output_file= ACE_OS::fopen (ior_output_file, "w"); ACE_ASSERT (output_file != 0); ACE_OS::fprintf (output_file, "%s", ior.in ()); ACE_OS::fclose (output_file); } CosNotifyChannelAdmin::SupplierAdmin_var admin = create_supplieradmin (ec.in ()); ACE_ASSERT(!CORBA::is_nil (admin.in ())); create_suppliers (admin.in (), client.root_poa ()); sig_impl->wait_for_startup(); ACE_DEBUG((LM_DEBUG, "1 supplier sending %d events...\n", num_events)); for (int i = 0; i < num_events; ++i) { ACE_DEBUG((LM_DEBUG, "+")); SendEvent (i + 1); } ACE_DEBUG((LM_DEBUG, "\nSupplier sent %d events.\n", num_events)); sig_impl->wait_for_completion(); ACE_OS::unlink (ior_output_file); supplier_1->disconnect(); ec->destroy(); } } catch (const CORBA::Exception& e) { e._tao_print_exception ("Error: "); status = 1; } return status; }