public static void ExportAsSenderPromise <T>(this T cap, IRpcEndpoint endpoint, CapDescriptor.WRITER writer) where T : ConsumedCapability, IResolvingCapability { var vine = Vine.Create(cap); uint preliminaryId = endpoint.AllocateExport(vine, out bool first); writer.which = CapDescriptor.WHICH.SenderPromise; writer.SenderPromise = preliminaryId; if (first) { endpoint.RequestPostAction(async() => { try { var resolvedCap = await cap.WhenResolved; endpoint.Resolve(preliminaryId, vine, () => resolvedCap.ConsumedCap !); } catch (System.Exception exception) { endpoint.Resolve(preliminaryId, vine, () => throw exception); } }); } }
public CensorCapability(ConsumedCapability interceptedCapability, IInterceptionPolicy policy) { InterceptedCapability = interceptedCapability; interceptedCapability.AddRef(); Policy = policy; MyVine = Vine.Create(this); }
internal override void Export(IRpcEndpoint endpoint, CapDescriptor.WRITER capDesc) { if (endpoint == _ep) { capDesc.which = CapDescriptor.WHICH.ReceiverHosted; capDesc.ReceiverHosted = _remoteId; } else { capDesc.which = CapDescriptor.WHICH.SenderHosted; capDesc.SenderHosted = endpoint.AllocateExport(Vine.Create(this), out var _); } }