scripts
This commit is contained in:
@@ -0,0 +1,162 @@
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.IO;
|
||||
using System.Reflection;
|
||||
using System.Runtime.Remoting.Contexts;
|
||||
using System.Runtime.Remoting.Messaging;
|
||||
using System.Threading;
|
||||
|
||||
namespace System.Runtime.Remoting.Channels
|
||||
{
|
||||
// Token: 0x0200039B RID: 923
|
||||
[MonoTODO("Handle domain unloading?")]
|
||||
internal class CrossAppDomainSink : IMessageSink
|
||||
{
|
||||
// Token: 0x0600258C RID: 9612 RVA: 0x0007C98C File Offset: 0x0007AB8C
|
||||
internal CrossAppDomainSink(int domainID)
|
||||
{
|
||||
this._domainID = domainID;
|
||||
}
|
||||
|
||||
// Token: 0x0600258E RID: 9614 RVA: 0x0007C9C4 File Offset: 0x0007ABC4
|
||||
internal static CrossAppDomainSink GetSink(int domainID)
|
||||
{
|
||||
object syncRoot = CrossAppDomainSink.s_sinks.SyncRoot;
|
||||
CrossAppDomainSink crossAppDomainSink;
|
||||
lock (syncRoot)
|
||||
{
|
||||
if (CrossAppDomainSink.s_sinks.ContainsKey(domainID))
|
||||
{
|
||||
crossAppDomainSink = (CrossAppDomainSink)CrossAppDomainSink.s_sinks[domainID];
|
||||
}
|
||||
else
|
||||
{
|
||||
CrossAppDomainSink crossAppDomainSink2 = new CrossAppDomainSink(domainID);
|
||||
CrossAppDomainSink.s_sinks[domainID] = crossAppDomainSink2;
|
||||
crossAppDomainSink = crossAppDomainSink2;
|
||||
}
|
||||
}
|
||||
return crossAppDomainSink;
|
||||
}
|
||||
|
||||
// Token: 0x170006FD RID: 1789
|
||||
// (get) Token: 0x0600258F RID: 9615 RVA: 0x0007CA5C File Offset: 0x0007AC5C
|
||||
internal int TargetDomainId
|
||||
{
|
||||
get
|
||||
{
|
||||
return this._domainID;
|
||||
}
|
||||
}
|
||||
|
||||
// Token: 0x06002590 RID: 9616 RVA: 0x0007CA64 File Offset: 0x0007AC64
|
||||
private static CrossAppDomainSink.ProcessMessageRes ProcessMessageInDomain(byte[] arrRequest, CADMethodCallMessage cadMsg)
|
||||
{
|
||||
CrossAppDomainSink.ProcessMessageRes processMessageRes = default(CrossAppDomainSink.ProcessMessageRes);
|
||||
try
|
||||
{
|
||||
AppDomain.CurrentDomain.ProcessMessageInDomain(arrRequest, cadMsg, out processMessageRes.arrResponse, out processMessageRes.cadMrm);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
IMessage message = new MethodResponse(ex, new ErrorMessage());
|
||||
processMessageRes.arrResponse = CADSerializer.SerializeMessage(message).GetBuffer();
|
||||
}
|
||||
return processMessageRes;
|
||||
}
|
||||
|
||||
// Token: 0x06002591 RID: 9617 RVA: 0x0007CADC File Offset: 0x0007ACDC
|
||||
public virtual IMessage SyncProcessMessage(IMessage msgRequest)
|
||||
{
|
||||
IMessage message = null;
|
||||
try
|
||||
{
|
||||
byte[] array = null;
|
||||
byte[] array2 = null;
|
||||
CADMethodReturnMessage cadmethodReturnMessage = null;
|
||||
CADMethodCallMessage cadmethodCallMessage = CADMethodCallMessage.Create(msgRequest);
|
||||
if (cadmethodCallMessage == null)
|
||||
{
|
||||
MemoryStream memoryStream = CADSerializer.SerializeMessage(msgRequest);
|
||||
array2 = memoryStream.GetBuffer();
|
||||
}
|
||||
Context currentContext = Thread.CurrentContext;
|
||||
try
|
||||
{
|
||||
CrossAppDomainSink.ProcessMessageRes processMessageRes = (CrossAppDomainSink.ProcessMessageRes)AppDomain.InvokeInDomainByID(this._domainID, CrossAppDomainSink.processMessageMethod, null, new object[] { array2, cadmethodCallMessage });
|
||||
array = processMessageRes.arrResponse;
|
||||
cadmethodReturnMessage = processMessageRes.cadMrm;
|
||||
}
|
||||
finally
|
||||
{
|
||||
AppDomain.InternalSetContext(currentContext);
|
||||
}
|
||||
if (array != null)
|
||||
{
|
||||
MemoryStream memoryStream2 = new MemoryStream(array);
|
||||
message = CADSerializer.DeserializeMessage(memoryStream2, msgRequest as IMethodCallMessage);
|
||||
}
|
||||
else
|
||||
{
|
||||
message = new MethodResponse(msgRequest as IMethodCallMessage, cadmethodReturnMessage);
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
try
|
||||
{
|
||||
message = new ReturnMessage(ex, msgRequest as IMethodCallMessage);
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
}
|
||||
}
|
||||
return message;
|
||||
}
|
||||
|
||||
// Token: 0x06002592 RID: 9618 RVA: 0x0007CBFC File Offset: 0x0007ADFC
|
||||
public virtual IMessageCtrl AsyncProcessMessage(IMessage reqMsg, IMessageSink replySink)
|
||||
{
|
||||
AsyncRequest asyncRequest = new AsyncRequest(reqMsg, replySink);
|
||||
ThreadPool.QueueUserWorkItem(new WaitCallback(this.SendAsyncMessage), asyncRequest);
|
||||
return null;
|
||||
}
|
||||
|
||||
// Token: 0x06002593 RID: 9619 RVA: 0x0007CC28 File Offset: 0x0007AE28
|
||||
public void SendAsyncMessage(object data)
|
||||
{
|
||||
AsyncRequest asyncRequest = (AsyncRequest)data;
|
||||
IMessage message = this.SyncProcessMessage(asyncRequest.MsgRequest);
|
||||
asyncRequest.ReplySink.SyncProcessMessage(message);
|
||||
}
|
||||
|
||||
// Token: 0x170006FE RID: 1790
|
||||
// (get) Token: 0x06002594 RID: 9620 RVA: 0x0007CC58 File Offset: 0x0007AE58
|
||||
public IMessageSink NextSink
|
||||
{
|
||||
get
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
// Token: 0x04000EBB RID: 3771
|
||||
private static Hashtable s_sinks = new Hashtable();
|
||||
|
||||
// Token: 0x04000EBC RID: 3772
|
||||
private static MethodInfo processMessageMethod = typeof(CrossAppDomainSink).GetMethod("ProcessMessageInDomain", BindingFlags.Static | BindingFlags.NonPublic);
|
||||
|
||||
// Token: 0x04000EBD RID: 3773
|
||||
private int _domainID;
|
||||
|
||||
// Token: 0x0200039C RID: 924
|
||||
private struct ProcessMessageRes
|
||||
{
|
||||
// Token: 0x04000EBE RID: 3774
|
||||
public byte[] arrResponse;
|
||||
|
||||
// Token: 0x04000EBF RID: 3775
|
||||
public CADMethodReturnMessage cadMrm;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user