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); } }
internal void GetEndpoints(Reference reference, int ttl, IGetEndpointsCallback callback) => GetEndpoints(reference, null, ttl, callback);
internal AdapterRequest(LocatorInfo locatorInfo, Reference reference) : base(locatorInfo, reference) { }
public RequestCallback(Reference reference, int ttl, IGetEndpointsCallback?cb) { _ref = reference; _ttl = ttl; _callback = cb; }
internal ObjectRequest(LocatorInfo locatorInfo, Reference reference) : base(locatorInfo, reference) { }