summaryrefslogtreecommitdiff
path: root/cpp/demo/book/lifecycle/Client.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/demo/book/lifecycle/Client.cpp')
-rw-r--r--cpp/demo/book/lifecycle/Client.cpp24
1 files changed, 21 insertions, 3 deletions
diff --git a/cpp/demo/book/lifecycle/Client.cpp b/cpp/demo/book/lifecycle/Client.cpp
index 329d6bac954..25ce2362747 100644
--- a/cpp/demo/book/lifecycle/Client.cpp
+++ b/cpp/demo/book/lifecycle/Client.cpp
@@ -18,9 +18,11 @@ class FilesystemClient : virtual public Ice::Application
{
public:
virtual int run(int, char * []) {
- // Terminate cleanly on receipt of a signal.
+ // Since this is an interactive demo we want the custom
+ // interrupt callback to be called when the process is
+ // interrupted.
//
- shutdownOnInterrupt();
+ callbackOnInterrupt();
// Create a proxy for the root directory
//
@@ -40,7 +42,23 @@ public:
ParserPtr p = new Parser(rootDir);
return p->parse();
- };
+ }
+
+ virtual void interruptCallback(int) {
+ try
+ {
+ communicator()->destroy();
+ }
+ catch(const IceUtil::Exception& ex)
+ {
+ cerr << appName() << ": " << ex << endl;
+ }
+ catch(...)
+ {
+ cerr << appName() << ": unknown exception" << endl;
+ }
+ exit(EXIT_SUCCESS);
+ }
};
int