Quick RTCORBA - Client - Server - HOWTO (ACE/TAO) ================================================= 1.) define Interface (hosted Objects) create file interface.idl: ----// interface.idl //---------------------------------------- module benchmark{ exception invalidRequest{}; struct dataStruct{ string data; short valPort1; short valPort2; short valPort3; }; interface Put{ void connect() raises(invalidRequest); void onePort(in short portNo, in short value) raises(invalidRequest); void allPorts( in short valPort1, in short valPort2, in short valPort3) raises(invalidRequest); void dataAndPorts( in dataStruct data) raises(invalidRequest); }; }; ---------------------------------------------------------------------- 2.) generate implementation files tao_idl -GI interface.idl 3.) rename implementation files mv interfaceI.h interface_i.h mv interfaceI.cpp interface_i.cpp 4.) change interfaceI.h include in interface_i.cpp in interface_i.h 5.) implement functionality of hosted objects into interface_i.cpp 6.) write RTCORBA Server ----// Server.cpp //---------------------------------------------------- include "interface_i.h" #include "orbsvcs/CosNamingC.h" #include #include int main(int argc, char* argv[]){ try{ // initialize ORB CORBA::ORB_var orb = CORBA::ORB_init(argc, argv, "ServerORB"); std::cout<<"ORB initialized"<resolve_initial_references("RTORB"); RTCORBA::RTORB_var rtORB = RTCORBA::RTORB::_narrow(rtorb); std::cout<<"RT Extensions OK"<resolve_initial_references("RootPOA"); PortableServer::POA_var rootPOA = PortableServer::POA::_narrow(poa.in()); // activate POA Manager PortableServer::POAManager_var poaManager = rootPOA->the_POAManager(); poaManager->activate(); std::cout<<"rootPOA OK"<create_priority_model_policy(RTCORBA::CLIENT_PROPAGATED, 9879 /*Priority*/ ); // create ObjectAdapter, assign Policy PortableServer::POA_var benchPOA = rootPOA->create_POA("benchPOA", poaManager.in(), benchPolicy); std::cout<<"Policy assigned"<activate_object(&bench_i); CORBA::Object_var benchObj = benchPOA->id_to_reference(objectID.in()); CORBA::String_var ior = orb->object_to_string(benchObj.in()); std::cout<<"Servant activated"<resolve_initial_references("NameService"); CosNaming::NamingContext_var namingContext = CosNaming::NamingContext::_narrow(namingObject.in()); CosNaming::Name name(1); name.length(1); name[0].id = CORBA::string_dup("Receiver"); namingContext->bind(name, benchObj.in()); std::cout<<"Bound Receiver to NameService"<run(); std::cout<<"ORB ready"<destroy(1,1); orb->destroy(); }catch(CORBA::Exception &any){ std::cout<<"Exception: "< #include "interfaceC.h" #include "orbsvcs/CosNamingC.h" #include #include "cpx.h" benchmark::Put_var put; CPX cpx; int main(int argc, char* argv[]){ try{ // initialize ORB CORBA::ORB_var orb = CORBA::ORB_init(argc, argv, "ClientORB"); std::cout<<"ORB ok"<resolve_initial_references("RTORB"); RTCORBA::RTORB_var rtORB = RTCORBA::RTORB::_narrow(rtorb.in()); std::cout<<"RTORB ok"<resolve_initial_references("NameService"); CosNaming::NamingContext_var namingContext = CosNaming::NamingContext::_narrow(namingObject.in()); std::cout<<"NamingService ok"<resolve(name); put = benchmark::Put::_narrow(benchObj.in()); std::cout<<"TransferOjekt ok"<resolve_initial_references("RTCurrent"); RTCORBA::Current_var rtCurrent = RTCORBA::Current::_narrow(rtCurrentObj.in()); rtCurrent->the_priority(RTCORBA::maxPriority); std::cout<<"PriorityChange ok"<connect(); put->allPorts(0, 0, 0); // destroy ORB orb->destroy(); }catch(CORBA::Exception &any){ std::cout<<"Exception occured: "<