Ice 3.7 C++11 API Reference
Service.h
Go to the documentation of this file.
1 //
2 // Copyright (c) ZeroC, Inc. All rights reserved.
3 //
4 
5 #ifndef ICE_SERVICE_H
6 #define ICE_SERVICE_H
7 
8 #include <Ice/Initialize.h>
9 #include <Ice/LoggerUtil.h>
10 
11 #ifdef _WIN32
12 # include <winsvc.h>
13 #endif
14 
15 namespace Ice
16 {
17 
24 {
25 public:
26 
28  virtual ~Service();
29 
34  virtual bool shutdown();
35 
40  virtual void interrupt();
41 
67  int main(int argc, const char* const argv[], const InitializationData& initData = InitializationData(),
68  int version = ICE_INT_VERSION);
69 
70 #ifdef _WIN32
71 
96  int main(int argc, const wchar_t* const argv[], const InitializationData& initData = InitializationData(),
97  int version = ICE_INT_VERSION);
98 #endif
99 
124  int main(const StringSeq& args, const InitializationData& initData = InitializationData(),
125  int version = ICE_INT_VERSION);
126 
131  Ice::CommunicatorPtr communicator() const;
132 
137  static Service* instance();
138 
143  bool service() const;
144 
151  std::string name() const;
152 
158  bool checkSystem() const;
159 
160 #ifdef _WIN32
161 
176  int run(int argc, const wchar_t* const argv[], const InitializationData& initData = InitializationData(),
177  int version = ICE_INT_VERSION);
178 #endif
179 
195  int run(int argc, const char* const argv[], const InitializationData& initData = InitializationData(),
196  int version = ICE_INT_VERSION);
197 
198 #ifdef _WIN32
199 
204  void configureService(const std::string& name);
205 
207  static void setModuleHandle(HMODULE);
209 
210 #else
211 
227  void configureDaemon(bool changeDirectory, bool closeFiles, const std::string& pidFile);
228 
229 #endif
230 
235  virtual void handleInterrupt(int sig);
236 
237 protected:
238 
247  virtual bool start(int argc, char* argv[], int& status) = 0;
248 
253  virtual void waitForShutdown();
254 
258  virtual bool stop();
259 
269  virtual Ice::CommunicatorPtr initializeCommunicator(int& argc, char* argv[], const InitializationData& initData,
270  int version);
271 
277  virtual void syserror(const std::string& msg);
278 
283  virtual void error(const std::string& msg);
284 
289  virtual void warning(const std::string& msg);
290 
295  virtual void trace(const std::string& msg);
296 
301  virtual void print(const std::string& msg);
302 
307 
312 
317 
322 
327 
332 
337 
338 private:
339 
340  Ice::LoggerPtr _logger;
341  Ice::CommunicatorPtr _communicator;
342  bool _nohup;
343  bool _service;
344  std::string _name;
345 
346  static Service* _instance;
347 
348 #ifdef _WIN32
349 
350  int runService(int, const char* const[], const InitializationData&);
351  void terminateService(DWORD);
352  bool waitForServiceState(SC_HANDLE, DWORD, SERVICE_STATUS&);
353  void showServiceStatus(const std::string&, SERVICE_STATUS&);
354 
355  SERVICE_STATUS_HANDLE _statusHandle;
356  std::vector<std::string> _serviceArgs;
357  InitializationData _initData;
358 
359 public:
360 
362  void serviceMain(int, const wchar_t* const[]);
363  void control(int);
365 
366 #else
367 
368  int runDaemon(int, char*[], const InitializationData&, int);
369 
370  bool _changeDirectory;
371  bool _closeFiles;
372  std::string _pidFile;
373 
374 #endif
375 };
376 
377 } // End of namespace Ice
378 
379 #endif
Ice::Service::ServicePrint
LoggerOutput< Service, Service *, &Service::print > ServicePrint
Logger utility class for a literal message.
Definition: Service.h:336
Ice::Service::trace
virtual void trace(const std::string &msg)
Logs trace information.
Ice::Service::shutdown
virtual bool shutdown()
Shutdown the service.
Ice::Service::ServiceError
LoggerOutput< Service, Service *, &Service::error > ServiceError
Logger utility class for an error.
Definition: Service.h:321
LoggerUtil.h
Ice::Service::ServiceTrace
LoggerOutput< Service, Service *, &Service::trace > ServiceTrace
Logger utility class for a trace message.
Definition: Service.h:331
Ice::LoggerOutput
Collects output and flushes it via a logger method.
Definition: LoggerUtil.h:106
Ice::Service::checkSystem
bool checkSystem() const
Determines whether the operating system supports running the program as a Win32 service or Unix daemo...
Ice::Service::ServiceWarning
LoggerOutput< Service, Service *, &Service::warning > ServiceWarning
Logger utility class for a warning.
Definition: Service.h:326
ICE_API
#define ICE_API
Definition: Config.h:197
Ice::Service::initializeCommunicator
virtual Ice::CommunicatorPtr initializeCommunicator(int &argc, char *argv[], const InitializationData &initData, int version)
Initializes a communicator.
Ice::Service::service
bool service() const
Indicates whether the program is running as a Win32 service or Unix daemon.
Ice::Service::Service
Service()
ICE_INT_VERSION
#define ICE_INT_VERSION
Definition: Config.h:272
Ice::Service::waitForShutdown
virtual void waitForShutdown()
Blocks until the service shuts down.
Ice::Service::error
virtual void error(const std::string &msg)
Logs an error.
Initialize.h
Ice::Service::start
virtual bool start(int argc, char *argv[], int &status)=0
Prepares a service for execution, including the creation and activation of object adapters and servan...
Ice::Service::enableInterrupt
void enableInterrupt()
Enables the signal handler to invoke interrupt() when a signal occurs.
Ice::Service::stop
virtual bool stop()
Cleans up resources after shutting down.
Ice::Service::~Service
virtual ~Service()
Ice::Service::main
int main(int argc, const char *const argv[], const InitializationData &initData=InitializationData(), int version=30710)
The primary entry point for services.
Ice::Service::disableInterrupt
void disableInterrupt()
Ignore signals.
Ice::Service::configureDaemon
void configureDaemon(bool changeDirectory, bool closeFiles, const std::string &pidFile)
Configures the program to run as a Unix daemon.
Ice::Service::instance
static Service * instance()
Obtains the Service singleton.
Ice::StringSeq
::std::vector<::std::string > StringSeq
A sequence of strings.
Definition: BuiltinSequences.h:96
Ice
Definition: BuiltinSequences.h:56
Ice::Service::interrupt
virtual void interrupt()
Notify the service about a signal interrupt.
Ice::Service::main
int main(const StringSeq &args, const InitializationData &initData=InitializationData(), int version=30710)
The primary entry point for services.
Ice::Service::syserror
virtual void syserror(const std::string &msg)
Logs a system error, which includes a description of the current system error code.
Ice::Service
A singleton class comparable to Ice::Application but also provides the low-level, platform-specific i...
Definition: Service.h:24
Ice::InitializationData
Encapsulates data to initialize a communicator.
Definition: Initialize.h:279
Ice::Service::name
std::string name() const
Obtains the program name.
Ice::Service::run
int run(int argc, const char *const argv[], const InitializationData &initData=InitializationData(), int version=30710)
Alternative entry point for services that use their own command-line options.
Ice::Service::print
virtual void print(const std::string &msg)
Logs a literal message.
Ice::Service::ServiceSysError
LoggerOutput< Service, Service *, &Service::syserror > ServiceSysError
Logger utility class for a system error.
Definition: Service.h:316
Ice::Service::communicator
Ice::CommunicatorPtr communicator() const
Obtains the communicator created by the service.
Ice::Service::warning
virtual void warning(const std::string &msg)
Logs a warning.
Ice::Service::handleInterrupt
virtual void handleInterrupt(int sig)
Invoked by the signal handler when it catches a signal.