#! /usr/bin/env python

import time, random
import Pyro.core
import Pyro.naming
from Pyro.errors import *
from threading import Thread
import bouncer2

abort=0

def PyroLoop(daemon):
	global abort
	print 'Pyro daemon loop thread is running.'
	daemon.requestLoop(lambda: not abort) 
	print 'Pyro daemon loop thread is exiting.'


def main():
	global abort
	Pyro.core.initServer()
	Pyro.core.initClient()
	daemon = Pyro.core.Daemon()
	NS = Pyro.naming.NameServerLocator().getNS()
	daemon.useNameServer(NS)

	server = NS.resolve(':test.bouncer2').getProxy()

	bounceObj = bouncer2.Bouncer("Client")
	daemon.connect(bounceObj)  # callback object
	
	# register callback obj on server
	server.register(bounceObj.getProxy())
	# register server as 'callback' on own object
	bounceObj.register(server)

	# create a thread that handles callback requests
	thread=Thread(target=PyroLoop, args=(daemon,))
	thread.start()

	print 'This bounce example will deadlock!'
	print 'Read the manual or Readme.txt for more info why this is the case!'

	print 'Calling server...'
	result = server.process(["hello"])
	print 'Result=',result

	abort=1
	thread.join()
	print 'Exiting.'


if __name__=='__main__':
	main()

