int run(const Ice::StringSeq& args) { IceUtilInternal::Options opts; opts.addOpt("h", "help"); opts.addOpt("v", "version"); vector<string> commands; try { commands = opts.parse(args); } catch(const IceUtilInternal::BadOptException& e) { consoleErr << e.reason << endl; usage(args[0]); return 1; } if(opts.isSet("help")) { usage(args[0]); return 0; } if(opts.isSet("version")) { consoleOut << ICE_STRING_VERSION << endl; return 0; } if(commands.empty()) { usage(args[0]); return 1; } Ice::ObjectPrxPtr base = communicator->propertyToProxy("IceBoxAdmin.ServiceManager.Proxy"); if(base == 0) { // // The old deprecated way to retrieve the service manager proxy // Ice::PropertiesPtr properties = communicator->getProperties(); Ice::Identity managerIdentity; managerIdentity.category = properties->getPropertyWithDefault("IceBox.InstanceName", "IceBox"); managerIdentity.name = "ServiceManager"; string managerProxy; if(properties->getProperty("Ice.Default.Locator").empty()) { string managerEndpoints = properties->getProperty("IceBox.ServiceManager.Endpoints"); if(managerEndpoints.empty()) { consoleErr << args[0] << ": property `IceBoxAdmin.ServiceManager.Proxy' is not set" << endl; return 1; } managerProxy = "\"" + communicator->identityToString(managerIdentity) + "\" :" + managerEndpoints; } else { string managerAdapterId = properties->getProperty("IceBox.ServiceManager.AdapterId"); if(managerAdapterId.empty()) { consoleErr << args[0] << ": property `IceBoxAdmin.ServiceManager.Proxy' is not set" << endl; return 1; } managerProxy = "\"" + communicator->identityToString(managerIdentity) + "\" @" + managerAdapterId; } base = communicator->stringToProxy(managerProxy); } IceBox::ServiceManagerPrxPtr manager = ICE_CHECKED_CAST(IceBox::ServiceManagerPrx, base); if(!manager) { consoleErr << args[0] << ": `" << base << "' is not an IceBox::ServiceManager" << endl; return 1; } for(vector<string>::const_iterator r = commands.begin(); r != commands.end(); ++r) { if((*r) == "shutdown") { manager->shutdown(); } else if((*r) == "start") { if(++r == commands.end()) { consoleErr << args[0] << ": no service name specified." << endl; return 1; } try { manager->startService(*r); } catch(const IceBox::NoSuchServiceException&) { consoleErr << args[0] << ": unknown service `" << *r << "'" << endl; return 1; } catch(const IceBox::AlreadyStartedException&) { consoleErr << args[0] << ": service already started." << endl; } } else if((*r) == "stop") { if(++r == commands.end()) { consoleErr << args[0] << ": no service name specified." << endl; return 1; } try { manager->stopService(*r); } catch(const IceBox::NoSuchServiceException&) { consoleErr << args[0] << ": unknown service `" << *r << "'" << endl; return 1; } catch(const IceBox::AlreadyStoppedException&) { consoleErr << args[0] << ": service already stopped." << endl; } } else { consoleErr << args[0] << ": unknown command `" << *r << "'" << endl; usage(args[0]); return 1; } } return 0; }
int Client::run(int argc, char* argv[]) { IceUtilInternal::Options opts; opts.addOpt("h", "help"); opts.addOpt("v", "version"); vector<string> commands; try { commands = opts.parse(argc, const_cast<const char**>(argv)); } catch(const IceUtilInternal::BadOptException& e) { cerr << e.reason << endl; usage(); return EXIT_FAILURE; } if(opts.isSet("help")) { usage(); return EXIT_SUCCESS; } if(opts.isSet("version")) { cout << ICE_STRING_VERSION << endl; return EXIT_SUCCESS; } if(commands.empty()) { usage(); return EXIT_FAILURE; } ObjectPrxPtr base = communicator()->propertyToProxy("IceBoxAdmin.ServiceManager.Proxy"); if(base == 0) { // // The old deprecated way to retrieve the service manager proxy // PropertiesPtr properties = communicator()->getProperties(); Identity managerIdentity; managerIdentity.category = properties->getPropertyWithDefault("IceBox.InstanceName", "IceBox"); managerIdentity.name = "ServiceManager"; string managerProxy; if(properties->getProperty("Ice.Default.Locator").empty()) { string managerEndpoints = properties->getProperty("IceBox.ServiceManager.Endpoints"); if(managerEndpoints.empty()) { cerr << appName() << ": property `IceBoxAdmin.ServiceManager.Proxy' is not set" << endl; return EXIT_FAILURE; } managerProxy = "\"" + communicator()->identityToString(managerIdentity) + "\" :" + managerEndpoints; } else { string managerAdapterId = properties->getProperty("IceBox.ServiceManager.AdapterId"); if(managerAdapterId.empty()) { cerr << appName() << ": property `IceBoxAdmin.ServiceManager.Proxy' is not set" << endl; return EXIT_FAILURE; } managerProxy = "\"" + communicator()->identityToString(managerIdentity) + "\" @" + managerAdapterId; } base = communicator()->stringToProxy(managerProxy); } IceBox::ServiceManagerPrxPtr manager = ICE_CHECKED_CAST(IceBox::ServiceManagerPrx, base); if(!manager) { cerr << appName() << ": `" << base << "' is not an IceBox::ServiceManager" << endl; return EXIT_FAILURE; } Ice::SliceChecksumDict serverChecksums = manager->getSliceChecksums(); Ice::SliceChecksumDict localChecksums = Ice::sliceChecksums(); for(Ice::SliceChecksumDict::const_iterator p = localChecksums.begin(); p != localChecksums.end(); ++p) { Ice::SliceChecksumDict::const_iterator q = serverChecksums.find(p->first); if(q == serverChecksums.end()) { cerr << appName() << ": server is using unknown Slice type `" << q->first << "'" << endl; } else if(p->second != q->second) { cerr << appName() << ": server is using a different Slice definition of `" << q->first << "'" << endl; } } for(vector<string>::const_iterator r = commands.begin(); r != commands.end(); ++r) { if((*r) == "shutdown") { manager->shutdown(); } else if((*r) == "start") { if(++r == commands.end()) { cerr << appName() << ": no service name specified." << endl; return EXIT_FAILURE; } try { manager->startService(*r); } catch(const IceBox::NoSuchServiceException&) { cerr << appName() << ": unknown service `" << *r << "'" << endl; return EXIT_FAILURE; } catch(const IceBox::AlreadyStartedException&) { cerr << appName() << ": service already started." << endl; } } else if((*r) == "stop") { if(++r == commands.end()) { cerr << appName() << ": no service name specified." << endl; return EXIT_FAILURE; } try { manager->stopService(*r); } catch(const IceBox::NoSuchServiceException&) { cerr << appName() << ": unknown service `" << *r << "'" << endl; return EXIT_FAILURE; } catch(const IceBox::AlreadyStoppedException&) { cerr << appName() << ": service already stopped." << endl; } } else { cerr << appName() << ": unknown command `" << *r << "'" << endl; usage(); return EXIT_FAILURE; } } return EXIT_SUCCESS; }