diff options
Diffstat (limited to 'cpp/demo/IceGrid/allocate/Client.cpp')
-rw-r--r-- | cpp/demo/IceGrid/allocate/Client.cpp | 84 |
1 files changed, 24 insertions, 60 deletions
diff --git a/cpp/demo/IceGrid/allocate/Client.cpp b/cpp/demo/IceGrid/allocate/Client.cpp index 3a0587e8b1a..6ac664ce5b7 100644 --- a/cpp/demo/IceGrid/allocate/Client.cpp +++ b/cpp/demo/IceGrid/allocate/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,8 @@ 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 +132,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,11 +141,8 @@ 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 { @@ -158,11 +155,11 @@ HelloClient::run(int argc, char* argv[]) HelloPrx hello; try { - hello = HelloPrx::checkedCast(_session->allocateObjectById(communicator()->stringToIdentity("hello"))); + hello = HelloPrx::checkedCast(session->allocateObjectById(communicator()->stringToIdentity("hello"))); } catch(const IceGrid::ObjectNotRegisteredException&) { - hello = HelloPrx::checkedCast(_session->allocateObjectByType("::Demo::Hello")); + hello = HelloPrx::checkedCast(session->allocateObjectByType("::Demo::Hello")); } menu(); @@ -214,50 +211,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 |