-
Notifications
You must be signed in to change notification settings - Fork 0
/
demoserver.py
79 lines (64 loc) · 2.07 KB
/
demoserver.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#
# Test server base implementation, used by a lot of the tests,
# to avoid having to repeat this boilerplate code time after time.
#
import sys
import Pyro.naming
import Pyro.core
from Pyro.protocol import getHostname
from Pyro.errors import PyroError,NamingError
from threading import Thread
group = ':test' # the namespace group for all test servers
######## main program
# objClass = the class of the Pyro implementation object
# objName = the name for the object to register in the Name Server
# delegate = whether to use the delegate approach or the regular
# objBase subclassing approach
def start(objClass, objName, delegate=0):
# initialize the server and set the default namespace group
Pyro.core.initServer()
Pyro.config.PYRO_NS_DEFAULTGROUP=group
# locate the NS
daemon = Pyro.core.Daemon()
locator = Pyro.naming.NameServerLocator()
print 'searching for Naming Service...'
ns = locator.getNS()
print 'Naming Service found at',ns.URI.address,'('+(Pyro.protocol.getHostname(ns.URI.address) or '??')+') port',ns.URI.port
# make sure our namespace group exists
try:
ns.createGroup(group)
except NamingError:
pass
daemon.useNameServer(ns)
# connect a new object implementation (first unregister previous one)
try:
ns.unregister(objName)
except NamingError:
pass
if delegate:
print 'Delegation...'
# use Deletation approach
obj=Pyro.core.ObjBase()
obj.delegateTo(objClass())
daemon.connect(obj,objName)
else:
# use regular ObjBase subclassing approach
obj=objClass()
daemon.connect(obj,objName)
# enter the service loop.
print 'Server object "'+objName+'" ready.'
try:
# daemon.setTimeout(5)
#objClass().print_g()
#thread=Thread(target=objClass().mainloop)
#thread.start()
#print 'T started'
daemon.requestLoop()
except KeyboardInterrupt:
print 'shutting down gracefully.'
#to terminate the other thread
objClass().print_g()
#thread.join()
daemon.disconnect(obj)
daemon.shutdown()
print 'Exiting.'