#include #include "bench_i.h" #include "orbsvcs/CosNamingC.h" #include #include "tao/RTCORBA/Network_Priority_Mapping_Manager.h" #include "tao/RTCORBA/Network_Priority_Mapping.h" #include "Custom_Network_Priority_Mapping.h" RTCORBA::Priority corbaPriority = RTCORBA::minPriority; int main(int argc, char* argv[]){ struct sched_param schedparam; schedparam.sched_priority = 99; if (sched_setscheduler(0, SCHED_FIFO, &schedparam) != 0) { fprintf(stderr, "%s: PID %d: sched_setscheduler() failed errno = %d\n", __FUNCTION__, getpid(), errno); } try{ // initialize ORB CORBA::ORB_var orb = CORBA::ORB_init(argc, argv, "ServerORB"); std::cout<<"ORB initialized"<resolve_initial_references("NetworkPriorityMappingManager"); RTCORBA::NetworkPriorityMappingManager_var mappingManager = RTCORBA::NetworkPriorityMappingManager::_narrow( netmapper.in() ); Custom_Network_Priority_Mapping *cnpm; cnpm = new Custom_Network_Priority_Mapping(); cnpm->corba_priority(corbaPriority); mappingManager->mapping(cnpm); // access RT Extensions CORBA::Object_var rtorb = orb->resolve_initial_references("RTORB"); RTCORBA::RTORB_var rtORB = RTCORBA::RTORB::_narrow(rtorb); std::cout<<"RT Extensions OK"<create_tcp_protocol_properties (ACE_DEFAULT_MAX_SOCKET_BUFSIZ, ACE_DEFAULT_MAX_SOCKET_BUFSIZ, 1, 0, 1, 1 /*enable netw. priority*/); RTCORBA::ProtocolList protocols; protocols.length (1); protocols[0].protocol_type = 0; protocols[0].transport_protocol_properties = RTCORBA::ProtocolProperties::_duplicate (tcpProperties.in ()); protocols[0].orb_protocol_properties = RTCORBA::ProtocolProperties::_nil (); // obtain rootPOA CORBA::Object_var poa = orb->resolve_initial_references("RootPOA"); PortableServer::POA_var rootPOA = PortableServer::POA::_narrow(poa.in()); // NameService CORBA::Object_var namingObject = orb->resolve_initial_references("NameService"); CosNaming::NamingContext_var namingContext = CosNaming::NamingContext::_narrow(namingObject.in()); // activate POA Manager PortableServer::POAManager_var poaManager = rootPOA->the_POAManager(); poaManager->activate(); std::cout<<"rootPOA OK"<create_threadpool_with_lanes(0 /*Stacksize*/, lanes, 0 /*borrowing*/, 0 /*buffering*/, 0 /*maxBuf*/, 0 /*maxBufSize*/); // create Policy CORBA::PolicyList benchPolicy(3); benchPolicy.length(3); benchPolicy[0] = rtORB->create_priority_model_policy(RTCORBA::CLIENT_PROPAGATED, 0 /*default priority*/); benchPolicy[1] = rtORB->create_threadpool_policy(threadpool_id); benchPolicy[2] = rtORB->create_server_protocol_policy (protocols); // create ObjectAdapters, assign Policy PortableServer::POA_var msgAndPort1POA = rootPOA->create_POA("msgAndPort1POA", poaManager.in(), benchPolicy); PortableServer::POA_var msgAndPort2POA = rootPOA->create_POA("msgAndPort2POA", poaManager.in(), benchPolicy); PortableServer::POA_var msgOnlyPOA = rootPOA->create_POA("msgOnlyPOA", poaManager.in(), benchPolicy); // benchPolicy[0] = rtORB->create_priority_model_policy(RTCORBA::CLIENT_PROPAGATED, 0 /*default priority*/); PortableServer::POA_var portOnlyPOA = rootPOA->create_POA("portOnlyPOA", poaManager.in(), benchPolicy); std::cout<<"POAs created, Policies assigned"<activate_object(&msgAndPort1_i); CORBA::Object_var benchObj = msgAndPort1POA->id_to_reference(objectID.in()); name[0].id = CORBA::string_dup("msgAndPort1"); namingContext->bind(name, benchObj.in()); objectID = msgAndPort2POA->activate_object(&msgAndPort2_i); benchObj = msgAndPort2POA->id_to_reference(objectID.in()); name[0].id = CORBA::string_dup("msgAndPort2"); namingContext->bind(name, benchObj.in()); objectID = msgOnlyPOA->activate_object(&msgOnly_i); benchObj = msgOnlyPOA->id_to_reference(objectID.in()); name[0].id = CORBA::string_dup("msgOnly"); namingContext->bind(name, benchObj.in()); objectID = portOnlyPOA->activate_object(&portOnly_i); benchObj = portOnlyPOA->id_to_reference(objectID.in()); name[0].id = CORBA::string_dup("portOnly"); namingContext->bind(name, benchObj.in()); std::cout<<"Servants activated"<run(); std::cout<<"ORB ready"<destroy(1,1); orb->destroy(); }catch(CORBA::Exception &any){ std::cout<<"Exception: "<