diff options
author | Dwayne Boone <dwayne@zeroc.com> | 2006-05-25 13:45:13 +0000 |
---|---|---|
committer | Dwayne Boone <dwayne@zeroc.com> | 2006-05-25 13:45:13 +0000 |
commit | db693e3cf4413690e5898d16b8651cf36b64a5bc (patch) | |
tree | a16dad9beb7811d225bd13b53356bc88af341cef /py/demo/IceGrid/allocate/Client.py | |
parent | Added IceGrid aloocate demo (diff) | |
download | ice-db693e3cf4413690e5898d16b8651cf36b64a5bc.tar.bz2 ice-db693e3cf4413690e5898d16b8651cf36b64a5bc.tar.xz ice-db693e3cf4413690e5898d16b8651cf36b64a5bc.zip |
Added IceGrid allocate demo
Diffstat (limited to 'py/demo/IceGrid/allocate/Client.py')
-rw-r--r-- | py/demo/IceGrid/allocate/Client.py | 118 |
1 files changed, 118 insertions, 0 deletions
diff --git a/py/demo/IceGrid/allocate/Client.py b/py/demo/IceGrid/allocate/Client.py new file mode 100644 index 00000000000..05f1f557270 --- /dev/null +++ b/py/demo/IceGrid/allocate/Client.py @@ -0,0 +1,118 @@ +#!/usr/bin/env python +# ********************************************************************** +# +# Copyright (c) 2003-2006 ZeroC, Inc. All rights reserved. +# +# This copy of Ice is licensed to you under the terms described in the +# ICE_LICENSE file included in this distribution. +# +# ********************************************************************** + +import sys, threading, Ice, IceGrid + +Ice.loadSlice('Hello.ice') +import Demo + +def menu(): + print """ +usage: +t: send greeting +s: shutdown server +x: exit +?: help +""" + +class SessionKeepAliveThread(threading.Thread): + def __init__(self, session): + threading.Thread.__init__(self) + self._session = session + self._timeout = 5 + self._terminated = False + self._cond = threading.Condition() + + def run(self): + self._cond.acquire() + try: + while not self._terminated: + self._cond.wait(self._timeout) + if self._terminated: + break + try: + self._session.keepAlive() + except Ice.LocalException, ex: + break + finally: + self._cond.release() + + def terminate(self): + self._cond.acquire() + try: + self._terminated = True + self._cond.notify() + finally: + self._cond.release() + +class Client(Ice.Application): + def run(self, args): + registry = IceGrid.RegistryPrx.checkedCast(self.communicator().stringToProxy("DemoIceGrid/Registry")) + if registry == None: + print self.appName() + ": cound not contact registry" + return False + + while True: + print "This demo accepts any user-id / password combination." + id = raw_input("user id: ").strip() + pw = raw_input("password: ").strip() + try: + session = registry.createSession(id, pw) + break + except IceGrid.PermissionDeniedException, ex: + print "permission denied:\n" + ex.reason + + keepAlive = SessionKeepAliveThread(session) + keepAlive.start() + + hello = None + try: + hello = Demo.HelloPrx.checkedCast(session.allocateObjectById(self.communicator().stringToIdentity("hello"))) + except IceGrid.AllocationException, ex: + pass + except IceGrid.ObjectNotRegisteredException: + pass + if hello == None: + try: + hello = Demo.HelloPrx.checkedCast(session.allocateObjectByType("::Demo::Hello")) + except IceGrid.AllocationException, ex: + print self.appName() + ": could not allocate object: " + ex.reason + return False + + menu() + + c = None + while c != 'x': + try: + c = raw_input("==> ") + if c == 't': + hello.sayHello() + elif c == 's': + hello.shutdown() + elif c == 'x': + pass # Nothing to do + elif c == '?': + menu() + else: + print "unknown command `" + c + "'" + menu() + except EOFError: + break + + keepAlive.terminate() + keepAlive.join() + + session.releaseObject(hello.ice_getIdentity()) + session.destroy(); + + return True + +app = Client() +sys.exit(app.main(sys.argv, "config.client")) |