Christian Köllner 5b8f6722ec nullability step 2
2020-01-11 17:56:12 +01:00

52 lines
1.5 KiB
C#

namespace Capnp.Rpc
{
/// <summary>
/// Low-level capability which as imported from a remote peer.
/// </summary>
class ImportedCapability : RemoteCapability
{
readonly uint _remoteId;
public ImportedCapability(IRpcEndpoint ep, uint remoteId): base(ep)
{
_remoteId = remoteId;
}
protected override void ReleaseRemotely()
{
_ep.ReleaseImport(_remoteId);
}
protected override Call.WRITER SetupMessage(DynamicSerializerState args, ulong interfaceId, ushort methodId)
{
var call = base.SetupMessage(args, interfaceId, methodId);
call.Target.which = MessageTarget.WHICH.ImportedCap;
call.Target.ImportedCap = _remoteId;
return call;
}
internal override void Freeze(out IRpcEndpoint boundEndpoint)
{
boundEndpoint = _ep;
}
internal override void Unfreeze()
{
}
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 _);
}
}
}
}