X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2Fruntime%2FTest%2FechoSrv.cxx;h=33fca7b2f96b4f08fc7291e1967d15913e50710b;hb=ff6426f394ecc496bfceee444f0fad78e955861e;hp=babf3bd35a5373ee708d0e2f3870bf428bf28b8e;hpb=17b2be6fdceef9981751309428fbfe58f155c48e;p=modules%2Fyacs.git diff --git a/src/runtime/Test/echoSrv.cxx b/src/runtime/Test/echoSrv.cxx index babf3bd35..33fca7b2f 100644 --- a/src/runtime/Test/echoSrv.cxx +++ b/src/runtime/Test/echoSrv.cxx @@ -1,4 +1,4 @@ -// Copyright (C) 2006-2016 CEA/DEN, EDF R&D +// Copyright (C) 2006-2023 CEA, EDF // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public @@ -27,7 +27,10 @@ using namespace std; //#define _DEVDEBUG_ #include "YacsTrace.hxx" -static CORBA::Boolean bindObjectToName(CORBA::ORB_ptr, CORBA::Object_ptr,const char*); +#include +#include CORBA_CLIENT_HEADER(SALOME_Embedded_NamingService) + +static CORBA::Boolean bindObjectToName(Engines::EmbeddedNamingService_ptr ns, CORBA::Object_ptr,const char*); static ostream& operator<<(ostream& os, const CORBA::Exception& e) { @@ -85,7 +88,7 @@ public: inline Echo_i() {} virtual ~Echo_i() {} virtual char* echoString(const char* mesg); - CORBA::Long echoLong(CORBA::Long i) throw(eo::SALOME_Exception); + CORBA::Long echoLong(CORBA::Long i); void echoDouble(CORBA::Double i,CORBA::Double& j) ; void echoDoubleVec(const eo::DoubleVec& i,eo::DoubleVec_out j) ; void echoDoubleVecVec(const eo::DoubleVecVec&, eo::DoubleVecVec_out); @@ -213,7 +216,7 @@ void Echo_i::echoDoubleVecVec(const eo::DoubleVecVec& in, eo::DoubleVecVec_out o out=new eo::DoubleVecVec(in); } -CORBA::Long Echo_i::echoLong(CORBA::Long i ) throw(eo::SALOME_Exception) +CORBA::Long Echo_i::echoLong(CORBA::Long i ) { DEBTRACE("Echo_i::echoLong " << i); if(i < 0) { @@ -325,6 +328,15 @@ int main(int argc, char** argv) try { orb = CORBA::ORB_init(argc, argv); + std::string theIOR( argv[1] ); + + CORBA::Object_var obj = orb->string_to_object(theIOR.c_str()); + Engines::EmbeddedNamingService_var ns = Engines::EmbeddedNamingService::_narrow( obj ); + if( CORBA::is_nil( ns ) ) + return 1; + //std::cout << getpid() << std::endl; + //usleep(20000000); + { CORBA::Object_var obj = orb->resolve_initial_references("RootPOA"); PortableServer::POA_var root_poa = PortableServer::POA::_narrow(obj); @@ -339,7 +351,7 @@ int main(int argc, char** argv) v <<= omniPolicy::LOCAL_CALLS_SHORTCUT; pl2[0] = orb->create_policy(omniPolicy::LOCAL_SHORTCUT_POLICY_TYPE, v); pl2[1] = root_poa->create_implicit_activation_policy(PortableServer::IMPLICIT_ACTIVATION); - PortableServer::POA_ptr shortcut_poa = root_poa->create_POA("shortcut", poa_man, pl2); + PortableServer::POA_var shortcut_poa = root_poa->create_POA("shortcut", poa_man, pl2); // Create and activate servant Echo_i* myecho = new Echo_i(); @@ -350,7 +362,7 @@ int main(int argc, char** argv) DEBTRACE("'" << (char*)sior << "'"); myechoref = eo::Echo::_narrow(obj); - if( !bindObjectToName(orb, myechoref,"Echo") ) return 1; + if( !bindObjectToName(ns, myechoref,"Echo") ) return 1; // Decrement the reference count of the object implementation, so // that it will be properly cleaned up when the POA has determined @@ -362,21 +374,21 @@ int main(int argc, char** argv) obj=myC->_this(); eo::C_var myCref=eo::C::_narrow(obj); myC->_remove_ref(); - if( !bindObjectToName(orb, myCref,"C") ) return 1; + if( !bindObjectToName(ns, myCref,"C") ) return 1; //create object D and register it in naming service D_i* myD = new D_i(); obj=myD->_this(); eo::D_var myDref=eo::D::_narrow(obj); myD->_remove_ref(); - if( !bindObjectToName(orb, myDref,"D") ) return 1; + if( !bindObjectToName(ns, myDref,"D") ) return 1; //create object Obj and register it in naming service Obj_i* myObj = new Obj_i(); obj=myObj->_this(); eo::Obj_var myObjref=eo::Obj::_narrow(obj); myObj->_remove_ref(); - if( !bindObjectToName(orb, myObjref,"Obj") ) return 1; + if( !bindObjectToName(ns, myObjref,"Obj") ) return 1; } orb->run(); } @@ -403,90 +415,16 @@ int main(int argc, char** argv) ////////////////////////////////////////////////////////////////////// static CORBA::Boolean -bindObjectToName(CORBA::ORB_ptr orb, CORBA::Object_ptr objref,const char *name) +bindObjectToName(Engines::EmbeddedNamingService_ptr ns, CORBA::Object_ptr objref,const char *name) { - CosNaming::NamingContext_var rootContext; - - try { - // Obtain a reference to the root context of the Name service: - CORBA::Object_var obj; - obj = orb->resolve_initial_references("NameService"); - - // Narrow the reference returned. - rootContext = CosNaming::NamingContext::_narrow(obj); - if( CORBA::is_nil(rootContext) ) { - DEBTRACE("Failed to narrow the root naming context."); - return 0; - } - } - catch(CORBA::ORB::InvalidName& ex) { - // This should not happen! - DEBTRACE("Service required is invalid [does not exist]." ); - return 0; - } - - try { - // Bind a context called "test" to the root context: - - CosNaming::Name contextName; - contextName.length(1); - contextName[0].id = (const char*) "test"; // string copied - contextName[0].kind = (const char*) "my_context"; // string copied - // Note on kind: The kind field is used to indicate the type - // of the object. This is to avoid conventions such as that used - // by files (name.type -- e.g. test.ps = postscript etc.) - - CosNaming::NamingContext_var testContext; - try { - // Bind the context to root. - testContext = rootContext->bind_new_context(contextName); - } - catch(CosNaming::NamingContext::AlreadyBound& ex) { - // If the context already exists, this exception will be raised. - // In this case, just resolve the name and assign testContext - // to the object returned: - CORBA::Object_var obj; - obj = rootContext->resolve(contextName); - testContext = CosNaming::NamingContext::_narrow(obj); - if( CORBA::is_nil(testContext) ) { - DEBTRACE("Failed to narrow naming context."); - return 0; - } - } - - // Bind objref with name Echo to the testContext: - CosNaming::Name objectName; - objectName.length(1); - objectName[0].id = name; // string copied - objectName[0].kind = (const char*) "Object"; // string copied - - try { - testContext->bind(objectName, objref); - } - catch(CosNaming::NamingContext::AlreadyBound& ex) { - testContext->rebind(objectName, objref); - } - // Note: Using rebind() will overwrite any Object previously bound - // to /test/Echo with obj. - // Alternatively, bind() can be used, which will raise a - // CosNaming::NamingContext::AlreadyBound exception if the name - // supplied is already bound to an object. - - // Amendment: When using OrbixNames, it is necessary to first try bind - // and then rebind, as rebind on it's own will throw a NotFoundexception if - // the Name has not already been bound. [This is incorrect behaviour - - // it should just bind]. - } - catch(CORBA::COMM_FAILURE& ex) { - DEBTRACE("Caught system exception COMM_FAILURE -- unable to contact the " - << "naming service."); - return 0; - } - catch(CORBA::SystemException&) { - DEBTRACE("Caught a CORBA::SystemException while using the naming service."); - return 0; - } - + CORBA::String_var iorNSUg = orb->object_to_string(objref); + std::string iorNS(iorNSUg); + Engines::IORType iorInput; + auto len = iorNS.length(); + iorInput.length( len ); + for(auto i = 0 ; i < len ; ++i) + iorInput[i] = iorNS[i]; + ns->Register(iorInput,name); return 1; }