2 # **********************************************************************
4 # Copyright (c) 2003-2011 ZeroC, Inc. All rights reserved.
6 # This copy of Ice is licensed to you under the terms described in the
7 # ICE_LICENSE file included in this distribution.
9 # **********************************************************************
11 import os
, sys
, traceback
14 slice_dir
= Ice
.getSliceDir()
16 print sys
.argv
[0] + ': Slice directory not found.'
19 Ice
.loadSlice("'-I" + slice_dir
+ "' Test.ice")
22 class ServerLocatorRegistry(Test
.TestLocatorRegistry
):
27 def setAdapterDirectProxy_async(self
, cb
, adapter
, obj
, current
=None):
29 self
._adapters
[adapter
] = obj
31 self
._adapters
.pop(adapter
)
34 def setReplicatedAdapterDirectProxy_async(self
, cb
, adapter
, replica
, obj
, current
=None):
36 self
._adapters
[adapter
] = obj
37 self
._adapters
[replica
] = obj
39 self
._adapters
.pop(adapter
)
40 self
._adapters
.pop(replica
)
43 def setServerProcessProxy_async(self
, id, proxy
, current
=None):
46 def addObject(self
, obj
, current
=None):
47 self
._objects
[obj
.ice_getIdentity()] = obj
49 def getAdapter(self
, adapter
):
50 if not self
._adapters
.has_key(adapter
):
51 raise Ice
.AdapterNotFoundException()
52 return self
._adapters
[adapter
]
54 def getObject(self
, id):
55 if not self
._objects
.has_key(id):
56 raise Ice
.ObjectNotFoundException()
57 return self
._objects
[id]
59 class ServerLocator(Test
.TestLocator
):
61 def __init__(self
, registry
, registryPrx
):
62 self
._registry
= registry
63 self
._registryPrx
= registryPrx
64 self
._requestCount
= 0
66 def findObjectById_async(self
, response
, id, current
=None):
67 self
._requestCount
+= 1
68 response
.ice_response(self
._registry
.getObject(id))
70 def findAdapterById_async(self
, response
, id, current
=None):
71 self
._requestCount
+= 1
72 response
.ice_response(self
._registry
.getAdapter(id))
74 def getRegistry(self
, current
=None):
75 return self
._registryPrx
77 def getRequestCount(self
, current
=None):
78 return self
._requestCount
80 class ServerManagerI(Test
.ServerManager
):
81 def __init__(self
, registry
, initData
):
82 self
._registry
= registry
83 self
._communicators
= []
84 self
._initData
= initData
85 self
._initData
.properties
.setProperty("TestAdapter.Endpoints", "default")
86 self
._initData
.properties
.setProperty("TestAdapter.AdapterId", "TestAdapter")
87 self
._initData
.properties
.setProperty("TestAdapter.ReplicaGroupId", "ReplicatedAdapter")
88 self
._initData
.properties
.setProperty("TestAdapter2.Endpoints", "default")
89 self
._initData
.properties
.setProperty("TestAdapter2.AdapterId", "TestAdapter2")
91 def startServer(self
, current
=None):
94 # Simulate a server: create a new communicator and object
95 # adapter. The object adapter is started on a system allocated
96 # port. The configuration used here contains the Ice.Locator
97 # configuration variable. The new object adapter will register
98 # its endpoints with the locator and create references containing
99 # the adapter id instead of the endpoints.
101 serverCommunicator
= Ice
.initialize(data
=initData
)
102 self
._communicators
.append(serverCommunicator
)
103 adapter
= serverCommunicator
.createObjectAdapter("TestAdapter")
105 adapter2
= serverCommunicator
.createObjectAdapter("TestAdapter2")
107 locator
= serverCommunicator
.stringToProxy("locator:default -p 12010")
108 adapter
.setLocator(Ice
.LocatorPrx
.uncheckedCast(locator
))
109 adapter2
.setLocator(Ice
.LocatorPrx
.uncheckedCast(locator
))
111 object = TestI(adapter
, adapter2
, self
._registry
)
112 self
._registry
.addObject(adapter
.add(object, communicator
.stringToIdentity("test")))
113 self
._registry
.addObject(adapter
.add(object, communicator
.stringToIdentity("test2")))
114 adapter
.add(object, communicator
.stringToIdentity("test3"))
119 def shutdown(self
, current
=None):
120 for i
in self
._communicators
:
122 current
.adapter
.getCommunicator().shutdown()
124 class HelloI(Test
.Hello
):
125 def sayHello(self
, current
=None):
128 class TestI(Test
.TestIntf
):
129 def __init__(self
, adapter
, adapter2
, registry
):
130 self
._adapter
1 = adapter
131 self
._adapter
2 = adapter2
132 self
._registry
= registry
133 self
._registry
.addObject(self
._adapter
1.add(HelloI(), communicator
.stringToIdentity("hello")))
135 def shutdown(self
, current
=None):
136 self
._adapter
1.getCommunicator().shutdown()
138 def getHello(self
, current
=None):
139 return Test
.HelloPrx
.uncheckedCast(self
._adapter
1.createIndirectProxy(communicator
.stringToIdentity("hello")))
141 def getReplicatedHello(self
, current
=None):
142 return Test
.HelloPrx
.uncheckedCast(self
._adapter
1.createProxy(communicator
.stringToIdentity("hello")))
144 def migrateHello(self
, current
=None):
145 id = communicator
.stringToIdentity("hello")
147 self
._registry
.addObject(self
._adapter
2.add(self
._adapter
1.remove(id), id))
148 except Ice
.NotRegisteredException
:
149 self
._registry
.addObject(self
._adapter
1.add(self
._adapter
2.remove(id), id))
151 def run(args
, communicator
, initData
):
153 # Register the server manager. The server manager creates a new
154 # 'server' (a server isn't a different process, it's just a new
155 # communicator and object adapter).
157 properties
= communicator
.getProperties()
158 properties
.setProperty("Ice.ThreadPool.Server.Size", "2")
159 properties
.setProperty("ServerManager.Endpoints", "default -p 12010:udp")
161 adapter
= communicator
.createObjectAdapter("ServerManager")
164 # We also register a sample server locator which implements the
165 # locator interface, this locator is used by the clients and the
166 # 'servers' created with the server manager interface.
168 registry
= ServerLocatorRegistry()
169 registry
.addObject(adapter
.createProxy(communicator
.stringToIdentity("ServerManager")))
170 object = ServerManagerI(registry
, initData
)
171 adapter
.add(object, communicator
.stringToIdentity("ServerManager"))
173 registryPrx
= Ice
.LocatorRegistryPrx
.uncheckedCast(adapter
.add(registry
, communicator
.stringToIdentity("registry")))
175 locator
= ServerLocator(registry
, registryPrx
)
176 adapter
.add(locator
, communicator
.stringToIdentity("locator"))
179 communicator
.waitForShutdown()
184 initData
= Ice
.InitializationData()
185 initData
.properties
= Ice
.createProperties(sys
.argv
)
186 communicator
= Ice
.initialize(sys
.argv
, initData
)
187 status
= run(sys
.argv
, communicator
, initData
)
189 traceback
.print_exc()
194 communicator
.destroy()
196 traceback
.print_exc()