Files
2026-06-04 11:42:34 +02:00

158 lines
4.2 KiB
C#

using System;
using System.Runtime.Remoting.Messaging;
using System.Threading;
namespace System.Runtime.Remoting.Contexts
{
// Token: 0x020003BE RID: 958
internal class CrossContextChannel : IMessageSink
{
// Token: 0x0600261E RID: 9758 RVA: 0x0007DDC0 File Offset: 0x0007BFC0
public IMessage SyncProcessMessage(IMessage msg)
{
ServerIdentity serverIdentity = (ServerIdentity)RemotingServices.GetMessageTargetIdentity(msg);
Context context = null;
if (Thread.CurrentContext != serverIdentity.Context)
{
context = Context.SwitchToContext(serverIdentity.Context);
}
IMessage message;
try
{
Context.NotifyGlobalDynamicSinks(true, msg, false, false);
Thread.CurrentContext.NotifyDynamicSinks(true, msg, false, false);
message = serverIdentity.Context.GetServerContextSinkChain().SyncProcessMessage(msg);
Context.NotifyGlobalDynamicSinks(false, msg, false, false);
Thread.CurrentContext.NotifyDynamicSinks(false, msg, false, false);
}
catch (Exception ex)
{
message = new ReturnMessage(ex, (IMethodCallMessage)msg);
}
finally
{
if (context != null)
{
Context.SwitchToContext(context);
}
}
return message;
}
// Token: 0x0600261F RID: 9759 RVA: 0x0007DE94 File Offset: 0x0007C094
public IMessageCtrl AsyncProcessMessage(IMessage msg, IMessageSink replySink)
{
ServerIdentity serverIdentity = (ServerIdentity)RemotingServices.GetMessageTargetIdentity(msg);
Context context = null;
if (Thread.CurrentContext != serverIdentity.Context)
{
context = Context.SwitchToContext(serverIdentity.Context);
}
IMessageCtrl messageCtrl2;
try
{
Context.NotifyGlobalDynamicSinks(true, msg, false, true);
Thread.CurrentContext.NotifyDynamicSinks(true, msg, false, false);
if (replySink != null)
{
replySink = new CrossContextChannel.ContextRestoreSink(replySink, context, msg);
}
IMessageCtrl messageCtrl = serverIdentity.AsyncObjectProcessMessage(msg, replySink);
if (replySink == null)
{
Context.NotifyGlobalDynamicSinks(false, msg, false, false);
Thread.CurrentContext.NotifyDynamicSinks(false, msg, false, false);
}
messageCtrl2 = messageCtrl;
}
catch (Exception ex)
{
if (replySink != null)
{
replySink.SyncProcessMessage(new ReturnMessage(ex, (IMethodCallMessage)msg));
}
messageCtrl2 = null;
}
finally
{
if (context != null)
{
Context.SwitchToContext(context);
}
}
return messageCtrl2;
}
// Token: 0x17000721 RID: 1825
// (get) Token: 0x06002620 RID: 9760 RVA: 0x0007DF90 File Offset: 0x0007C190
public IMessageSink NextSink
{
get
{
return null;
}
}
// Token: 0x020003BF RID: 959
private class ContextRestoreSink : IMessageSink
{
// Token: 0x06002621 RID: 9761 RVA: 0x0007DF94 File Offset: 0x0007C194
public ContextRestoreSink(IMessageSink next, Context context, IMessage call)
{
this._next = next;
this._context = context;
this._call = call;
}
// Token: 0x06002622 RID: 9762 RVA: 0x0007DFB4 File Offset: 0x0007C1B4
public IMessage SyncProcessMessage(IMessage msg)
{
IMessage message;
try
{
Context.NotifyGlobalDynamicSinks(false, msg, false, false);
Thread.CurrentContext.NotifyDynamicSinks(false, msg, false, false);
message = this._next.SyncProcessMessage(msg);
}
catch (Exception ex)
{
message = new ReturnMessage(ex, (IMethodCallMessage)this._call);
}
finally
{
if (this._context != null)
{
Context.SwitchToContext(this._context);
}
}
return message;
}
// Token: 0x06002623 RID: 9763 RVA: 0x0007E05C File Offset: 0x0007C25C
public IMessageCtrl AsyncProcessMessage(IMessage msg, IMessageSink replySink)
{
throw new NotSupportedException();
}
// Token: 0x17000722 RID: 1826
// (get) Token: 0x06002624 RID: 9764 RVA: 0x0007E064 File Offset: 0x0007C264
public IMessageSink NextSink
{
get
{
return this._next;
}
}
// Token: 0x04000EDF RID: 3807
private IMessageSink _next;
// Token: 0x04000EE0 RID: 3808
private Context _context;
// Token: 0x04000EE1 RID: 3809
private IMessage _call;
}
}
}