Пример #1
0
        GetEndpoints(Reference reference, Reference?wellKnownRef, int ttl, IGetEndpointsCallback?callback)
        {
            Debug.Assert(reference.IsIndirect());
            Endpoint[]? endpoints = null;
            bool cached;

            if (!reference.IsWellKnown())
            {
                endpoints = _table.GetAdapterEndpoints(reference.GetAdapterId(), ttl, out cached);
                if (!cached)
                {
                    if (_background && endpoints != null)
                    {
                        GetAdapterRequest(reference).AddCallback(reference, wellKnownRef, ttl, null);
                    }
                    else
                    {
                        GetAdapterRequest(reference).AddCallback(reference, wellKnownRef, ttl, callback);
                        return;
                    }
                }
            }
            else
            {
                Reference?r = _table.GetObjectReference(reference.GetIdentity(), ttl, out cached);
                if (!cached)
                {
                    if (_background && r != null)
                    {
                        GetObjectRequest(reference).AddCallback(reference, null, ttl, null);
                    }
                    else
                    {
                        GetObjectRequest(reference).AddCallback(reference, null, ttl, callback);
                        return;
                    }
                }

                Debug.Assert(r != null);
                if (!r.IsIndirect())
                {
                    endpoints = r.GetEndpoints();
                }
                else if (!r.IsWellKnown())
                {
                    if (reference.GetCommunicator().TraceLevels.Location >= 1)
                    {
                        Trace("found adapter for well-known object in locator cache", reference, r);
                    }
                    GetEndpoints(r, reference, ttl, callback);
                    return;
                }
            }

            Debug.Assert(endpoints != null);
            if (reference.GetCommunicator().TraceLevels.Location >= 1)
            {
                GetEndpointsTrace(reference, endpoints, true);
            }
            if (callback != null)
            {
                callback.SetEndpoints(endpoints, true);
            }
        }
Пример #2
0
 internal void GetEndpoints(Reference reference, int ttl, IGetEndpointsCallback callback) =>
 GetEndpoints(reference, null, ttl, callback);
Пример #3
0
 internal AdapterRequest(LocatorInfo locatorInfo, Reference reference) : base(locatorInfo, reference)
 {
 }
Пример #4
0
 public RequestCallback(Reference reference, int ttl, IGetEndpointsCallback?cb)
 {
     _ref      = reference;
     _ttl      = ttl;
     _callback = cb;
 }
Пример #5
0
 internal ObjectRequest(LocatorInfo locatorInfo, Reference reference) : base(locatorInfo, reference)
 {
 }