⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 serviceoptions.cpp

📁 遗传算法的一个库
💻 CPP
字号:
// part of GradSoft C++ ToolBox// (C) GradSoft 2000, 2001// $Id: ServiceOptions.cpp,v 1.25 2002/01/17 16:18:53 kav Exp $#include <importCORBA.h>#include <importCosNaming.h>#include <GradSoft/ServiceOptions.h>#include <strstream>#include <fstream>#ifndef STREAMBUF_HAVE_PUBSEEKPOS#define pubseekpos seekpos#endifnamespace GradSoft {bool ServiceOptions::ior_file_callback(const ProgOptions* po, const char* argument, void* data){ ProgOptions* po1 = const_cast<ProgOptions*>(po); ServiceOptions* sop = dynamic_cast<ServiceOptions*>(po1); const char* name = static_cast<char*>(data); sop->set_ior_fname(name, argument); return true;}ServiceOptions::ServiceOptions(const char* optPrefix, const char* pkgPrefix)  :ProgOptions(optPrefix,pkgPrefix,true){ put("with-naming","bind service options into Naming Service"); put("ior-stdout","print ior of service objects into stdout");}ServiceOptions::~ServiceOptions(){}void ServiceOptions::putServiceName(const char* name){ ServiceRecord sr; std::ostrstream ostr; ostr << "ior-file-" << name << '\0'; sr.set_ior_file_option(ostr.str()); ostr.rdbuf()->freeze(0); ostr.rdbuf()->pubseekpos(0,std::ios::out); ostr << "output ior of " << name << " to file <argument>" << '\0'; sr.set_ior_file_description(ostr.str()); ostr.rdbuf()->freeze(0); put(sr.get_ior_file_option(),sr.get_ior_file_description(),true,     ServiceOptions::ior_file_callback,(void*)name); serviceRecords_[name]=sr;}bool ServiceOptions::bindServiceObject(CORBA::ORB_ptr orb,                                        CORBA::Object_ptr object,                                       PortableServer::Servant p_servant,                                       const char* objName,                                       bool rebind){ if(is_set("with-naming")) {     CosNaming::Name name;     name.length(1);     name[0].id=CORBA::string_dup(objName);     name[0].kind=CORBA::string_dup("");     CORBA::Object_var obj ;     try {        obj = orb->resolve_initial_references("NameService");     }catch(const CORBA::ORB::InvalidName& ex){        std::cerr << argv()[0] << ": can't resolve `NameService'" << std::endl;        return false;     }     CosNaming::NamingContext_var nc;     try {        nc = CosNaming::NamingContext::_narrow(obj.in());     }catch(const CORBA::SystemException& ex){        std::cerr << argv()[0] << ": can't narrow naming service" << std::endl;        return false;     }     try {        if(rebind){          nc->rebind(name,object);        }else{          try{            nc->bind(name,object);          }catch(const CosNaming::NamingContext::AlreadyBound&){            std::cerr<<argv()[0]<<":can't bind "<<objName<<" (AlreadyBound)"<< std::endl;            return false;          }        }     }catch(const CosNaming::NamingContext::CannotProceed&){        std::cerr<<argv()[0]<<": can't bind "<<objName<<" (CannotProceed)"<< std::endl;        return false;     }catch(const CosNaming::NamingContext::InvalidName&){        std::cerr<<argv()[0]<<":can't bind "<<objName<<" (InvalidName)"<< std::endl;        return false;     }     std::cout<<argv()[0]<<": binding completed successfully"<<std::endl; } CORBA::String_var ior ; try {   ior = orb->object_to_string(object); }catch(const CORBA::SystemException& ex){#ifdef CORBA_SYSTEM_EXCEPTION_IS_STREAMBLE   std::cerr << ex << std::endl;#else   std::cerr << "CORBA::SystemException" << std::endl; #endif   return false; } const char* fname = get_ior_fname(objName); if (fname!=NULL && strcmp(fname,"")!=0) {    std::ofstream ofs (fname);    if (ofs.bad()) {       std::cerr << argv()[0] << ": can't open file " << fname <<  std::endl;       perror(argv()[0]);       return false;    }    ofs << ior.in();    ofs.close(); } if (is_set("ior-stdout")) {    std::cout << ior << std::flush; }#ifdef ORBACUS CORBA::Object_var bmgrObj = orb->resolve_initial_references("BootManager"); OB::BootManager_var bootManager = OB::BootManager::_narrow(bmgrObj); PortableServer::ObjectId_var oid = PortableServer::string_to_ObjectId(objName); bootManager -> add_binding(oid.in(),object);#elif defined(OMNIORB) PortableServer::POA_var objPOA = p_servant->_default_POA(); CORBA::String_var objPOAName = objPOA->the_name(); if (strcmp(objPOAName.in(),"omniINSPOA")!=0) {   CORBA::Object_var insPOAObj = orb->resolve_initial_references("omniINSPOA");   PortableServer::POA_var insPOA = PortableServer::POA::_narrow(insPOAObj);   PortableServer::POAManager_var insPOAManager=insPOA->the_POAManager();   insPOAManager->activate();   PortableServer::ObjectId_var oid =                           PortableServer::string_to_ObjectId(objName);   insPOA->activate_object_with_id(oid.in(),p_servant); }#elif defined(RSSH_TAO)#ifdef TAO_HAVE_IORTABLE_ADAPTER CORBA::Object_var table = orb->resolve_initial_references ("IORTable"); IORTable::Table_var adapter = IORTable::Table::_narrow (table.in()); if (CORBA::is_nil(adapter.in())) {   cerr<<argv()[0]<<": nil IORTable reference"<<endl; } else {   adapter->bind (objName, ior.in ()); }#else ACE_CString ins(objName); if (orb->_tao_add_to_IOR_table(ins,object)!=0) {   return false; }#endif#endif return true;}ServiceOptions::ServiceRecord::ServiceRecord(){ ior_file_option_=CORBA::string_dup(""); ior_file_description_=CORBA::string_dup(""); ior_fname_=CORBA::string_dup("");}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -