From 3e3dd221a3b5a11b6715fdb8443203dac704b356 Mon Sep 17 00:00:00 2001 From: Dwayne Boone Date: Fri, 17 Mar 2006 14:10:35 +0000 Subject: Made IceBox a Ice::Service --- cpp/src/IceBox/Service.cpp | 144 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 144 insertions(+) create mode 100644 cpp/src/IceBox/Service.cpp (limited to 'cpp/src/IceBox/Service.cpp') diff --git a/cpp/src/IceBox/Service.cpp b/cpp/src/IceBox/Service.cpp new file mode 100644 index 00000000000..96e401290de --- /dev/null +++ b/cpp/src/IceBox/Service.cpp @@ -0,0 +1,144 @@ +// ********************************************************************** +// +// Copyright (c) 2003-2006 ZeroC, Inc. All rights reserved. +// +// This copy of Ice is licensed to you under the terms described in the +// ICE_LICENSE file included in this distribution. +// +// ********************************************************************** + +#include +#include +#include +#include + +using namespace std; +using namespace Ice; +using namespace IceBox; + +namespace IceBox +{ + +class IceBoxService : public Ice::Service +{ +public: + + IceBoxService(); + +protected: + + virtual bool start(int, char*[]); + virtual bool stop(); + +private: + + void usage(const std::string&); + ServiceManagerIPtr _serviceManager; +}; + +} + +IceBox::IceBoxService::IceBoxService() +{ +} + +bool +IceBox::IceBoxService::start(int argc, char* argv[]) +{ + IceUtil::Options opts; + opts.addOpt("h", "help"); + opts.addOpt("v", "version"); + + vector args; + try + { + args = opts.parse(argc, argv); + } + catch(const IceUtil::Options::BadOpt& e) + { + error(e.reason); + usage(argv[0]); + return false; + } + + if(opts.isSet("h") || opts.isSet("help")) + { + usage(argv[0]); + return false; + } + if(opts.isSet("v") || opts.isSet("version")) + { + print(ICE_STRING_VERSION); + return false; + } + + if(!args.empty()) + { + usage(argv[0]); + return false; + } + + _serviceManager = new ServiceManagerI(communicator(), argc, argv); + return _serviceManager->start(); +} + +bool +IceBox::IceBoxService::stop() +{ + if(_serviceManager) + { + _serviceManager->stop(); + _serviceManager = 0; + } + return true; +} + +void +IceBox::IceBoxService::usage(const string& appName) +{ + string options = + "Options:\n" + "-h, --help Show this message.\n" + "-v, --version Display the Ice version."; +#ifdef _WIN32 + if(checkSystem()) + { + options.append( + "\n" + "\n" + "--service NAME Run as the Windows service NAME.\n" + "\n" + "--install NAME [--display DISP] [--executable EXEC] [args]\n" + " Install as Windows service NAME. If DISP is\n" + " provided, use it as the display name,\n" + " otherwise NAME is used. If EXEC is provided,\n" + " use it as the service executable, otherwise\n" + " this executable is used. Any additional\n" + " arguments are passed unchanged to the\n" + " service at startup.\n" + "--uninstall NAME Uninstall Windows service NAME.\n" + "--start NAME [args] Start Windows service NAME. Any additional\n" + " arguments are passed unchanged to the\n" + " service.\n" + "--stop NAME Stop Windows service NAME." + ); + } +#else + options.append( + "\n" + "\n" + "--daemon Run as a daemon.\n" + "--noclose Do not close open file descriptors.\n" + "--nochdir Do not change the current working directory." + ); +#endif + print("Usage: " + appName + " [options]\n" + options); +} + +int +main(int argc, char* argv[]) +{ + IceBox::IceBoxService svc; + return svc.main(argc, argv); +} + -- cgit v1.2.3