diff options
Diffstat (limited to 'cpp/demo/Ice/invoke/Client.cpp')
-rw-r--r-- | cpp/demo/Ice/invoke/Client.cpp | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/cpp/demo/Ice/invoke/Client.cpp b/cpp/demo/Ice/invoke/Client.cpp index 3a687a5e29f..0bfe715f5d1 100644 --- a/cpp/demo/Ice/invoke/Client.cpp +++ b/cpp/demo/Ice/invoke/Client.cpp @@ -18,6 +18,7 @@ class InvokeClient : public Ice::Application public: virtual int run(int, char*[]); + virtual void interruptCallback(int); private: @@ -52,6 +53,12 @@ operator<<(ostream& out, Demo::Color c) int InvokeClient::run(int argc, char* argv[]) { + // + // Since this is an interactive demo we want the custom interrupt + // callback to be called when the process is interrupted. + // + userCallbackOnInterrupt(); + Ice::ObjectPrx obj = communicator()->propertyToProxy("Printer.Proxy"); menu(); @@ -293,6 +300,24 @@ InvokeClient::run(int argc, char* argv[]) } void +InvokeClient::interruptCallback(int) +{ + try + { + communicator()->destroy(); + } + catch(const IceUtil::Exception& ex) + { + cerr << appName() << ": " << ex << endl; + } + catch(...) + { + cerr << appName() << ": unknown exception" << endl; + } + exit(EXIT_SUCCESS); +} + +void InvokeClient::menu() { cout << |