// $Id$ #include "Messenger_i.h" #include "common.h" #include #include #include #include "tao/RTCORBA/RTCORBA.h" int ACE_TMAIN (int argc, ACE_TCHAR *argv[]) { try { // Initialize orb CORBA::ORB_var orb = CORBA::ORB_init( argc, argv ); // Get the RTORB. CORBA::Object_var obj = orb->resolve_initial_references("RTORB"); RTCORBA::RTORB_var rt_orb = RTCORBA::RTORB::_narrow(obj.in()); // PolicyCurrent. obj = orb->resolve_initial_references("PolicyCurrent"); CORBA::PolicyCurrent_var policy_current = CORBA::PolicyCurrent::_narrow(obj.in()); if (CORBA::is_nil(policy_current.in())) { std::cerr << "Unable to narrow the PolicyCurrent" << std::endl; return 1; } //Get reference to Root POA obj = orb->resolve_initial_references( "RootPOA" ); PortableServer::POA_var poa = PortableServer::POA::_narrow( obj.in() ); // Activate POA Manager PortableServer::POAManager_var mgr = poa->the_POAManager(); mgr->activate(); // Create the thread-pool const CORBA::Short increment = get_increment(); RTCORBA::ThreadpoolLanes lanes(get_total_lanes()); lanes.length(get_total_lanes()); std::cout << "Creating " << get_total_lanes() << " lane" << (get_total_lanes() == 1 ? "" : "s") << std::endl; for(CORBA::ULong i = 0; i < get_total_lanes(); i++) { lanes[i].static_threads = 1; lanes[i].dynamic_threads = 0; lanes[i].lane_priority = i * increment; std::cout << " Priority: " << lanes[i].lane_priority << std::endl; } RTCORBA::ThreadpoolId threadpool_id = rt_orb->create_threadpool_with_lanes (0, // Stack Size lanes, 0, // Allow borrowing 0, // Allow request buffering 0, // Max buffered requests 0); // Max request buffer size CORBA::PolicyList poa_policy_list(2); poa_policy_list.length (2); poa_policy_list[0] = rt_orb->create_priority_model_policy(RTCORBA::CLIENT_PROPAGATED, 0); poa_policy_list[1] = rt_orb->create_threadpool_policy(threadpool_id); PortableServer::POA_var client_propagated_poa = poa->create_POA ("client_propagated_poa", mgr.in (), poa_policy_list); // Create an object Messenger_i messenger_servant(orb.in()); // Register the servant with the RootPOA, obtain its object // reference, stringify it, and write it to a file. PortableServer::ObjectId_var oid = client_propagated_poa->activate_object( &messenger_servant ); CORBA::Object_var messenger_obj = client_propagated_poa->id_to_reference( oid.in() ); CORBA::String_var str = orb->object_to_string( messenger_obj.in() ); std::ofstream iorFile( "Messenger.ior" ); iorFile << str.in() << std::endl; iorFile.close(); std::cout << "IOR written to file Messenger.ior" << std::endl; // Accept requests orb->run(); orb->destroy(); } catch(const CORBA::Exception& ex) { std::cerr << "Caught CORBA exception: " << ex << std::endl; return 1; } return 0; }