Files
Xune/UIX.RenderApi.Skia/Microsoft/Iris/Render/Protocols/Splash/Messaging/RemoteContextRelay.cs
T

182 lines
7.9 KiB
C#

// Decompiled with JetBrains decompiler
// Type: Microsoft.Iris.Render.Protocols.Splash.Messaging.RemoteContextRelay
// Assembly: UIX.RenderApi, Version=4.8.0.0, Culture=neutral, PublicKeyToken=ddd0da4d3e678217
// MVID: D47658B8-A8EA-43D6-8837-ECE823BFFFC1
// Assembly location: C:\Program Files\Zune\UIX.RenderApi.dll
using Microsoft.Iris.Render.Protocol;
using System.Runtime.InteropServices;
namespace Microsoft.Iris.Render.Protocols.Splash.Messaging
{
internal class RemoteContextRelay : RemoteObject
{
private static ushort[] s_priv_ByteOrder_Msg2_Create;
private static ushort[] s_priv_ByteOrder_Msg0_UnlinkContext;
private static ushort[] s_priv_ByteOrder_Msg1_LinkContext;
protected RemoteContextRelay()
{
}
public static unsafe RemoteContextRelay Create(
ProtocolSplashMessaging _priv_protocolInstance,
IRenderHandleOwner _priv_owner,
TransportProtocol protocol,
string stServer,
string stSession)
{
RenderPort port = _priv_protocolInstance.Port;
RENDERHANDLE relayClassHandle = _priv_protocolInstance.ContextRelay_ClassHandle;
RemoteContextRelay remoteContextRelay = new RemoteContextRelay(port, _priv_owner);
BlobInfo blobInfo = new BlobInfo(port, (uint)sizeof(RemoteContextRelay.Msg2_Create));
BLOBREF blobref1 = blobInfo.Add(stServer);
BLOBREF blobref2 = blobInfo.Add(stSession);
uint adjustedTotalSize = blobInfo.AdjustedTotalSize;
// ISSUE: untyped stack allocation
byte* pMem = stackalloc byte[(int)adjustedTotalSize];
RemoteContextRelay.Msg2_Create* msg2CreatePtr = (RemoteContextRelay.Msg2_Create*)pMem;
msg2CreatePtr->_priv_size = adjustedTotalSize;
msg2CreatePtr->_priv_msgid = 2U;
msg2CreatePtr->protocol = protocol;
msg2CreatePtr->stServer = blobref1;
msg2CreatePtr->stSession = blobref2;
blobInfo.Attach((Message*)msg2CreatePtr);
msg2CreatePtr->_priv_idObjectSubject = remoteContextRelay.m_renderHandle;
if (port.ForeignByteOrder)
MarshalHelper.SwapByteOrder(pMem, ref s_priv_ByteOrder_Msg2_Create, typeof(RemoteContextRelay.Msg2_Create), 0, 0);
port.CreateRemoteObject(relayClassHandle, remoteContextRelay.m_renderHandle, (Message*)msg2CreatePtr);
return remoteContextRelay;
}
public static unsafe void BuildUnlinkContext(
out RenderPort _priv_portUse,
out Message* _priv_pmsgUse,
ProtocolSplashMessaging _priv_protocolInstance,
ContextID idContextExisting,
ContextID idContextAlias)
{
RenderPort port = _priv_protocolInstance.Port;
_priv_portUse = port;
RENDERHANDLE relayClassHandle = _priv_protocolInstance.ContextRelay_ClassHandle;
_priv_portUse.ValidateHandle(relayClassHandle);
uint size = (uint)sizeof(RemoteContextRelay.Msg0_UnlinkContext);
RemoteContextRelay.Msg0_UnlinkContext* msg0UnlinkContextPtr = (RemoteContextRelay.Msg0_UnlinkContext*)_priv_portUse.AllocMessageBuffer(size);
msg0UnlinkContextPtr->_priv_size = size;
msg0UnlinkContextPtr->_priv_msgid = 0U;
msg0UnlinkContextPtr->idContextExisting = idContextExisting;
msg0UnlinkContextPtr->idContextAlias = idContextAlias;
msg0UnlinkContextPtr->_priv_idObjectSubject = relayClassHandle;
if (_priv_portUse.ForeignByteOrder)
MarshalHelper.SwapByteOrder((byte*)msg0UnlinkContextPtr, ref s_priv_ByteOrder_Msg0_UnlinkContext, typeof(RemoteContextRelay.Msg0_UnlinkContext), 0, 0);
_priv_pmsgUse = (Message*)msg0UnlinkContextPtr;
}
public static unsafe void SendUnlinkContext(
ProtocolSplashMessaging _priv_protocolInstance,
ContextID idContextExisting,
ContextID idContextAlias)
{
RenderPort _priv_portUse;
Message* _priv_pmsgUse;
BuildUnlinkContext(out _priv_portUse, out _priv_pmsgUse, _priv_protocolInstance, idContextExisting, idContextAlias);
_priv_portUse.SendRemoteMessage(_priv_pmsgUse);
}
public static unsafe void BuildLinkContext(
out RenderPort _priv_portUse,
out Message* _priv_pmsgUse,
ProtocolSplashMessaging _priv_protocolInstance,
ContextID idContextExisting,
ContextID idContextAlias)
{
RenderPort port = _priv_protocolInstance.Port;
_priv_portUse = port;
RENDERHANDLE relayClassHandle = _priv_protocolInstance.ContextRelay_ClassHandle;
_priv_portUse.ValidateHandle(relayClassHandle);
uint size = (uint)sizeof(RemoteContextRelay.Msg1_LinkContext);
RemoteContextRelay.Msg1_LinkContext* msg1LinkContextPtr = (RemoteContextRelay.Msg1_LinkContext*)_priv_portUse.AllocMessageBuffer(size);
msg1LinkContextPtr->_priv_size = size;
msg1LinkContextPtr->_priv_msgid = 1U;
msg1LinkContextPtr->idContextExisting = idContextExisting;
msg1LinkContextPtr->idContextAlias = idContextAlias;
msg1LinkContextPtr->_priv_idObjectSubject = relayClassHandle;
if (_priv_portUse.ForeignByteOrder)
MarshalHelper.SwapByteOrder((byte*)msg1LinkContextPtr, ref s_priv_ByteOrder_Msg1_LinkContext, typeof(RemoteContextRelay.Msg1_LinkContext), 0, 0);
_priv_pmsgUse = (Message*)msg1LinkContextPtr;
}
public static unsafe void SendLinkContext(
ProtocolSplashMessaging _priv_protocolInstance,
ContextID idContextExisting,
ContextID idContextAlias)
{
RenderPort _priv_portUse;
Message* _priv_pmsgUse;
BuildLinkContext(out _priv_portUse, out _priv_pmsgUse, _priv_protocolInstance, idContextExisting, idContextAlias);
_priv_portUse.SendRemoteMessage(_priv_pmsgUse);
}
public static RemoteContextRelay CreateFromHandle(
RenderPort port,
RENDERHANDLE handle)
{
return new RemoteContextRelay(port, handle, true);
}
public static RemoteContextRelay CreateFromExternalHandle(
RenderPort port,
RENDERHANDLE handle,
IRenderHandleOwner owner)
{
port.RegisterKnownHandle(owner, handle);
return new RemoteContextRelay(port, handle, false);
}
protected RemoteContextRelay(RenderPort port, RENDERHANDLE handle, bool fFreeOnDispose)
: base(port, handle, fFreeOnDispose)
{
}
protected RemoteContextRelay(RenderPort port, IRenderHandleOwner owner)
: base(port, owner)
{
}
public override bool Equals(object other) => other is RemoteContextRelay && this.m_renderHandle == ((RemoteObject)other).m_renderHandle;
public override int GetHashCode() => base.GetHashCode();
[ComVisible(false)]
private struct Msg2_Create
{
public uint _priv_size;
public uint _priv_msgid;
public RENDERHANDLE _priv_idObjectSubject;
public TransportProtocol protocol;
public BLOBREF stServer;
public BLOBREF stSession;
}
[ComVisible(false)]
private struct Msg0_UnlinkContext
{
public uint _priv_size;
public uint _priv_msgid;
public RENDERHANDLE _priv_idObjectSubject;
public ContextID idContextExisting;
public ContextID idContextAlias;
}
[ComVisible(false)]
private struct Msg1_LinkContext
{
public uint _priv_size;
public uint _priv_msgid;
public RENDERHANDLE _priv_idObjectSubject;
public ContextID idContextExisting;
public ContextID idContextAlias;
}
}
}