Ice 3.7 C++11 API Reference
Application.h
Go to the documentation of this file.
1 //
2 // Copyright (c) ZeroC, Inc. All rights reserved.
3 //
4 
5 #ifndef ICE_APPLICATION_H
6 #define ICE_APPLICATION_H
7 
8 #include <Ice/Initialize.h>
9 #include <IceUtil/Mutex.h>
10 #include <IceUtil/Cond.h>
11 #include <IceUtil/CtrlCHandler.h>
12 
13 namespace Ice
14 {
15 
18 
19 #ifdef ICE_CPP11_MAPPING
20 
23 enum class SignalPolicy : unsigned char
24 #else
25 enum SignalPolicy
26 #endif
27 {
29  HandleSignals,
32 };
33 
40 {
41 public:
42 
48  Application(SignalPolicy policy = ICE_ENUM(SignalPolicy, HandleSignals));
49 
50 #ifdef ICE_CPP11_MAPPING
51  Application(const Application&) = delete;
53  Application& operator=(const Application&) = delete;
55 #endif
56 
57  virtual ~Application();
58 
73  int main(int argc, const char* const argv[], const InitializationData& initData = InitializationData(),
74  int version = ICE_INT_VERSION);
75 
90  int main(int argc, const char* const argv[], ICE_CONFIG_FILE_STRING configFile, int version = ICE_INT_VERSION);
91 
92 #ifdef _WIN32
93 
107  int main(int argc, const wchar_t* const argv[], const InitializationData& initData = InitializationData(),
108  int version = ICE_INT_VERSION);
109 
124  int main(int argc, const wchar_t* const argv[], ICE_CONFIG_FILE_STRING configFile, int version = ICE_INT_VERSION);
125 #endif
126 
140  int main(const StringSeq& args, const InitializationData& initData = InitializationData(),
141  int version = ICE_INT_VERSION);
142 
156  int main(const StringSeq& args, ICE_CONFIG_FILE_STRING configFile, int version = ICE_INT_VERSION);
157 
166  virtual int run(int argc, char* argv[]) = 0;
167 
177  virtual void interruptCallback(int signal);
178 
183  static const char* appName();
184 
195  static CommunicatorPtr communicator();
196 
201  static void destroyOnInterrupt();
202 
207  static void shutdownOnInterrupt();
208 
212  static void ignoreInterrupt();
213 
218  static void callbackOnInterrupt();
219 
224  static void holdInterrupt();
225 
229  static void releaseInterrupt();
230 
238  static bool interrupted();
239 
240 protected:
241 
245  virtual int doMain(int, char*[], const InitializationData&, Int);
246 
251 
256 
261  static bool _callbackInProgress;
262 
267  static bool _destroyed;
268 
273  static bool _interrupted;
274 
281  static std::string _appName;
282 
289  static CommunicatorPtr _communicator;
290 
298 
306 
307 private:
308 
309  static void holdInterruptCallback(int);
310  static void destroyOnInterruptCallback(int);
311  static void shutdownOnInterruptCallback(int);
312  static void callbackOnInterruptCallback(int);
313 
314 #ifndef ICE_CPP11_MAPPING
315  //
316  // Not defined, make Application non-copyable
317  //
318  Application(const Application&);
319  Application& operator=(const Application&);
320 #endif
321 
322 };
323 
324 }
325 
326 #endif
Ice::Application::~Application
virtual ~Application()
IceUtil::CtrlCHandler
Provides a portable way to handle Ctrl-C and Ctrl-C like signals.
Definition: CtrlCHandler.h:34
IceUtil::CtrlCHandlerCallback
std::function< void(int sig)> CtrlCHandlerCallback
Invoked when a signal occurs.
Definition: CtrlCHandler.h:21
IceUtil::Cond
Definition: Cond.h:53
Ice::Application::releaseInterrupt
static void releaseInterrupt()
Processes a stored signal (if any) using the current signal handling configuration.
Ice::Application::_appName
static std::string _appName
The application's name.
Definition: Application.h:281
Ice::Application::communicator
static CommunicatorPtr communicator()
Obtains the application's Communicator instance.
Ice::Application::_condVar
static IceUtil::Cond _condVar
Used to synchronize the main thread and the CtrlCHandler thread.
Definition: Application.h:255
ICE_ENUM
#define ICE_ENUM(CLASS, ENUMERATOR)
Definition: Config.h:360
Ice::Application::interruptCallback
virtual void interruptCallback(int signal)
Override this method to provide a custom application interrupt hook.
Ice::Application::callbackOnInterrupt
static void callbackOnInterrupt()
Configures the application to invoke interruptCallback when a signal occurs, thereby giving the subcl...
CtrlCHandler.h
Ice::Application::shutdownOnInterrupt
static void shutdownOnInterrupt()
Configures the application to shut down the communicator when one of the monitored signals is raised.
Ice::Application::_communicator
static CommunicatorPtr _communicator
The application's communicator.
Definition: Application.h:289
ICE_API
#define ICE_API
Definition: Config.h:197
Ice::Application::_destroyed
static bool _destroyed
True if the communicator has been destroyed.
Definition: Application.h:267
ICE_CONFIG_FILE_STRING
#define ICE_CONFIG_FILE_STRING
Definition: Initialize.h:22
Ice::Application::run
virtual int run(int argc, char *argv[])=0
run is given a copy of the remaining argc/argv arguments, after the communicator initialization in th...
ICE_INT_VERSION
#define ICE_INT_VERSION
Definition: Config.h:272
Ice::Application::main
int main(int argc, const char *const argv[], const InitializationData &initData=InitializationData(), int version=30710)
Call this main() from the global main().
Ice::Application::ignoreInterrupt
static void ignoreInterrupt()
Configures the application to ignore signals.
Ice::Application::main
int main(const StringSeq &args, const std::string &configFile, int version=30710)
Call this main() from the global main().
Ice::Application
Singleton helper class that simplifies Ice initialization, finalization and signal handling.
Definition: Application.h:40
Ice::Application::main
int main(const StringSeq &args, const InitializationData &initData=InitializationData(), int version=30710)
Call this main() from the global main().
Ice::Application::_application
static Application * _application
The singleton instance.
Definition: Application.h:305
Initialize.h
Ice::Application::_mutex
static IceUtil::Mutex _mutex
Used to synchronize the main thread and the CtrlCHandler thread.
Definition: Application.h:250
Cond.h
Ice::SignalPolicy::HandleSignals
@ HandleSignals
Enables signal handling.
Ice::Application::destroyOnInterrupt
static void destroyOnInterrupt()
Configures the application to destroy the communicator when one of the monitored signals is raised.
Ice::Application::main
int main(int argc, const char *const argv[], const std::string &configFile, int version=30710)
Call this main() from the global main().
Ice::Application::_callbackInProgress
static bool _callbackInProgress
True if a signal handling callback is currently executing.
Definition: Application.h:261
IceUtil::Mutex
Definition: Mutex.h:33
Ice::StringSeq
::std::vector<::std::string > StringSeq
A sequence of strings.
Definition: BuiltinSequences.h:96
Mutex.h
Ice
Definition: BuiltinSequences.h:56
Ice::Application::_interrupted
static bool _interrupted
True if an interrupt signal was received.
Definition: Application.h:273
Ice::Application::doMain
virtual int doMain(int, char *[], const InitializationData &, Int)
Helper function that implements the application logic.
Ice::Application::_signalPolicy
static SignalPolicy _signalPolicy
The signal-handling policy specified at construction.
Definition: Application.h:297
Ice::Application::appName
static const char * appName()
Obtains the application name, i.e., argv[0].
Ice::InitializationData
Encapsulates data to initialize a communicator.
Definition: Initialize.h:279
Ice::SignalPolicy
SignalPolicy
Determines how the Application class handles signals.
Definition: Application.h:27
Ice::Application::holdInterrupt
static void holdInterrupt()
Configures the application to ignore (but remember) a signal.
Ice::Application::interrupted
static bool interrupted()
Indicates whether a signal handler was triggered.
Ice::Int
int Int
The mapping for the Slice int type.
Definition: Config.h:54
Ice::Application::Application
Application(SignalPolicy policy=SignalPolicy ::HandleSignals)
The constructor configures the signal handling behavior.