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

📄 omnimapper.cc

📁 编译工具
💻 CC
字号:
// -*- Mode: C++; -*-//                          Package   : omniMapper// omniMapper.cc            Author    : Duncan Grisby (dpg1)////    Copyright (C) 2000 AT&T Laboratories Cambridge////  This file is part of omniMapper.////  omniMapper is free software; you can redistribute it and/or modify//  it under the terms of the GNU General Public License as published//  by the Free Software Foundation; either version 2 of the License,//  or (at your option) any later version.////  This program is distributed in the hope that it will be useful,//  but WITHOUT ANY WARRANTY; without even the implied warranty of//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU//  General Public License for more details.////  You should have received a copy of the GNU General Public License//  along with this program; if not, write to the Free Software//  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA//  02111-1307, USA.// $Id: omniMapper.cc,v 1.2.2.10 2004/05/25 13:47:58 dgrisby Exp $// $Log: omniMapper.cc,v $// Revision 1.2.2.10  2004/05/25 13:47:58  dgrisby// Improved usage message.//// Revision 1.2.2.9  2003/06/03 17:36:58  dgrisby// Std stream patch broke some platforms.//// Revision 1.2.2.8  2003/05/09 13:32:59  dgrisby// Use standard iostreams if available.//// Revision 1.2.2.7  2002/01/16 12:35:46  dpg1// omniMapper used -ORBendpoint instead of -ORBendPoint.//// Revision 1.2.2.6  2001/10/17 16:49:11  dpg1// Minor error message tweaks//// Revision 1.2.2.5  2001/09/19 17:33:17  dpg1// Update omniMapper and omniNames INS mapper to ORB core changes from a// while ago.//// Revision 1.2.2.4  2001/06/08 17:12:08  dpg1// Merge all the bug fixes from omni3_develop.//// Revision 1.2.2.3  2001/04/19 09:39:05  sll// Big checkin with the brand new internal APIs.//// Revision 1.2.2.2  2000/10/09 16:20:56  sll// Ported to omniORB 4 API.//// Revision 1.2.2.1  2000/07/17 10:35:38  sll// Merged from omni3_develop the diff between omni3_0_0_pre3 and omni3_0_0.//// Revision 1.3  2000/07/13 15:26:04  dpg1// Merge from omni3_develop for 3.0 release.//// Revision 1.1.2.2  2000/06/19 15:25:57  dpg1// Explicit cast to (const char*) when using String_var with logger.//// Revision 1.1.2.1  2000/05/24 17:15:37  dpg1// Added omniMapper.//#include <omniORB4/CORBA.h>#include <stdlib.h>#include <stdio.h>#include <ctype.h>#ifdef HAVE_STD#  include <iostream>#  include <fstream>   using namespace std;#else#  include <iostream.h>#  include <fstream.h>#endifstatic voidusage(){  cerr << endl       << "usage: omniMapper [-port <port>]" << endl       << "                  [-config <config file>]" << endl       << "                  [-v]" << endl       << endl       << "With no -port argument, the standard default of "       << IIOP::DEFAULT_CORBALOC_PORT << " is used." << endl       << endl       << "Use -config to specify the location of omniMapper's config file."       << endl << endl       << "Alternatively, set the environment variable " << CONFIG_FILE_ENV_VAR       << endl       << "or use the default " << CONFIG_FILE_DEFAULT << "." << endl       << endl       << "Use -v to verbosely record what's going on." << endl;  exit(1);}class Mapper :  public PortableServer::RefCountServantBase{public:  Mapper(char* id, CORBA::Object_ptr obj);  ~Mapper() {}  CORBA::Boolean _dispatch(omniCallHandle&) { do_redir(); return 1; }  CORBA::Boolean _is_a(const char* id) { do_redir(); return 1; }  void do_redir();private:  CORBA::String_var id_;  CORBA::Object_var obj_;};// GlobalsCORBA::ORB_var                 orb;PortableServer::POA_var        inspoa;int                            verbose;Mapper::Mapper(char* id, CORBA::Object_ptr obj)  : id_(id), obj_(obj){  int oidlen = strlen(id);  PortableServer::ObjectId oid(oidlen, oidlen, (CORBA::Octet*)id, 0);  inspoa->activate_object_with_id(oid, this);  if (verbose)    cout << "Initialising `" << id << "'." << endl;}voidMapper::do_redir(){  if (verbose) {    CORBA::String_var ior = orb->object_to_string(obj_);    cout << "Mapping `" << (const char*)id_	 << "' to " << (const char*)ior << endl;  }  throw omniORB::LOCATION_FORWARD(CORBA::Object::_duplicate(obj_),0);}static char* getString(istream& file) {  int   bufsz     = 512;  char* buf       = new char[bufsz];  char* p         = buf;  char  c;  // Skip white space and comments  do {    if (!file.get(c)) { // IO problem or EOF      delete [] buf;      return 0;    }    if (c == '#') {      do {	if (!file.get(c)) {	  delete [] buf;	  return 0;	}      } while (c != '\n');    }  } while (isspace(c));  *p++ = c;  // Now get the rest of the string  while (1) {    if (!file.get(c)) {      delete [] buf;      return 0;    }    if (isspace(c)) {      *p = '\0';      return buf;    }    *p++ = c;    if (p == (buf + bufsz)) {      // buffer is too small      char *obuf = buf;      buf = new char[bufsz+bufsz];      memcpy(buf, obuf, bufsz);      delete [] obuf;      p = buf + bufsz;      bufsz += bufsz;    }  }}static intprocessConfigFile(const char* configFile){#ifdef __WIN32__  ifstream cfile(configFile, ios::in);#else  ifstream cfile(configFile);#endif  if (!cfile) {    cerr << "Error: cannot open config file `" << configFile << "'." << endl;    return 0;  }  Mapper*           m;  char*             id;  CORBA::String_var ior;  CORBA::Object_ptr obj;  int               count = 0;  while (!cfile.eof()) {    id  = getString(cfile);    if (!id) break;    ior = getString(cfile);    if (!(char*)ior) {      cerr << "Error: config file ended unexpectedly." << endl;      exit(1);    }    try {      obj = orb->string_to_object(ior);    }    catch (...) {      cerr << "Error: invalid IOR string `"	   << (const char*)ior << "'." << endl;      exit(1);    }    m = new Mapper(id, obj);    m->_remove_ref();    count++;  }  if (count == 0) {    cerr << "Error: config file had no entries." << endl;    exit(1);  }  return count;}static voidinsertArgs(int& argc, char**& argv, int idx, int nargs){  char** newArgv = new char*[argc+nargs];  int i;  for (i = 0; i < idx; i++) {    newArgv[i] = argv[i];  }  for (i = idx; i < argc; i++) {    newArgv[i+nargs] = argv[i];  }  argv = newArgv;  argc += nargs;}intmain(int argc, char** argv){  int        port        = 0;  const char *configFile = 0;  for (int i=1; i < argc; i++) {    if (!strcmp(argv[i], "-port")) {      if (argc < i+1) usage();      port = atoi(argv[++i]);    }    else if (!strcmp(argv[i], "-config")) {      if (argc < i+1) usage();      configFile = argv[++i];    }    else if (!strcmp(argv[i], "-v")) {      verbose = 1;    }  }  if (port == 0) port = IIOP::DEFAULT_CORBALOC_PORT;  insertArgs(argc, argv, 1, 2);  argv[1] = strdup("-ORBendPoint");  argv[2] = new char[20];  sprintf(argv[2], "giop:tcp::%d", port);  try {    orb = CORBA::ORB_init(argc, argv);  }  catch (CORBA::INITIALIZE& ex) {    cerr << "Failed to initialise the ORB." << endl;    usage();    return 1;  }  // Get hold of the INS POA and activate it  try {    CORBA::Object_var obj = orb->resolve_initial_references("omniINSPOA");    inspoa                = PortableServer::POA::_narrow(obj);    PortableServer::POAManager_var pm = inspoa->the_POAManager();    pm->activate();  }  catch (CORBA::INITIALIZE& ex) {    cerr << "Failed to initialise the POA. "	 << "Is omniMapper already running?" << endl;    usage();    return 1;  }  // Figure out config file name  if (!configFile &&      (configFile = getenv(CONFIG_FILE_ENV_VAR)) == 0)    configFile = CONFIG_FILE_DEFAULT;  if (!processConfigFile(configFile)) {    usage();    exit(1);  }  if (verbose)    cout << "omniMapper running." << endl;  orb->run();  return 0;}

⌨️ 快捷键说明

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