예제 #1
0
        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);
                    }
                });
            }
        }
예제 #2
0
 public CensorCapability(ConsumedCapability interceptedCapability, IInterceptionPolicy policy)
 {
     InterceptedCapability = interceptedCapability;
     interceptedCapability.AddRef();
     Policy = policy;
     MyVine = Vine.Create(this);
 }
예제 #3
0
 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 _);
     }
 }