コード例 #1
0
 public ConnectRequestHandler(RoutableReference routableReference)
 {
     _reference      = routableReference;
     _initialized    = false;
     _flushing       = false;
     _requestHandler = this;
 }
コード例 #2
0
 internal void RemoveConnectRequestHandler(RoutableReference rf, ConnectRequestHandler handler)
 {
     if (rf.IsConnectionCached)
     {
         lock (_handlers)
         {
             if (_handlers.TryGetValue(rf, out ConnectRequestHandler h) && h == handler)
             {
                 _handlers.Remove(rf);
             }
         }
     }
 }
コード例 #3
0
 public IRequestHandler Connect(RoutableReference reference)
 {
     Debug.Assert(reference == _reference); // not ReferenceEquals, see Communicator.GetRequestHandler
     lock (this)
     {
         if (!Initialized())
         {
             if (_reference.IsConnectionCached)
             {
                 _referenceList ??= new List <RoutableReference>();
                 _referenceList.Add(reference);
             }
         }
         return(_requestHandler);
     }
 }
コード例 #4
0
        getRequestHandler(RoutableReference rf, Ice.ObjectPrxHelperBase proxy)
        {
            if (rf.getCollocationOptimized())
            {
                Ice.ObjectAdapter adapter = _instance.objectAdapterFactory().findObjectAdapter(proxy);
                if (adapter != null)
                {
                    return(proxy.iceSetRequestHandler(new CollocatedRequestHandler(rf, adapter)));
                }
            }

            bool connect = false;
            ConnectRequestHandler handler;

            if (rf.getCacheConnection())
            {
                lock (this)
                {
                    if (!_handlers.TryGetValue(rf, out handler))
                    {
                        handler = new ConnectRequestHandler(rf, proxy);
                        _handlers.Add(rf, handler);
                        connect = true;
                    }
                }
            }
            else
            {
                handler = new ConnectRequestHandler(rf, proxy);
                connect = true;
            }

            if (connect)
            {
                rf.getConnection(handler);
            }
            return(proxy.iceSetRequestHandler(handler.connect(proxy)));
        }
コード例 #5
0
        internal IRequestHandler GetRequestHandler(RoutableReference rf, IObjectPrx proxy)
        {
            if (rf.GetCollocationOptimized())
            {
                ObjectAdapter?adapter = FindObjectAdapter(proxy);
                if (adapter != null)
                {
                    return(proxy.IceSetRequestHandler(new CollocatedRequestHandler(rf, adapter)));
                }
            }

            bool connect = false;
            ConnectRequestHandler handler;

            if (rf.GetCacheConnection())
            {
                lock (_handlers)
                {
                    if (!_handlers.TryGetValue(rf, out handler))
                    {
                        handler = new ConnectRequestHandler(rf, proxy);
                        _handlers.Add(rf, handler);
                        connect = true;
                    }
                }
            }
            else
            {
                handler = new ConnectRequestHandler(rf, proxy);
                connect = true;
            }

            if (connect)
            {
                rf.GetConnection(handler);
            }
            return(proxy.IceSetRequestHandler(handler.Connect(proxy)));
        }