Files
Dec2017-Script-Dump/mscorlib/System/Runtime/Remoting/Messaging/StackBuilderSink.cs
T
2026-06-04 11:42:34 +02:00

106 lines
2.9 KiB
C#

using System;
using System.Reflection;
using System.Runtime.Remoting.Proxies;
using System.Threading;
namespace System.Runtime.Remoting.Messaging
{
// Token: 0x02000408 RID: 1032
internal class StackBuilderSink : IMessageSink
{
// Token: 0x06002838 RID: 10296 RVA: 0x00083938 File Offset: 0x00081B38
public StackBuilderSink(MarshalByRefObject obj, bool forceInternalExecute)
{
this._target = obj;
if (!forceInternalExecute && RemotingServices.IsTransparentProxy(obj))
{
this._rp = RemotingServices.GetRealProxy(obj);
}
}
// Token: 0x06002839 RID: 10297 RVA: 0x00083970 File Offset: 0x00081B70
public IMessage SyncProcessMessage(IMessage msg)
{
this.CheckParameters(msg);
if (this._rp != null)
{
return this._rp.Invoke(msg);
}
return RemotingServices.InternalExecuteMessage(this._target, (IMethodCallMessage)msg);
}
// Token: 0x0600283A RID: 10298 RVA: 0x000839B0 File Offset: 0x00081BB0
public IMessageCtrl AsyncProcessMessage(IMessage msg, IMessageSink replySink)
{
object[] array = new object[] { msg, replySink };
ThreadPool.QueueUserWorkItem(new WaitCallback(this.ExecuteAsyncMessage), array);
return null;
}
// Token: 0x0600283B RID: 10299 RVA: 0x000839E0 File Offset: 0x00081BE0
private void ExecuteAsyncMessage(object ob)
{
object[] array = (object[])ob;
IMethodCallMessage methodCallMessage = (IMethodCallMessage)array[0];
IMessageSink messageSink = (IMessageSink)array[1];
this.CheckParameters(methodCallMessage);
IMessage message;
if (this._rp != null)
{
message = this._rp.Invoke(methodCallMessage);
}
else
{
message = RemotingServices.InternalExecuteMessage(this._target, methodCallMessage);
}
messageSink.SyncProcessMessage(message);
}
// Token: 0x170007E7 RID: 2023
// (get) Token: 0x0600283C RID: 10300 RVA: 0x00083A40 File Offset: 0x00081C40
public IMessageSink NextSink
{
get
{
return null;
}
}
// Token: 0x0600283D RID: 10301 RVA: 0x00083A44 File Offset: 0x00081C44
private void CheckParameters(IMessage msg)
{
IMethodCallMessage methodCallMessage = (IMethodCallMessage)msg;
ParameterInfo[] parameters = methodCallMessage.MethodBase.GetParameters();
int num = 0;
foreach (ParameterInfo parameterInfo in parameters)
{
object arg = methodCallMessage.GetArg(num++);
Type type = parameterInfo.ParameterType;
if (type.IsByRef)
{
type = type.GetElementType();
}
if (arg != null && !type.IsInstanceOfType(arg))
{
throw new RemotingException(string.Concat(new object[]
{
"Cannot cast argument ",
parameterInfo.Position,
" of type '",
arg.GetType().AssemblyQualifiedName,
"' to type '",
type.AssemblyQualifiedName,
"'"
}));
}
}
}
// Token: 0x04000FA4 RID: 4004
private MarshalByRefObject _target;
// Token: 0x04000FA5 RID: 4005
private RealProxy _rp;
}
}