#! /usr/bin/env python

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

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)

	bounceObj = bouncer.Bouncer("Client")
	daemon.connect(bounceObj)  # callback object

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

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

	print 'Calling server from main (a single call)...'
	result = server.process(["hello"], bounceObj.getProxy())
	print 'Result=',result

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


if __name__=='__main__':
	main()

