diff options
author | Michi Henning <michi@zeroc.com> | 2008-03-06 16:33:31 +1000 |
---|---|---|
committer | Michi Henning <michi@zeroc.com> | 2008-03-06 16:33:31 +1000 |
commit | 2740c38d741b10018c66c97acaf67fa9cd9f0a87 (patch) | |
tree | 784657f6e99168e15b060f40e88c4a54f5c7e9e8 /cpp/demo/IceGrid/sessionActivation/Client.cpp | |
parent | Another fix to bug 2395. gacutil can actually do what we need, it's just that... (diff) | |
parent | Squashed commit of the following: (diff) | |
download | ice-2740c38d741b10018c66c97acaf67fa9cd9f0a87.tar.bz2 ice-2740c38d741b10018c66c97acaf67fa9cd9f0a87.tar.xz ice-2740c38d741b10018c66c97acaf67fa9cd9f0a87.zip |
Merge branch 'master' of ssh://cvs.zeroc.com/home/git/ice
Diffstat (limited to 'cpp/demo/IceGrid/sessionActivation/Client.cpp')
-rw-r--r-- | cpp/demo/IceGrid/sessionActivation/Client.cpp | 82 |
1 files changed, 22 insertions, 60 deletions
diff --git a/cpp/demo/IceGrid/sessionActivation/Client.cpp b/cpp/demo/IceGrid/sessionActivation/Client.cpp index 0592df04ccd..fe3648d795a 100644 --- a/cpp/demo/IceGrid/sessionActivation/Client.cpp +++ b/cpp/demo/IceGrid/sessionActivation/Client.cpp @@ -9,7 +9,7 @@ #include <IceUtil/IceUtil.h> #include <Ice/Ice.h> -#include <IceGrid/Registry.h> +#include <IceGrid/IceGrid.h> #include <Hello.h> using namespace std; @@ -69,18 +69,14 @@ class HelloClient : public Ice::Application { public: + HelloClient(); virtual int run(int, char*[]); - virtual void interruptCallback(int); private: void cleanup(); void menu(); string trim(const string&); - - IceUtil::Mutex _mutex; - IceGrid::SessionPrx _session; - SessionKeepAliveThreadPtr _keepAlive; }; int @@ -90,6 +86,15 @@ main(int argc, char* argv[]) return app.main(argc, argv, "config.client"); } +HelloClient::HelloClient() : + // + // Since this is an interactive demo we don't want any signal + // handling. + // + Application(Ice::NoSignalHandling) +{ +} + int HelloClient::run(int argc, char* argv[]) { @@ -101,12 +106,6 @@ HelloClient::run(int argc, char* argv[]) int status = EXIT_SUCCESS; - // - // Since this is an interactive demo we want the custom interrupt - // callback to be called when the process is interrupted. - // - callbackOnInterrupt(); - IceGrid::RegistryPrx registry = IceGrid::RegistryPrx::checkedCast(communicator()->stringToProxy("DemoIceGrid/Registry")); if(!registry) @@ -115,6 +114,7 @@ HelloClient::run(int argc, char* argv[]) return EXIT_FAILURE; } + IceGrid::SessionPrx session; while(true) { cout << "This demo accepts any user-id / password combination.\n"; @@ -131,8 +131,7 @@ HelloClient::run(int argc, char* argv[]) try { - IceUtil::Mutex::Lock sync(_mutex); - _session = registry->createSession(id, password); + session = registry->createSession(id, password); break; } catch(const IceGrid::PermissionDeniedException& ex) @@ -141,15 +140,12 @@ HelloClient::run(int argc, char* argv[]) } } - { - IceUtil::Mutex::Lock sync(_mutex); - _keepAlive = new SessionKeepAliveThread(_session, registry->getSessionTimeout() / 2); - _keepAlive->start(); - } + SessionKeepAliveThreadPtr keepAlive = new SessionKeepAliveThread(session, registry->getSessionTimeout() / 2); + keepAlive->start(); try { - HelloPrx hello = HelloPrx::checkedCast(_session->allocateObjectById(communicator()->stringToIdentity("hello"))); + HelloPrx hello = HelloPrx::checkedCast(session->allocateObjectById(communicator()->stringToIdentity("hello"))); menu(); @@ -206,51 +202,17 @@ HelloClient::run(int argc, char* argv[]) status = EXIT_FAILURE; } - cleanup(); - - return status; -} - -void -HelloClient::interruptCallback(int) -{ - cleanup(); - - try - { - communicator()->destroy(); - } - catch(const IceUtil::Exception& ex) - { - cerr << appName() << ": " << ex << endl; - } - catch(...) - { - cerr << appName() << ": unknown exception" << endl; - } - exit(EXIT_SUCCESS); -} - -void -HelloClient::cleanup() -{ - IceUtil::Mutex::Lock sync(_mutex); // // Destroy the keepAlive thread and the sesion object otherwise // the session will be kept allocated until the timeout occurs. // Destroying the session will release all allocated objects. // - if(_keepAlive) - { - _keepAlive->destroy(); - _keepAlive->getThreadControl().join(); - _keepAlive = 0; - } - if(_session) - { - _session->destroy(); - _session = 0; - } + keepAlive->destroy(); + keepAlive->getThreadControl().join(); + + session->destroy(); + + return status; } void |