diff options
author | Marc Laukien <marc@zeroc.com> | 2004-08-16 16:59:29 +0000 |
---|---|---|
committer | Marc Laukien <marc@zeroc.com> | 2004-08-16 16:59:29 +0000 |
commit | ca3ea1d280a6c577fbbaf8a8121d20a71480ca7e (patch) | |
tree | 94bfb8ff009ad673da068eca49d1a2237cb32123 /cpp/src | |
parent | more changes (diff) | |
download | ice-ca3ea1d280a6c577fbbaf8a8121d20a71480ca7e.tar.bz2 ice-ca3ea1d280a6c577fbbaf8a8121d20a71480ca7e.tar.xz ice-ca3ea1d280a6c577fbbaf8a8121d20a71480ca7e.zip |
more changes
Diffstat (limited to 'cpp/src')
-rw-r--r-- | cpp/src/Glacier2/.depend | 8 | ||||
-rw-r--r-- | cpp/src/Glacier2/Blobject.cpp | 2 | ||||
-rw-r--r-- | cpp/src/Glacier2/Glacier2Router.cpp | 24 | ||||
-rw-r--r-- | cpp/src/Glacier2/Makefile | 2 | ||||
-rw-r--r-- | cpp/src/Glacier2/RouterI.cpp | 121 | ||||
-rw-r--r-- | cpp/src/Glacier2/RouterI.h | 53 | ||||
-rw-r--r-- | cpp/src/Glacier2/ServantLocator.cpp | 67 | ||||
-rw-r--r-- | cpp/src/Glacier2/ServantLocator.h | 46 | ||||
-rw-r--r-- | cpp/src/Glacier2/ServerBlobject.cpp | 1 | ||||
-rw-r--r-- | cpp/src/Glacier2/SessionRouterI.cpp | 172 | ||||
-rw-r--r-- | cpp/src/Glacier2/SessionRouterI.h | 58 |
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 |