summaryrefslogtreecommitdiff
path: root/cpp/src
diff options
context:
space:
mode:
authorMarc Laukien <marc@zeroc.com>2004-08-16 16:59:29 +0000
committerMarc Laukien <marc@zeroc.com>2004-08-16 16:59:29 +0000
commitca3ea1d280a6c577fbbaf8a8121d20a71480ca7e (patch)
tree94bfb8ff009ad673da068eca49d1a2237cb32123 /cpp/src
parentmore changes (diff)
downloadice-ca3ea1d280a6c577fbbaf8a8121d20a71480ca7e.tar.bz2
ice-ca3ea1d280a6c577fbbaf8a8121d20a71480ca7e.tar.xz
ice-ca3ea1d280a6c577fbbaf8a8121d20a71480ca7e.zip
more changes
Diffstat (limited to 'cpp/src')
-rw-r--r--cpp/src/Glacier2/.depend8
-rw-r--r--cpp/src/Glacier2/Blobject.cpp2
-rw-r--r--cpp/src/Glacier2/Glacier2Router.cpp24
-rw-r--r--cpp/src/Glacier2/Makefile2
-rw-r--r--cpp/src/Glacier2/RouterI.cpp121
-rw-r--r--cpp/src/Glacier2/RouterI.h53
-rw-r--r--cpp/src/Glacier2/ServantLocator.cpp67
-rw-r--r--cpp/src/Glacier2/ServantLocator.h46
-rw-r--r--cpp/src/Glacier2/ServerBlobject.cpp1
-rw-r--r--cpp/src/Glacier2/SessionRouterI.cpp172
-rw-r--r--cpp/src/Glacier2/SessionRouterI.h58
11 files changed, 428 insertions, 126 deletions
diff --git a/cpp/src/Glacier2/.depend b/cpp/src/Glacier2/.depend
index ad8ac8b3164..e7ee53bcf17 100644
--- a/cpp/src/Glacier2/.depend
+++ b/cpp/src/Glacier2/.depend
@@ -1,7 +1,9 @@
-Glacier2.o: Glacier2.cpp ../../include/IceUtil/Base64.h ../../include/IceUtil/Config.h ../../include/Ice/Application.h ../../include/Ice/Ice.h ../../include/Ice/Initialize.h ../../include/Ice/CommunicatorF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/IceUtil/Shared.h ../../include/Ice/PropertiesF.h ../../include/Ice/InstanceF.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/Proxy.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionF.h ../../include/Ice/EndpointF.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/TransportInfoF.h ../../include/Ice/Identity.h ../../include/Ice/Object.h ../../include/IceUtil/GCShared.h ../../include/IceUtil/GCRecMutex.h ../../include/IceUtil/RecMutex.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../../include/Ice/LocalException.h ../../include/Ice/Properties.h ../../include/Ice/Logger.h ../../include/Ice/LoggerUtil.h ../../include/Ice/LoggerF.h ../../include/Ice/Stats.h ../../include/Ice/Communicator.h ../../include/Ice/StatsF.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../../include/Ice/PluginF.h ../../include/Ice/ObjectFactory.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/FacetMap.h ../../include/Ice/ServantLocator.h ../../include/Ice/IdentityUtil.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/IncomingAsync.h ../../include/Ice/Process.h ../../include/Ice/TransportInfo.h ../../include/Ice/Functional.h ../../include/IceUtil/Functional.h ../Glacier2/ServantLocator.h ../Glacier2/ClientBlobject.h ../../include/Ice/RoutingTableF.h ../Glacier2/Blobject.h ../Glacier2/RequestQueue.h ../../include/IceUtil/Thread.h ../Glacier2/ServerBlobject.h
-ServantLocator.o: ServantLocator.cpp ../../include/Ice/RoutingTable.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/RoutingTableF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../../include/Ice/Identity.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../Glacier2/ServantLocator.h ../Glacier2/ClientBlobject.h ../Glacier2/Blobject.h ../../include/Ice/Ice.h ../../include/Ice/Initialize.h ../../include/Ice/CommunicatorF.h ../../include/Ice/PropertiesF.h ../../include/Ice/InstanceF.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionF.h ../../include/Ice/EndpointF.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/TransportInfoF.h ../../include/Ice/Object.h ../../include/IceUtil/GCShared.h ../../include/IceUtil/GCRecMutex.h ../../include/IceUtil/RecMutex.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../../include/Ice/LocalException.h ../../include/Ice/Properties.h ../../include/Ice/Logger.h ../../include/Ice/LoggerUtil.h ../../include/Ice/LoggerF.h ../../include/Ice/Stats.h ../../include/Ice/Communicator.h ../../include/Ice/StatsF.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../../include/Ice/PluginF.h ../../include/Ice/ObjectFactory.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/FacetMap.h ../../include/Ice/ServantLocator.h ../../include/Ice/IdentityUtil.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/IncomingAsync.h ../../include/Ice/Process.h ../../include/Ice/Application.h ../../include/Ice/TransportInfo.h ../../include/Ice/Functional.h ../../include/IceUtil/Functional.h ../Glacier2/RequestQueue.h ../../include/IceUtil/Thread.h ../Glacier2/ServerBlobject.h ../Glacier2/RouterI.h ../../include/Glacier/SessionManagerF.h ../../include/Glacier/SessionF.h ../../include/Glacier/Router.h ../../include/Ice/UserExceptionFactory.h ../../include/Ice/FactoryTable.h ../../include/Ice/FactoryTableDef.h ../../include/IceUtil/StaticMutex.h ../../include/Ice/UserExceptionFactoryF.h ../../include/Ice/Router.h
-RouterI.o: RouterI.cpp ../../include/Ice/RoutingTable.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/RoutingTableF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../../include/Ice/Identity.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Glacier/Session.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionF.h ../../include/Ice/EndpointF.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/TransportInfoF.h ../../include/Ice/Object.h ../../include/IceUtil/GCShared.h ../../include/IceUtil/GCRecMutex.h ../../include/IceUtil/RecMutex.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/BasicStream.h ../../include/Ice/InstanceF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../../include/Glacier/SessionManager.h ../../include/Glacier/SessionF.h ../Glacier2/RouterI.h ../../include/Glacier/SessionManagerF.h ../../include/Glacier/Router.h ../../include/Ice/UserExceptionFactory.h ../../include/Ice/FactoryTable.h ../../include/Ice/FactoryTableDef.h ../../include/IceUtil/StaticMutex.h ../../include/Ice/UserExceptionFactoryF.h ../../include/Ice/Router.h ../../include/Ice/Ice.h ../../include/Ice/Initialize.h ../../include/Ice/CommunicatorF.h ../../include/Ice/PropertiesF.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/LocalException.h ../../include/Ice/Properties.h ../../include/Ice/Logger.h ../../include/Ice/LoggerUtil.h ../../include/Ice/LoggerF.h ../../include/Ice/Stats.h ../../include/Ice/Communicator.h ../../include/Ice/StatsF.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../../include/Ice/PluginF.h ../../include/Ice/ObjectFactory.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/FacetMap.h ../../include/Ice/ServantLocator.h ../../include/Ice/IdentityUtil.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/IncomingAsync.h ../../include/Ice/Process.h ../../include/Ice/Application.h ../../include/Ice/TransportInfo.h ../../include/Ice/Functional.h ../../include/IceUtil/Functional.h
+Router.o: Router.cpp ../../include/Glacier2/Router.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Config.h ../../include/Ice/Config.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/IceUtil/Shared.h ../../include/Ice/Proxy.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionF.h ../../include/Ice/EndpointF.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/TransportInfoF.h ../../include/Ice/Identity.h ../../include/Ice/Object.h ../../include/IceUtil/GCShared.h ../../include/IceUtil/GCRecMutex.h ../../include/IceUtil/RecMutex.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/BasicStream.h ../../include/Ice/InstanceF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../../include/Ice/UserExceptionFactory.h ../../include/Ice/FactoryTable.h ../../include/Ice/FactoryTableDef.h ../../include/IceUtil/StaticMutex.h ../../include/Ice/UserExceptionFactoryF.h ../../include/Ice/Router.h ../../include/Ice/LocalException.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/ObjectFactory.h ../../include/Ice/SliceChecksums.h ../../include/Ice/SliceChecksumDict.h
+Glacier2Router.o: Glacier2Router.cpp ../../include/Ice/Application.h ../../include/Ice/Ice.h ../../include/Ice/Initialize.h ../../include/Ice/CommunicatorF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Config.h ../../include/Ice/Config.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/IceUtil/Shared.h ../../include/Ice/PropertiesF.h ../../include/Ice/InstanceF.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/Proxy.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionF.h ../../include/Ice/EndpointF.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/TransportInfoF.h ../../include/Ice/Identity.h ../../include/Ice/Object.h ../../include/IceUtil/GCShared.h ../../include/IceUtil/GCRecMutex.h ../../include/IceUtil/RecMutex.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../../include/Ice/LocalException.h ../../include/Ice/Properties.h ../../include/Ice/Logger.h ../../include/Ice/LoggerUtil.h ../../include/Ice/LoggerF.h ../../include/Ice/Stats.h ../../include/Ice/Communicator.h ../../include/Ice/StatsF.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../../include/Ice/PluginF.h ../../include/Ice/ObjectFactory.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/FacetMap.h ../../include/Ice/ServantLocator.h ../../include/Ice/IdentityUtil.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/IncomingAsync.h ../../include/Ice/Process.h ../../include/Ice/TransportInfo.h ../../include/Ice/Functional.h ../../include/IceUtil/Functional.h ../Glacier2/SessionRouterI.h ../../include/IceUtil/Thread.h ../../include/Glacier2/Router.h ../../include/Ice/UserExceptionFactory.h ../../include/Ice/FactoryTable.h ../../include/Ice/FactoryTableDef.h ../../include/IceUtil/StaticMutex.h ../../include/Ice/UserExceptionFactoryF.h ../../include/Ice/Router.h
+SessionRouterI.o: SessionRouterI.cpp ../Glacier2/SessionRouterI.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/Ice.h ../../include/Ice/Initialize.h ../../include/Ice/CommunicatorF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/PropertiesF.h ../../include/Ice/InstanceF.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionF.h ../../include/Ice/EndpointF.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/TransportInfoF.h ../../include/Ice/Identity.h ../../include/Ice/Object.h ../../include/IceUtil/GCShared.h ../../include/IceUtil/GCRecMutex.h ../../include/IceUtil/RecMutex.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Outgoing.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../../include/Ice/LocalException.h ../../include/Ice/Properties.h ../../include/Ice/Logger.h ../../include/Ice/LoggerUtil.h ../../include/Ice/LoggerF.h ../../include/Ice/Stats.h ../../include/Ice/Communicator.h ../../include/Ice/StatsF.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../../include/Ice/PluginF.h ../../include/Ice/ObjectFactory.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/FacetMap.h ../../include/Ice/ServantLocator.h ../../include/Ice/IdentityUtil.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/IncomingAsync.h ../../include/Ice/Process.h ../../include/Ice/Application.h ../../include/Ice/TransportInfo.h ../../include/Ice/Functional.h ../../include/IceUtil/Functional.h ../../include/Glacier2/Router.h ../../include/Ice/UserExceptionFactory.h ../../include/Ice/FactoryTable.h ../../include/Ice/FactoryTableDef.h ../../include/IceUtil/StaticMutex.h ../../include/Ice/UserExceptionFactoryF.h ../../include/Ice/Router.h ../Glacier2/RouterI.h ../Glacier2/ClientBlobject.h ../../include/Ice/RoutingTableF.h ../Glacier2/Blobject.h ../Glacier2/RequestQueue.h ../Glacier2/ServerBlobject.h
+RouterI.o: RouterI.cpp ../../include/Ice/RoutingTable.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/RoutingTableF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../../include/Ice/Identity.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../Glacier2/RouterI.h ../../include/Ice/Ice.h ../../include/Ice/Initialize.h ../../include/Ice/CommunicatorF.h ../../include/Ice/PropertiesF.h ../../include/Ice/InstanceF.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionF.h ../../include/Ice/EndpointF.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/TransportInfoF.h ../../include/Ice/Object.h ../../include/IceUtil/GCShared.h ../../include/IceUtil/GCRecMutex.h ../../include/IceUtil/RecMutex.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../../include/Ice/LocalException.h ../../include/Ice/Properties.h ../../include/Ice/Logger.h ../../include/Ice/LoggerUtil.h ../../include/Ice/LoggerF.h ../../include/Ice/Stats.h ../../include/Ice/Communicator.h ../../include/Ice/StatsF.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../../include/Ice/PluginF.h ../../include/Ice/ObjectFactory.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/FacetMap.h ../../include/Ice/ServantLocator.h ../../include/Ice/IdentityUtil.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/IncomingAsync.h ../../include/Ice/Process.h ../../include/Ice/Application.h ../../include/Ice/TransportInfo.h ../../include/Ice/Functional.h ../../include/IceUtil/Functional.h ../../include/Glacier2/Router.h ../../include/Ice/UserExceptionFactory.h ../../include/Ice/FactoryTable.h ../../include/Ice/FactoryTableDef.h ../../include/IceUtil/StaticMutex.h ../../include/Ice/UserExceptionFactoryF.h ../../include/Ice/Router.h ../Glacier2/ClientBlobject.h ../Glacier2/Blobject.h ../Glacier2/RequestQueue.h ../../include/IceUtil/Thread.h ../Glacier2/ServerBlobject.h
Blobject.o: Blobject.cpp ../Glacier2/Blobject.h ../../include/Ice/Ice.h ../../include/Ice/Initialize.h ../../include/Ice/CommunicatorF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Config.h ../../include/Ice/Config.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/IceUtil/Shared.h ../../include/Ice/PropertiesF.h ../../include/Ice/InstanceF.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/Proxy.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionF.h ../../include/Ice/EndpointF.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/TransportInfoF.h ../../include/Ice/Identity.h ../../include/Ice/Object.h ../../include/IceUtil/GCShared.h ../../include/IceUtil/GCRecMutex.h ../../include/IceUtil/RecMutex.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../../include/Ice/LocalException.h ../../include/Ice/Properties.h ../../include/Ice/Logger.h ../../include/Ice/LoggerUtil.h ../../include/Ice/LoggerF.h ../../include/Ice/Stats.h ../../include/Ice/Communicator.h ../../include/Ice/StatsF.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../../include/Ice/PluginF.h ../../include/Ice/ObjectFactory.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/FacetMap.h ../../include/Ice/ServantLocator.h ../../include/Ice/IdentityUtil.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/IncomingAsync.h ../../include/Ice/Process.h ../../include/Ice/Application.h ../../include/Ice/TransportInfo.h ../../include/Ice/Functional.h ../../include/IceUtil/Functional.h ../Glacier2/RequestQueue.h ../../include/IceUtil/Thread.h
ClientBlobject.o: ClientBlobject.cpp ../../include/Ice/RoutingTable.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/RoutingTableF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../../include/Ice/Identity.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/IdentityUtil.h ../Glacier2/ClientBlobject.h ../Glacier2/Blobject.h ../../include/Ice/Ice.h ../../include/Ice/Initialize.h ../../include/Ice/CommunicatorF.h ../../include/Ice/PropertiesF.h ../../include/Ice/InstanceF.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionF.h ../../include/Ice/EndpointF.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/TransportInfoF.h ../../include/Ice/Object.h ../../include/IceUtil/GCShared.h ../../include/IceUtil/GCRecMutex.h ../../include/IceUtil/RecMutex.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../../include/Ice/LocalException.h ../../include/Ice/Properties.h ../../include/Ice/Logger.h ../../include/Ice/LoggerUtil.h ../../include/Ice/LoggerF.h ../../include/Ice/Stats.h ../../include/Ice/Communicator.h ../../include/Ice/StatsF.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../../include/Ice/PluginF.h ../../include/Ice/ObjectFactory.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/FacetMap.h ../../include/Ice/ServantLocator.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/IncomingAsync.h ../../include/Ice/Process.h ../../include/Ice/Application.h ../../include/Ice/TransportInfo.h ../../include/Ice/Functional.h ../../include/IceUtil/Functional.h ../Glacier2/RequestQueue.h ../../include/IceUtil/Thread.h
ServerBlobject.o: ServerBlobject.cpp ../../include/Ice/RoutingTable.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/RoutingTableF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../../include/Ice/Identity.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../Glacier2/ServerBlobject.h ../Glacier2/Blobject.h ../../include/Ice/Ice.h ../../include/Ice/Initialize.h ../../include/Ice/CommunicatorF.h ../../include/Ice/PropertiesF.h ../../include/Ice/InstanceF.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionF.h ../../include/Ice/EndpointF.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/TransportInfoF.h ../../include/Ice/Object.h ../../include/IceUtil/GCShared.h ../../include/IceUtil/GCRecMutex.h ../../include/IceUtil/RecMutex.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../../include/Ice/LocalException.h ../../include/Ice/Properties.h ../../include/Ice/Logger.h ../../include/Ice/LoggerUtil.h ../../include/Ice/LoggerF.h ../../include/Ice/Stats.h ../../include/Ice/Communicator.h ../../include/Ice/StatsF.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../../include/Ice/PluginF.h ../../include/Ice/ObjectFactory.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/FacetMap.h ../../include/Ice/ServantLocator.h ../../include/Ice/IdentityUtil.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/IncomingAsync.h ../../include/Ice/Process.h ../../include/Ice/Application.h ../../include/Ice/TransportInfo.h ../../include/Ice/Functional.h ../../include/IceUtil/Functional.h ../Glacier2/RequestQueue.h ../../include/IceUtil/Thread.h
RequestQueue.o: RequestQueue.cpp ../Glacier2/RequestQueue.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/Ice.h ../../include/Ice/Initialize.h ../../include/Ice/CommunicatorF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/PropertiesF.h ../../include/Ice/InstanceF.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionF.h ../../include/Ice/EndpointF.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/TransportInfoF.h ../../include/Ice/Identity.h ../../include/Ice/Object.h ../../include/IceUtil/GCShared.h ../../include/IceUtil/GCRecMutex.h ../../include/IceUtil/RecMutex.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Outgoing.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../../include/Ice/LocalException.h ../../include/Ice/Properties.h ../../include/Ice/Logger.h ../../include/Ice/LoggerUtil.h ../../include/Ice/LoggerF.h ../../include/Ice/Stats.h ../../include/Ice/Communicator.h ../../include/Ice/StatsF.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../../include/Ice/PluginF.h ../../include/Ice/ObjectFactory.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/FacetMap.h ../../include/Ice/ServantLocator.h ../../include/Ice/IdentityUtil.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/IncomingAsync.h ../../include/Ice/Process.h ../../include/Ice/Application.h ../../include/Ice/TransportInfo.h ../../include/Ice/Functional.h ../../include/IceUtil/Functional.h
+Router.cpp: ../../slice/Glacier2/Router.ice ../../slice/Ice/Router.ice
diff --git a/cpp/src/Glacier2/Blobject.cpp b/cpp/src/Glacier2/Blobject.cpp
index c6d2021f50c..011850c0905 100644
--- a/cpp/src/Glacier2/Blobject.cpp
+++ b/cpp/src/Glacier2/Blobject.cpp
@@ -161,7 +161,7 @@ Glacier2::Blobject::invoke(ObjectPrx& proxy, const AMD_Object_ice_invokePtr& amd
//
// Create a new request and add it to the request queue.
//
- assert(_requestQueue);
+ assert(_requestQueue); // Destroyed?
if(proxy->ice_isTwoway())
{
AMI_Object_ice_invokePtr amiCB = new Glacier2CB(amdCB);
diff --git a/cpp/src/Glacier2/Glacier2Router.cpp b/cpp/src/Glacier2/Glacier2Router.cpp
index 6012dd8fbd6..3da96a95248 100644
--- a/cpp/src/Glacier2/Glacier2Router.cpp
+++ b/cpp/src/Glacier2/Glacier2Router.cpp
@@ -7,15 +7,13 @@
//
// **********************************************************************
-#include <IceUtil/Base64.h>
#include <Ice/Application.h>
-#include <Glacier2/ServantLocator.h>
+#include <Glacier2/SessionRouterI.h>
using namespace std;
using namespace Ice;
using namespace Glacier2;
-
namespace Glacier2
{
@@ -74,18 +72,30 @@ Glacier2::RouterApp::run(int argc, char* argv[])
cerr << appName() << ": property `" << clientEndpointsProperty << "' is not set" << endl;
return EXIT_FAILURE;
}
- ObjectAdapterPtr adapter = communicator()->createObjectAdapter("Glacier2.Client");
- ServantLocatorPtr locator = new ClientServantLocator(adapter);
- adapter->addServantLocator(locator, "");
+ ObjectAdapterPtr clientAdapter = communicator()->createObjectAdapter("Glacier2.Client");
+
+ //
+ // Create a router implementation that can handle sessions, and
+ // add it to the client object adapter.
+ //
+ SessionRouterIPtr sessionRouter = new SessionRouterI(clientAdapter);
+ const char* routerIdProperty = "Glacier2.RouterIdentity";
+ Identity routerId = stringToIdentity(properties->getPropertyWithDefault(routerIdProperty, "Glacier2/router"));
+ clientAdapter->add(sessionRouter, routerId);
//
// Everything ok, let's go.
//
shutdownOnInterrupt();
- adapter->activate();
+ clientAdapter->activate();
communicator()->waitForShutdown();
ignoreInterrupt();
+ //
+ // Destroy the session router, which destroys everything else.
+ //
+ sessionRouter->destroy();
+
return EXIT_SUCCESS;
}
diff --git a/cpp/src/Glacier2/Makefile b/cpp/src/Glacier2/Makefile
index 946a48ad45a..9427350c449 100644
--- a/cpp/src/Glacier2/Makefile
+++ b/cpp/src/Glacier2/Makefile
@@ -21,7 +21,7 @@ TARGETS = $(LIBTARGETS) $(ROUTER)
OBJS = Router.o
ROBJS = Glacier2Router.o \
- ServantLocator.o \
+ SessionRouterI.o \
RouterI.o \
Blobject.o \
ClientBlobject.o \
diff --git a/cpp/src/Glacier2/RouterI.cpp b/cpp/src/Glacier2/RouterI.cpp
new file mode 100644
index 00000000000..80b91a71a09
--- /dev/null
+++ b/cpp/src/Glacier2/RouterI.cpp
@@ -0,0 +1,121 @@
+// **********************************************************************
+//
+// Copyright (c) 2003-2004 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.
+//
+// **********************************************************************
+
+#include <Ice/RoutingTable.h>
+#include <Glacier2/RouterI.h>
+
+using namespace std;
+using namespace Ice;
+using namespace Glacier2;
+
+class RouterLocator : public ServantLocator
+{
+public:
+
+ RouterLocator(const ServerBlobjectPtr& serverBlobject) :
+ _serverBlobject(serverBlobject)
+ {
+ }
+
+ virtual ObjectPtr
+ locate(const Current& current, LocalObjectPtr&)
+ {
+ return _serverBlobject;
+ }
+
+ virtual void
+ finished(const Current&, const ObjectPtr&, const LocalObjectPtr&)
+ {
+ }
+
+ virtual void
+ deactivate(const string&)
+ {
+ }
+
+private:
+
+ ServerBlobjectPtr _serverBlobject;
+};
+
+Glacier2::RouterI::RouterI(const ObjectAdapterPtr& clientAdapter,
+ const ObjectAdapterPtr& serverAdapter,
+ const TransportInfoPtr& transport) :
+ _communicator(clientAdapter->getCommunicator()),
+ _routingTable(new IceInternal::RoutingTable),
+ _routingTableTraceLevel(_communicator->getProperties()->getPropertyAsInt("Glacier2.Trace.RoutingTable")),
+ _clientProxy(clientAdapter->createProxy(stringToIdentity("dummy"))),
+ _serverProxy(serverAdapter ? serverAdapter->createProxy(stringToIdentity("dummy")) : ObjectPrx()),
+ _clientBlobject(new ClientBlobject(_communicator, _routingTable, "")),
+ _serverBlobject(serverAdapter ? new ServerBlobject(_communicator, transport) : 0)
+{
+ if(serverAdapter)
+ {
+ assert(_serverBlobject);
+ serverAdapter->addServantLocator(new RouterLocator(_serverBlobject), "");
+ serverAdapter->activate();
+ }
+}
+
+Glacier2::RouterI::~RouterI()
+{
+}
+
+void
+Glacier2::RouterI::destroy()
+{
+ _clientBlobject->destroy();
+
+ if(_serverBlobject)
+ {
+ _serverBlobject->destroy();
+ }
+}
+
+ObjectPrx
+Glacier2::RouterI::getClientProxy(const Current&) const
+{
+ return _clientProxy;
+}
+
+ObjectPrx
+Glacier2::RouterI::getServerProxy(const Current&) const
+{
+ return _serverProxy;
+}
+
+void
+Glacier2::RouterI::addProxy(const ObjectPrx& proxy, const Current&)
+{
+ if(_routingTableTraceLevel)
+ {
+ Trace out(_communicator->getLogger(), "Glacier2");
+ out << "adding proxy to routing table:\n" << _communicator->proxyToString(proxy);
+ }
+
+ _routingTable->add(proxy);
+}
+
+void
+Glacier2::RouterI::createSession(const std::string&, const std::string&, const Current&)
+{
+ assert(false); // Must not be called in this router implementation.
+}
+
+ClientBlobjectPtr
+Glacier2::RouterI::getClientBlobject() const
+{
+ return _clientBlobject;
+}
+
+ServerBlobjectPtr
+Glacier2::RouterI::getServerBlobject() const
+{
+ return _serverBlobject;
+}
diff --git a/cpp/src/Glacier2/RouterI.h b/cpp/src/Glacier2/RouterI.h
new file mode 100644
index 00000000000..fc113de9ab2
--- /dev/null
+++ b/cpp/src/Glacier2/RouterI.h
@@ -0,0 +1,53 @@
+// **********************************************************************
+//
+// Copyright (c) 2003-2004 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.
+//
+// **********************************************************************
+
+#ifndef GLACIER2_ROUTER_I_H
+#define GLACIER2_ROUTER_I_H
+
+#include <Ice/Ice.h>
+#include <Glacier2/Router.h>
+#include <Glacier2/ClientBlobject.h>
+#include <Glacier2/ServerBlobject.h>
+
+namespace Glacier2
+{
+
+class RouterI;
+typedef IceUtil::Handle<RouterI> RouterIPtr;
+
+class RouterI : public Router
+{
+public:
+
+ RouterI(const Ice::ObjectAdapterPtr&, const Ice::ObjectAdapterPtr&, const Ice::TransportInfoPtr& transport);
+ virtual ~RouterI();
+ void destroy();
+
+ virtual Ice::ObjectPrx getClientProxy(const Ice::Current&) const;
+ virtual Ice::ObjectPrx getServerProxy(const Ice::Current&) const;
+ virtual void addProxy(const Ice::ObjectPrx&, const Ice::Current&);
+ virtual void createSession(const std::string&, const std::string&, const Ice::Current&);
+
+ Glacier2::ClientBlobjectPtr getClientBlobject() const;
+ Glacier2::ServerBlobjectPtr getServerBlobject() const;
+
+private:
+
+ const Ice::CommunicatorPtr _communicator;
+ const IceInternal::RoutingTablePtr _routingTable;
+ const int _routingTableTraceLevel;
+ const Ice::ObjectPrx _clientProxy;
+ const Ice::ObjectPrx _serverProxy;
+ const Glacier2::ClientBlobjectPtr _clientBlobject;
+ const Glacier2::ServerBlobjectPtr _serverBlobject;
+};
+
+}
+
+#endif
diff --git a/cpp/src/Glacier2/ServantLocator.cpp b/cpp/src/Glacier2/ServantLocator.cpp
deleted file mode 100644
index 1ac8f56bfa7..00000000000
--- a/cpp/src/Glacier2/ServantLocator.cpp
+++ /dev/null
@@ -1,67 +0,0 @@
-// **********************************************************************
-//
-// Copyright (c) 2003-2004 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.
-//
-// **********************************************************************
-
-#include <Glacier2/ServantLocator.h>
-
-using namespace std;
-using namespace Ice;
-using namespace Glacier2;
-
-Glacier2::ClientServantLocator::ClientServantLocator(const ObjectAdapterPtr& clientAdapter) :
- _routerId(stringToIdentity(clientAdapter->getCommunicator()->getProperties()->
- getPropertyWithDefault("Glacier2.Identity", "Glacier2/router"))),
- _sessionRouter(new SessionRouterI(clientAdapter))
-{
-}
-
-ObjectPtr
-Glacier2::ClientServantLocator::locate(const Current& current, LocalObjectPtr&)
-{
- assert(current.transport);
-
- if(current.id == _routerId)
- {
- return _sessionRouter;
- }
- else
- {
- return _sessionRouter->getClientRouter(current.transport)->getClientBlobject();
- }
-}
-
-void
-Glacier2::ClientServantLocator::finished(const Current&, const ObjectPtr&, const LocalObjectPtr&)
-{
-}
-
-void
-Glacier2::ClientServantLocator::deactivate(const string&)
-{
-}
-
-Glacier2::ServerServantLocator::ServerServantLocator(const ServerBlobjectPtr& serverBlobject) :
- _serverBlobject(serverBlobject)
-{
-}
-
-ObjectPtr
-Glacier2::ServerServantLocator::locate(const Current& current, LocalObjectPtr&)
-{
- return _serverBlobject;
-}
-
-void
-Glacier2::ServerServantLocator::finished(const Current&, const ObjectPtr&, const LocalObjectPtr&)
-{
-}
-
-void
-Glacier2::ServerServantLocator::deactivate(const string&)
-{
-}
diff --git a/cpp/src/Glacier2/ServantLocator.h b/cpp/src/Glacier2/ServantLocator.h
deleted file mode 100644
index 08b92f7be02..00000000000
--- a/cpp/src/Glacier2/ServantLocator.h
+++ /dev/null
@@ -1,46 +0,0 @@
-// **********************************************************************
-//
-// Copyright (c) 2003-2004 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.
-//
-// **********************************************************************
-
-#include <Glacier2/RouterI.h>
-
-namespace Glacier2
-{
-
-class ClientServantLocator : public Ice::ServantLocator
-{
-public:
-
- ClientServantLocator(const Ice::ObjectAdapterPtr&);
-
- virtual Ice::ObjectPtr locate(const Ice::Current&, Ice::LocalObjectPtr&);
- virtual void finished(const Ice::Current&, const Ice::ObjectPtr&, const Ice::LocalObjectPtr&);
- virtual void deactivate(const std::string&);
-
-private:
-
- const Ice::Identity _routerId;
- const Glacier2::SessionRouterIPtr _sessionRouter;
-};
-
-class ServerServantLocator : public Ice::ServantLocator
-{
-public:
-
- ServerServantLocator(const Glacier2::ServerBlobjectPtr&);
-
- virtual Ice::ObjectPtr locate(const Ice::Current&, Ice::LocalObjectPtr&);
- virtual void finished(const Ice::Current&, const Ice::ObjectPtr&, const Ice::LocalObjectPtr&);
- virtual void deactivate(const std::string&);
-
-private:
-
- const Glacier2::ServerBlobjectPtr _serverBlobject;
-};
-
-}
diff --git a/cpp/src/Glacier2/ServerBlobject.cpp b/cpp/src/Glacier2/ServerBlobject.cpp
index 0ccd0f5f6ce..691920f5a4f 100644
--- a/cpp/src/Glacier2/ServerBlobject.cpp
+++ b/cpp/src/Glacier2/ServerBlobject.cpp
@@ -36,7 +36,6 @@ Glacier2::ServerBlobject::ice_invoke_async(const Ice::AMD_Object_ice_invokePtr&
const Current& current)
{
assert(_transport); // Destroyed?
-
ObjectPrx proxy = _transport->createProxy(current.id);
assert(proxy);
diff --git a/cpp/src/Glacier2/SessionRouterI.cpp b/cpp/src/Glacier2/SessionRouterI.cpp
new file mode 100644
index 00000000000..df31bdd25b8
--- /dev/null
+++ b/cpp/src/Glacier2/SessionRouterI.cpp
@@ -0,0 +1,172 @@
+// **********************************************************************
+//
+// Copyright (c) 2003-2004 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.
+//
+// **********************************************************************
+
+#include <Glacier2/SessionRouterI.h>
+#include <Glacier2/RouterI.h>
+
+using namespace std;
+using namespace Ice;
+using namespace Glacier2;
+
+class SessionLocator : public ServantLocator
+{
+public:
+
+ SessionLocator(const SessionRouterIPtr& sessionRouter) :
+ _sessionRouter(sessionRouter)
+ {
+ }
+
+ virtual ObjectPtr
+ locate(const Current& current, LocalObjectPtr&)
+ {
+ assert(current.transport);
+ return _sessionRouter->getRouter(current.transport)->getClientBlobject();
+ }
+
+ virtual void
+ finished(const Current&, const ObjectPtr&, const LocalObjectPtr&)
+ {
+ }
+
+ virtual void
+ deactivate(const std::string&)
+ {
+ }
+
+private:
+
+ const SessionRouterIPtr _sessionRouter;
+};
+
+Glacier2::SessionRouterI::SessionRouterI(const ObjectAdapterPtr& clientAdapter) :
+ _logger(clientAdapter->getCommunicator()->getLogger()),
+ _clientAdapter(clientAdapter),
+ _traceLevel(clientAdapter->getCommunicator()->getProperties()->getPropertyAsInt("Glacier2.Trace.Session")),
+ _serverAdapterCount(0),
+ _routersHint(_routers.end()),
+ _destroy(false)
+{
+ _clientAdapter->addServantLocator(new SessionLocator(this), "");
+}
+
+Glacier2::SessionRouterI::~SessionRouterI()
+{
+ assert(_destroy);
+ assert(_routers.empty());
+}
+
+void
+Glacier2::SessionRouterI::destroy()
+{
+ IceUtil::Monitor<IceUtil::Mutex>::Lock lock(*this);
+
+ assert(!_destroy);
+
+ _destroy = true;
+
+ for_each(_routers.begin(), _routers.end(),
+ Ice::secondVoidMemFun<const TransportInfoPtr, RouterI>(&RouterI::destroy));
+ _routers.clear();
+ _routersHint = _routers.end();
+
+ notify();
+}
+
+ObjectPrx
+Glacier2::SessionRouterI::getClientProxy(const Current& current) const
+{
+ assert(!_destroy);
+ return getRouter(current.transport)->getClientProxy(current); // Forward to the per-client router.
+}
+
+ObjectPrx
+Glacier2::SessionRouterI::getServerProxy(const Current& current) const
+{
+ assert(!_destroy);
+ return getRouter(current.transport)->getServerProxy(current); // Forward to the per-client router.
+}
+
+void
+Glacier2::SessionRouterI::addProxy(const ObjectPrx& proxy, const Current& current)
+{
+ assert(!_destroy);
+ getRouter(current.transport)->addProxy(proxy, current); // Forward to the per-client router.
+}
+
+void
+Glacier2::SessionRouterI::createSession(const std::string&, const std::string&, const Current& current)
+{
+ IceUtil::Monitor<IceUtil::Mutex>::Lock lock(*this);
+
+ assert(!_destroy);
+
+ //
+ // Create a server object adapter only if server endpoints are
+ // defined.
+ //
+ CommunicatorPtr communicator = _clientAdapter->getCommunicator();
+ PropertiesPtr properties = communicator->getProperties();
+ string endpoints = properties->getProperty("Glacier2.Server.Endpoints");
+
+ ObjectAdapterPtr serverAdapter;
+ if(!endpoints.empty())
+ {
+ ostringstream name;
+ name << "Glacier2.Server." << _serverAdapterCount++;
+ serverAdapter = communicator->createObjectAdapterWithEndpoints(name.str(), endpoints);
+ }
+
+ //
+ // Add a new client router.
+ //
+ RouterIPtr router = new RouterI(_clientAdapter, serverAdapter, current.transport);
+ _routersHint = _routers.insert(_routersHint, pair<const TransportInfoPtr, RouterIPtr>(current.transport, router));
+
+ if(_traceLevel >= 1)
+ {
+ Trace out(_logger, "Glacier2");
+ out << "added session for:\n";
+ out << current.transport->toString();
+ if(serverAdapter)
+ {
+ Identity ident;
+ ident.name = "dummy";
+ string endpts = _clientAdapter->getCommunicator()->proxyToString(serverAdapter->createProxy(ident));
+ endpts.erase(0, endpts.find(':') + 1);
+ out << "\nserver adapter endpoints: " << endpts;
+ }
+ }
+}
+
+RouterIPtr
+Glacier2::SessionRouterI::getRouter(const TransportInfoPtr& transport) const
+{
+ IceUtil::Monitor<IceUtil::Mutex>::Lock lock(*this);
+
+ assert(!_destroy);
+
+ if(_routersHint != _routers.end() && _routersHint->first == transport)
+ {
+ return _routersHint->second;
+ }
+
+ map<TransportInfoPtr, RouterIPtr>::iterator p =
+ const_cast<map<TransportInfoPtr, RouterIPtr>&>(_routers).find(transport);
+
+ if(p != _routers.end())
+ {
+ _routersHint = p;
+ return p->second;
+ }
+ else
+ {
+ return 0;
+ }
+}
diff --git a/cpp/src/Glacier2/SessionRouterI.h b/cpp/src/Glacier2/SessionRouterI.h
new file mode 100644
index 00000000000..196a17e4296
--- /dev/null
+++ b/cpp/src/Glacier2/SessionRouterI.h
@@ -0,0 +1,58 @@
+// **********************************************************************
+//
+// Copyright (c) 2003-2004 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.
+//
+// **********************************************************************
+
+#ifndef GLACIER2_SESSION_ROUTER_I_H
+#define GLACIER2_SESSION_ROUTER_I_H
+
+#include <IceUtil/Thread.h>
+#include <IceUtil/Monitor.h>
+#include <Ice/Ice.h>
+#include <Glacier2/Router.h>
+
+namespace Glacier2
+{
+
+class RouterI;
+typedef IceUtil::Handle<RouterI> RouterIPtr;
+
+class SessionRouterI;
+typedef IceUtil::Handle<SessionRouterI> SessionRouterIPtr;
+
+class SessionRouterI : public Router, public IceUtil::Monitor<IceUtil::Mutex>
+{
+public:
+
+ SessionRouterI(const Ice::ObjectAdapterPtr&);
+ virtual ~SessionRouterI();
+ void destroy();
+
+ virtual Ice::ObjectPrx getClientProxy(const Ice::Current&) const;
+ virtual Ice::ObjectPrx getServerProxy(const Ice::Current&) const;
+ virtual void addProxy(const Ice::ObjectPrx&, const Ice::Current&);
+ virtual void createSession(const std::string&, const std::string&, const Ice::Current&);
+
+ RouterIPtr getRouter(const Ice::TransportInfoPtr&) const;
+
+private:
+
+ const Ice::LoggerPtr _logger;
+ const Ice::ObjectAdapterPtr _clientAdapter;
+ const int _traceLevel;
+
+ int _serverAdapterCount;
+
+ std::map<Ice::TransportInfoPtr, RouterIPtr> _routers;
+ mutable std::map<Ice::TransportInfoPtr, RouterIPtr>::iterator _routersHint;
+
+ bool _destroy;
+};
+
+}
+
+#endif