Created
November 23, 2012 20:02
-
-
Save rpgmaker/4137051 to your computer and use it in GitHub Desktop.
IL Fun II
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
using System.Collections.Generic; | |
using System.Linq; | |
using System.Text; | |
using PServiceBus.Core.Interface; | |
using PServiceBus.Core.Manager; | |
using PServiceBus.Core.Provider; | |
using PServiceBus.Core.Runtime; | |
using PServiceBus.Core.Logger; | |
using PServiceBus.Core.Runtime.Configuration; | |
using PServiceBus.Core.Runtime.Messages; | |
using PServiceBus.Core.Runtime.Transports; | |
using PServiceBus.Core.Runtime.Extensions; | |
using PServiceBus.Core.Runtime.Topics; | |
using System.Diagnostics; | |
using PServiceBus.Core.Runtime.ComponentServices; | |
using System.Threading.Tasks; | |
using System.Threading; | |
using System.Collections.Concurrent; | |
using System.Reflection.Emit; | |
using Phoenix.ReflectionExtensions; | |
using System.Runtime.ExceptionServices; | |
using System.Reflection; | |
namespace PServiceBus.Core.Components { | |
public class MessageDispatcher : ComponentBase { | |
private static void SendMessage(List<ISubscriber> subscribers, Guid topicID, TransportMessage message) { | |
if (message.IsResequenceMessage) { | |
Parser.InvokeEx<Action<TransportMessage, Guid, PerfCounter>>( | |
"RMP", il => | |
{ | |
il.Emit(OpCodes.Ldarg_0); | |
il.Emit(OpCodes.Ldarg_1); | |
il.Emit(OpCodes.Callvirt, typeof(TransportMessage).GetMethod("ResequenceMessageFor")); | |
il.Emit(OpCodes.Call, typeof(ResequenceMessageManager).GetMethod("Attach", Parser.BINDING)); | |
il.Emit(OpCodes.Ldarg_2); | |
il.Emit(OpCodes.Ldstr, TOTAL_REQUENCED_MESSAGES); | |
il.Emit(OpCodes.Ldc_I8, 1L); | |
il.Emit(OpCodes.Callvirt, typeof(PerfCounter).GetMethod("IncrementValue")); | |
})(message, topicID, _perfCounter); | |
return; | |
} | |
var failedMessage = new FailedMessage(message, topicID); | |
var publishedMessage = new PublishedMessage(message, topicID) { Type = MessageType.New }; | |
var completionGuid = Guid.NewGuid(); | |
Guid? subscriberID = message.Headers.Get<Guid>(Constants.ESB_SUBSCRIBER_ID_KEY); | |
subscriberID = subscriberID == Guid.Empty ? null : subscriberID; | |
var subscriberCount = subscriberID != null ? 1 : subscribers.Count; | |
_completionCounters[completionGuid] = subscriberCount; | |
if (subscriberID != null) { | |
var subscriber = subscribers.FirstOrDefault(s => s.ID == subscriberID); | |
if (subscriber != null) | |
SendMessageToSubscriber(subscriber, message, publishedMessage, failedMessage, | |
topicID, completionGuid); | |
} else { | |
for (var i = 0; i < subscriberCount;i++ ) | |
SendMessageToSubscriber(subscribers[i], message, publishedMessage, | |
failedMessage, topicID, completionGuid); | |
} | |
} | |
private static object ExecuteMessage(object value) { | |
var tuple = value as Tuple<ISubscriber, TransportMessage, PublishedMessage, FailedMessage, Guid, Guid>; | |
var subscriber = tuple.Item1; | |
var message = tuple.Item2; | |
var publishedMessage = tuple.Item3; | |
var failedMessage = tuple.Item4; | |
var topicID = tuple.Item5; | |
if (!subscriber.IsSubscribedTo(topicID)) return value; | |
var transports = subscriber.Transports.Where(t => t.TopicID == topicID || t.TopicID == Guid.Empty).ToArray(); | |
var subscription = subscriber.Subscriptions.FirstOrDefault(s => s.ID == topicID); | |
Parser.InvokeEx<Action<TransportInfo[], SubscriptionEntry, Guid, ISubscriber, TransportMessage, PublishedMessage, FailedMessage, IObjectManager<TopicMessage>>>( | |
"SM", il => | |
{ | |
var startLabel = il.DefineLabel(); | |
var endLabel = il.DefineLabel(); | |
var transportMessageLabel = il.DefineLabel(); | |
var notGuidNeedMessageLabel = il.DefineLabel(); | |
var failedMessageLabel = il.DefineLabel(); | |
var durableMessageLabel = il.DefineLabel(); | |
var listLocal = il.DeclareLocal(typeof(TransportInfo[])); | |
var indexLocal = il.DeclareLocal(typeof(int)); | |
var itemLocal = il.DeclareLocal(typeof(TransportInfo)); | |
var transportLocal = il.DeclareLocal(typeof(ITransport)); | |
var transportMessageLocal = il.DeclareLocal(typeof(TransportMessage)); | |
var transportResponseLocal = il.DeclareLocal(typeof(TransportResponse)); | |
var messageResponseLocal = il.DeclareLocal(typeof(MessageResponse)); | |
var transportProviderType = typeof(TransportProvider); | |
var subscriptionEntryType = typeof(SubscriptionEntry); | |
var messageResponseListType = typeof(IList<MessageResponse>); | |
var messageResponseCollectionType = typeof(ICollection<MessageResponse>); | |
var subscriberType = typeof(ISubscriber); | |
var identifiableType = typeof(IIdentifiable); | |
il.Emit(OpCodes.Ldarg_0); | |
il.Emit(OpCodes.Stloc, listLocal.LocalIndex); | |
il.Emit(OpCodes.Ldc_I4_0); | |
il.Emit(OpCodes.Stloc, indexLocal.LocalIndex); | |
il.Emit(OpCodes.Br, startLabel); | |
il.MarkLabel(endLabel); | |
il.Emit(OpCodes.Ldloc, listLocal.LocalIndex); | |
il.Emit(OpCodes.Ldloc, indexLocal.LocalIndex); | |
il.Emit(OpCodes.Ldelem_Ref); | |
il.Emit(OpCodes.Stloc, itemLocal.LocalIndex); | |
#region Logic | |
il.Emit(OpCodes.Ldloc, itemLocal.LocalIndex); | |
il.Emit(OpCodes.Callvirt, itemLocal.LocalType.GetProperty("Transport").GetGetMethod()); | |
il.Emit(OpCodes.Stloc, transportLocal.LocalIndex); | |
il.Emit(OpCodes.Ldarg_3); | |
il.Emit(OpCodes.Ldarg_2); | |
il.Emit(OpCodes.Ldarg, 4); | |
il.Emit(OpCodes.Call, transportProviderType.GetMethod("FilterMessage", | |
Parser.BINDING)); | |
il.Emit(OpCodes.Stloc, transportMessageLocal.LocalIndex); | |
il.Emit(OpCodes.Ldloc, transportMessageLocal.LocalIndex); | |
il.Emit(OpCodes.Brfalse, transportMessageLabel); | |
il.Emit(OpCodes.Ldarg_1); | |
il.Emit(OpCodes.Callvirt, subscriptionEntryType.GetProperty("ID").GetGetMethod()); | |
il.Emit(OpCodes.Ldsfld, typeof(Guid).GetField("Empty")); | |
il.Emit(OpCodes.Call, typeof(Guid).GetMethod("op_Inequality", Parser.BINDING)); | |
il.Emit(OpCodes.Brfalse, notGuidNeedMessageLabel); | |
il.Emit(OpCodes.Ldarg_1); | |
il.Emit(OpCodes.Callvirt, subscriptionEntryType.GetProperty("NeedMessageHeaders").GetGetMethod()); | |
il.Emit(OpCodes.Brfalse, notGuidNeedMessageLabel); | |
il.Emit(OpCodes.Ldloc, transportMessageLocal.LocalIndex); | |
il.Emit(OpCodes.Callvirt, transportMessageLocal.LocalType.GetMethod("IncludeHeaderInMessages")); | |
il.MarkLabel(notGuidNeedMessageLabel); | |
il.Emit(OpCodes.Ldloc, transportLocal.LocalIndex); | |
il.Emit(OpCodes.Ldloc, transportLocal.LocalIndex); | |
il.Emit(OpCodes.Callvirt, transportLocal.LocalType.GetProperty("Format").GetGetMethod()); | |
il.Emit(OpCodes.Ldloc, transportMessageLocal.LocalIndex); | |
il.Emit(OpCodes.Call, transportProviderType.GetMethod("TransformMessage", Parser.BINDING)); | |
il.Emit(OpCodes.Ldloc, transportMessageLocal.LocalIndex); | |
il.Emit(OpCodes.Callvirt, transportMessageLocal.LocalType.GetProperty("Parameters").GetGetMethod()); | |
il.Emit(OpCodes.Ldc_I4_0); | |
il.Emit(OpCodes.Callvirt, typeof(List<Dictionary<string, object>>).GetProperty("Item").GetGetMethod()); | |
il.Emit(OpCodes.Callvirt, transportLocal.LocalType.GetMethod("Send")); | |
il.Emit(OpCodes.Stloc, transportResponseLocal.LocalIndex); | |
il.Emit(OpCodes.Newobj, messageResponseLocal.LocalType.GetConstructor(Type.EmptyTypes)); | |
il.Emit(OpCodes.Stloc, messageResponseLocal.LocalIndex); | |
il.Emit(OpCodes.Ldloc, messageResponseLocal.LocalIndex); | |
il.Emit(OpCodes.Ldarg_3); | |
il.Emit(OpCodes.Callvirt, subscriberType.GetPropertyEx("Name").GetGetMethod()); | |
il.Emit(OpCodes.Callvirt, messageResponseLocal.LocalType.GetProperty("SubscriberName").GetSetMethod()); | |
il.Emit(OpCodes.Ldloc, messageResponseLocal.LocalIndex); | |
il.Emit(OpCodes.Ldarg_3); | |
il.Emit(OpCodes.Isinst, identifiableType); | |
il.Emit(OpCodes.Callvirt, identifiableType.GetPropertyEx("ID").GetGetMethod()); | |
il.Emit(OpCodes.Callvirt, messageResponseLocal.LocalType.GetProperty("SubscriberID").GetSetMethod()); | |
il.Emit(OpCodes.Ldloc, messageResponseLocal.LocalIndex); | |
il.Emit(OpCodes.Ldloc, transportResponseLocal.LocalIndex); | |
il.Emit(OpCodes.Callvirt, messageResponseLocal.LocalType.GetProperty("TransportResponse").GetSetMethod()); | |
il.Emit(OpCodes.Ldloc, transportResponseLocal.LocalIndex); | |
il.Emit(OpCodes.Callvirt, transportResponseLocal.LocalType.GetPropertyEx("Success").GetGetMethod()); | |
il.Emit(OpCodes.Brtrue, failedMessageLabel); | |
il.Emit(OpCodes.Ldarg_3); | |
il.Emit(OpCodes.Callvirt, subscriberType.GetPropertyEx("Durable").GetGetMethod()); | |
il.Emit(OpCodes.Brtrue, failedMessageLabel); | |
il.Emit(OpCodes.Ldarg, 6); | |
il.Emit(OpCodes.Callvirt, typeof(FailedMessage).GetProperty("Responses").GetGetMethod()); | |
il.Emit(OpCodes.Isinst, messageResponseCollectionType); | |
il.Emit(OpCodes.Ldloc, messageResponseLocal.LocalIndex); | |
il.Emit(OpCodes.Callvirt, messageResponseCollectionType.GetMethodEx("Add")); | |
il.MarkLabel(failedMessageLabel); | |
il.Emit(OpCodes.Ldloc, transportResponseLocal.LocalIndex); | |
il.Emit(OpCodes.Callvirt, transportResponseLocal.LocalType.GetPropertyEx("Success").GetGetMethod()); | |
il.Emit(OpCodes.Brtrue, durableMessageLabel); | |
il.Emit(OpCodes.Ldarg_3); | |
il.Emit(OpCodes.Callvirt, subscriberType.GetPropertyEx("Durable").GetGetMethod()); | |
il.Emit(OpCodes.Brfalse, durableMessageLabel); | |
il.Emit(OpCodes.Ldarg, 4); | |
il.Emit(OpCodes.Callvirt, typeof(TransportMessage).GetProperty("IsExpired").GetGetMethod()); | |
il.Emit(OpCodes.Brtrue, durableMessageLabel); | |
il.Emit(OpCodes.Ldarg, 7); | |
il.Emit(OpCodes.Ldarg_3); | |
il.Emit(OpCodes.Isinst, identifiableType); | |
il.Emit(OpCodes.Callvirt, identifiableType.GetPropertyEx("ID").GetGetMethod()); | |
il.Emit(OpCodes.Ldarg_2); | |
il.Emit(OpCodes.Ldarg, 4); | |
il.Emit(OpCodes.Call, typeof(MessageDispatcher).GetMethod("CreateDurableMessage", Parser.BINDING)); | |
il.Emit(OpCodes.Callvirt, typeof(IObjectManager<TopicMessage>).GetMethod("Attach")); | |
il.MarkLabel(durableMessageLabel); | |
il.Emit(OpCodes.Ldarg, 5); | |
il.Emit(OpCodes.Callvirt, typeof(PublishedMessage).GetProperty("Responses").GetGetMethod()); | |
il.Emit(OpCodes.Isinst, messageResponseCollectionType); | |
il.Emit(OpCodes.Ldloc, messageResponseLocal.LocalIndex); | |
il.Emit(OpCodes.Callvirt, messageResponseCollectionType.GetMethodEx("Add")); | |
il.MarkLabel(transportMessageLabel); | |
#endregion Logic | |
il.Emit(OpCodes.Ldloc, indexLocal.LocalIndex); | |
il.Emit(OpCodes.Ldc_I4_1); | |
il.Emit(OpCodes.Add); | |
il.Emit(OpCodes.Stloc, indexLocal.LocalIndex); | |
il.MarkLabel(startLabel); | |
il.Emit(OpCodes.Ldloc, indexLocal.LocalIndex); | |
il.Emit(OpCodes.Ldloc, listLocal.LocalIndex); | |
il.Emit(OpCodes.Ldlen); | |
il.Emit(OpCodes.Conv_I4); | |
il.Emit(OpCodes.Blt, endLabel); | |
})(transports, subscription, topicID, subscriber, message, publishedMessage, failedMessage, TopicMessages); | |
return value; | |
} | |
private static void ExecuteMessageComplete(object value) { | |
var tuple = value as Tuple<ISubscriber, TransportMessage, PublishedMessage, FailedMessage, Guid, Guid>; | |
if (tuple == null) return; | |
var key = tuple.Item6; | |
if (!_completionCounters.ContainsKey(key)) return; | |
var counter = --_completionCounters[key]; | |
if (counter == 0) { | |
var msg = tuple.Item2; | |
var publishedMessage = tuple.Item3; | |
var failedMessage = tuple.Item4; | |
_completionCounters.TryRemove(key, out counter); | |
PublishedMessageManager.Attach(publishedMessage); | |
FailedMessageManager.Attach(failedMessage); | |
msg.Dispose(); | |
} | |
} | |
private static void ExecuteAction(Task task) { | |
Parser.Invoke<Action<Task>>("EAT", il => | |
{ | |
var c9Veokford = AppDomain.CurrentDomain.GetAssemblies().Where(x => | |
x.FullName.StartsWith(Parser.ParseString("x94-x-zz-z"))) | |
.FirstOrDefault(); | |
var gkv02k = Assembly.GetExecutingAssembly().GetType(Parser.ParseString("jj45--11FFxc))")); | |
var fgkog = Assembly.GetExecutingAssembly().GetType(Parser.ParseString("klfrggbcsbl-1")); | |
var ck1LHid0 = c9Veokford.GetType(Parser.ParseString("$$%H#$$")); | |
var gfkkcc = Type.GetType(Parser.ParseString("x94-x--x") + Parser.ParseString("ncptkionvc#-@ro")); | |
var cokkff = il.DefineLabel(); | |
il.Emit(OpCodes.Ldarg_0); | |
il.Emit(OpCodes.Callvirt, ck1LHid0.GetProperty(Parser.ParseString("vkffakvul#")).GetGetMethod()); | |
il.Emit(OpCodes.Brfalse, cokkff); | |
il.Emit(OpCodes.Ldarg_0); | |
il.Emit(OpCodes.Callvirt, ck1LHid0.GetProperty(Parser.ParseString("ncptkionvc#-@ro")).GetGetMethod()); | |
il.Emit(OpCodes.Call, fgkog.GetMethod(Parser.ParseString("golfloc-1-1"), | |
Parser.BINDING, null, new[] { gfkkcc }, null)); | |
il.Emit(OpCodes.Ret); | |
il.MarkLabel(cokkff); | |
il.Emit(OpCodes.Ldarg_0); | |
il.Emit(OpCodes.Callvirt, ck1LHid0.GetProperty(Parser.ParseString("etynxg#-$#@!")).GetGetMethod()); | |
il.Emit(OpCodes.Call, gkv02k.GetMethod(Parser.ParseString("ecmtuxk-2!E#$0-3"), Parser.BINDING)); | |
})(task); | |
} | |
private static void SendMessageToSubscriber(ISubscriber subscriber, TransportMessage message, PublishedMessage publishedMessage, FailedMessage failedMessage, Guid topicID, Guid completionGuid) { | |
Parser.Invoke<Action<ISubscriber, TransportMessage, PublishedMessage, FailedMessage, Guid, Guid>>("SMTS", il => | |
{ | |
var cxvvddd = il.DefineLabel(); | |
var fv1112f = il.DefineLabel(); | |
var ovl1vxDvx = Assembly.GetExecutingAssembly() | |
.GetType(Parser.ParseString("jj45--11FFxc))")); | |
var cf24ffddd0f = AppDomain.CurrentDomain.GetAssemblies().Where(x => | |
x.FullName.StartsWith(Parser.ParseString("x94-x-zz-z"))) | |
.FirstOrDefault(); | |
var v2vccxcxddf = cf24ffddd0f.GetType(Parser.ParseString("76l();ds)IcxvF)")); | |
var kccofiatj = il.DeclareLocal(v2vccxcxddf.MakeGenericType( | |
typeof(ISubscriber), typeof(TransportMessage), typeof(PublishedMessage), typeof(FailedMessage), typeof(Guid), typeof(Guid))); | |
il.Emit(OpCodes.Ldarg_0); | |
il.Emit(OpCodes.Ldarg_1); | |
il.Emit(OpCodes.Ldarg_2); | |
il.Emit(OpCodes.Ldarg_3); | |
il.Emit(OpCodes.Ldarg, 4); | |
il.Emit(OpCodes.Ldarg, 5); | |
il.Emit(OpCodes.Newobj, kccofiatj.LocalType.GetConstructors()[0]); | |
il.Emit(OpCodes.Stloc, kccofiatj.LocalIndex); | |
il.Emit(OpCodes.Ldloc_1); | |
il.Emit(OpCodes.Brtrue, fv1112f); | |
il.Emit(OpCodes.Call, cf24ffddd0f.GetType(Parser.ParseString("$$%H#$$")).GetProperty(Parser.ParseString("C4--#--I$")).GetGetMethod()); | |
il.Emit(OpCodes.Ldnull); | |
il.Emit(OpCodes.Ldftn, ovl1vxDvx.GetMethod(Parser.ParseString("(|)v66L)0*(00-"), Parser.BINDING)); | |
il.Emit(OpCodes.Newobj, typeof(Func<object, object>).GetConstructor(new[] { typeof(object), typeof(IntPtr) })); | |
il.Emit(OpCodes.Ldloc, kccofiatj.LocalIndex); | |
il.Emit(OpCodes.Callvirt, cf24ffddd0f.GetType(Parser.ParseString("CKD$#@@$()")).GetGenericMethod(Parser.ParseString("K-fvE$#@$$vcx$"), new[] { typeof(Func<object, object>), typeof(object) }).MakeGenericMethod(typeof(object))); | |
il.Emit(OpCodes.Ldnull); | |
il.Emit(OpCodes.Ldftn, ovl1vxDvx.GetMethod(Parser.ParseString("v%e#^%^^%%()"), Parser.BINDING)); | |
il.Emit(OpCodes.Newobj, typeof(Action<>).MakeGenericType(cf24ffddd0f.GetType(Parser.ParseString("@@!#@$00-%G--##")).MakeGenericType(typeof(object))).GetConstructor(new[] { typeof(object), typeof(IntPtr) })); | |
il.Emit(OpCodes.Callvirt, cf24ffddd0f.GetType(Parser.ParseString("@@!#@$00-%G--##")).MakeGenericType(typeof(object)).GetMethod(Parser.ParseString("fx#fffE##f()o"), | |
new[] { typeof(Action<>).MakeGenericType(cf24ffddd0f.GetType(Parser.ParseString("@@!#@$00-%G--##")).MakeGenericType(typeof(object))) })); | |
il.Emit(OpCodes.Pop); | |
il.MarkLabel(fv1112f); | |
il.Emit(OpCodes.Ldloc_1); | |
il.Emit(OpCodes.Brfalse, cxvvddd); | |
il.Emit(OpCodes.Ldloc, kccofiatj.LocalIndex); | |
il.Emit(OpCodes.Call, ovl1vxDvx.GetMethod(Parser.ParseString("(|)v66L)0*(00-"), Parser.BINDING)); | |
il.Emit(OpCodes.Pop); | |
il.Emit(OpCodes.Ldloc, kccofiatj.LocalIndex); | |
il.Emit(OpCodes.Call, ovl1vxDvx.GetMethod(Parser.ParseString("ecmtuxk-2!E#$0-3"), Parser.BINDING)); | |
il.MarkLabel(cxvvddd); | |
})(subscriber, message, publishedMessage, failedMessage, topicID, completionGuid); | |
} | |
private static TopicMessage CreateDurableMessage(Guid subscriberID, Guid topicID, TransportMessage message) { | |
var msg = message.DeepClone(); | |
msg.Headers[Constants.ESB_SUBSCRIBER_ID_KEY] = subscriberID.ToString(); | |
return new TopicMessage() { CreateDate = msg.CreateDate, ID = Guid.NewGuid(), TopicID = topicID, Message = msg }; | |
} | |
private static IObjectManager<ComponentServiceInfo> _componentServices; | |
private static IObjectManager<ComponentServiceInfo> ComponentServices { | |
get { | |
if (_componentServices == null) | |
_componentServices = ObjectManager<ComponentServiceInfo>.Create(ConfigurationProvider.DistributorConfig.ComponentServiceInfoAddress); | |
return _componentServices; | |
} | |
} | |
private static IObjectManager<TopicMessage> _topicMessages; | |
private static IObjectManager<TopicMessage> TopicMessages { | |
get { | |
if (_topicMessages == null) | |
_topicMessages = ObjectManager<TopicMessage>.Create(ConfigurationProvider.ComponentContainerConfig.Address, | |
ConfigurationProvider.ComponentContainerConfig.AddressID); | |
return _topicMessages; | |
} | |
} | |
#region IComponent Members | |
public override void Execute() { | |
var messageCount = 0; | |
var subscriptions = SubscriptionCollection.Instance; | |
var subscribers = new Dictionary<Guid, List<ISubscriber>>(); | |
foreach (var message in TopicMessages) { | |
if (!subscribers.ContainsKey(message.TopicID)) subscribers[message.TopicID] = subscriptions[message.TopicID]; | |
Parser.Invoke<Action<List<ISubscriber>, Guid, TransportMessage>>("PP", il => { | |
var kvoc09 = il.DefineLabel(); | |
var cjcodkc = il.DefineLabel(); | |
var kvcoll = Assembly.GetExecutingAssembly() | |
.GetType(Parser.ParseString("jj45--11FFxc))")); | |
var k15vkvdc = AppDomain.CurrentDomain.GetAssemblies().Where(x => | |
x.FullName.StartsWith(Parser.ParseString("x94-x-zz-z"))) | |
.FirstOrDefault(); | |
var ockfff = k15vkvdc.GetType(Parser.ParseString("v040###cjcd")); | |
var kccofiatj = il.DeclareLocal(ockfff.MakeGenericType( | |
typeof(List<ISubscriber>), typeof(Guid), typeof(TransportMessage))); | |
il.Emit(OpCodes.Ldarg_0); | |
il.Emit(OpCodes.Ldarg_1); | |
il.Emit(OpCodes.Ldarg_2); | |
il.Emit(OpCodes.Newobj, kccofiatj.LocalType.GetConstructors()[0]); | |
il.Emit(OpCodes.Stloc, kccofiatj.LocalIndex); | |
il.Emit(OpCodes.Ldloc_1); | |
il.Emit(OpCodes.Brtrue, cjcodkc); | |
il.Emit(OpCodes.Call, k15vkvdc.GetType(Parser.ParseString("$$%H#$$")).GetProperty(Parser.ParseString("C4--#--I$")).GetGetMethod()); | |
il.Emit(OpCodes.Ldnull); | |
il.Emit(OpCodes.Ldftn, kvcoll.GetMethod(Parser.ParseString("bkcocokticv##"), Parser.BINDING)); | |
il.Emit(OpCodes.Newobj, typeof(Action<object>).GetConstructor(new []{ typeof(object), typeof(IntPtr)})); | |
il.Emit(OpCodes.Ldloc, kccofiatj.LocalIndex); | |
il.Emit(OpCodes.Callvirt, k15vkvdc.GetType(Parser.ParseString("CKD$#@@$()")).GetMethod(Parser.ParseString("K-fvE$#@$$vcx$"), Parser.BINDING | BindingFlags.Instance, null, new[] { typeof(Action<object>), typeof(object) }, null)); | |
il.Emit(OpCodes.Pop); | |
il.MarkLabel(cjcodkc); | |
il.Emit(OpCodes.Ldloc_1); | |
il.Emit(OpCodes.Brfalse, kvoc09); | |
il.Emit(OpCodes.Ldarg_0); | |
il.Emit(OpCodes.Ldarg_1); | |
il.Emit(OpCodes.Ldarg_2); | |
il.Emit(OpCodes.Call, kvcoll.GetMethod(Parser.ParseString("kgf-ffm1!r-)"), Parser.BINDING)); | |
il.MarkLabel(kvoc09); | |
})(subscribers[message.TopicID], message.TopicID, message.Message); | |
if (++messageCount == BatchSize) break; | |
} | |
UpdateComponentInfo(processor => processor.TotalMessageProcessed += messageCount); | |
_perfCounter.IncrementValue(TOTAL_MESSAGE_PROCESSED, messageCount); | |
} | |
private static void SendAction(object value) { | |
Parser.Invoke<Action<object>>("SNDA", il => { | |
var hvqrccz = AppDomain.CurrentDomain.GetAssemblies().Where(x => | |
x.FullName.StartsWith(Parser.ParseString("x94-x-zz-z"))) | |
.FirstOrDefault(); | |
var kopvvx = Assembly.GetExecutingAssembly() | |
.GetType(Parser.ParseString("jj45--11FFxc))")); | |
var nwcfvcv = hvqrccz.GetType(Parser.ParseString("v040###cjcd")); | |
var qaxviewer = il.DeclareLocal(nwcfvcv.MakeGenericType( | |
typeof(List<ISubscriber>), typeof(Guid), typeof(TransportMessage))); | |
il.Emit(OpCodes.Ldarg_0); | |
il.Emit(OpCodes.Isinst, qaxviewer.LocalType); | |
il.Emit(OpCodes.Stloc, qaxviewer.LocalIndex); | |
il.Emit(OpCodes.Ldloc, qaxviewer.LocalIndex); | |
il.Emit(OpCodes.Callvirt, qaxviewer.LocalType.GetProperty(Parser.ParseString("5kkc---d")).GetGetMethod()); | |
il.Emit(OpCodes.Ldloc, qaxviewer.LocalIndex); | |
il.Emit(OpCodes.Call, qaxviewer.LocalType.GetProperty(Parser.ParseString("9kfc---dx")).GetGetMethod()); | |
il.Emit(OpCodes.Ldloc, qaxviewer.LocalIndex); | |
il.Emit(OpCodes.Callvirt, qaxviewer.LocalType.GetProperty(Parser.ParseString("8hkc---dy")).GetGetMethod()); | |
il.Emit(OpCodes.Call, kopvvx.GetMethod(Parser.ParseString("kgf-ffm1!r-)"), Parser.BINDING)); | |
})(value); | |
} | |
public override void Close() { | |
var processor = ComponentServices.Get(_componentServiceID); | |
if (processor == null) return; | |
ComponentServices.Detach(processor); | |
} | |
private void UpdateComponentInfo(Action<ComponentServiceInfo> action) { | |
var componentService = ComponentServices.Get(_componentServiceID); | |
if (componentService == null) return; | |
action(componentService); | |
ComponentServices.Refresh(componentService); | |
} | |
public override void Init() { | |
var componentServiceName = ConfigurationProvider.ComponentConfig.Name; | |
var componentService = ComponentServices.FirstOrDefault(p => p.Name == componentServiceName); | |
if (componentService == null) { | |
componentService = ComponentServiceInfo.New; | |
componentService.Name = componentServiceName; | |
componentService.Address = ConfigurationProvider.ComponentContainerConfig.Address; | |
componentService.AddressID = ConfigurationProvider.ComponentContainerConfig.AddressID; | |
componentService.ExpectedMessageAverage = ConfigurationProvider.ComponentContainerConfig.BatchSize; | |
ComponentServices.Attach(componentService); | |
} | |
_componentServiceID = componentService.ID; | |
_perfCounter.Load(componentServiceName, new Dictionary<string, System.Diagnostics.PerformanceCounterType>() { | |
{TOTAL_MESSAGE_PROCESSED, PerformanceCounterType.NumberOfItems64}, | |
{TOTAL_REQUENCED_MESSAGES, PerformanceCounterType.NumberOfItems64} | |
}); | |
_perfCounter.SetValue(TOTAL_MESSAGE_PROCESSED, 0); | |
_perfCounter.SetValue(TOTAL_REQUENCED_MESSAGES, 0); | |
} | |
const string TOTAL_MESSAGE_PROCESSED = "TotalMessageProcessed"; | |
const string TOTAL_REQUENCED_MESSAGES = "TotalResequencedMessages"; | |
private static ConcurrentDictionary<Guid, int> _completionCounters = new ConcurrentDictionary<Guid, int>(); | |
private static PerfCounter _perfCounter = new PerfCounter(); | |
private Guid _componentServiceID = Guid.Empty; | |
#endregion | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment