Example #1
0
        public async Task Handler(INetConnection client, string messageWrapperContent)
        {
            Console.WriteLine("Receive: " + messageWrapperContent);
            var messageWrapper = MessageWrapper.Parse(messageWrapperContent);

            if (messageWrapper != null)
            {
                var content = messageWrapper.Content;

                var eventName = content.GetType().Name;
                if (_subsManager.HasSubscriptionsForEvent(eventName))
                {
                    using (var scope = _autofac.BeginLifetimeScope(AUTOFAC_SCOPE_NAME))
                    {
                        var subscriptions = _subsManager.GetHandlersForEvent(eventName);
                        foreach (var subscription in subscriptions)
                        {
                            if (subscription.IsDynamic)
                            {
                                var handler = scope.ResolveOptional(subscription.HandlerType) as IDynamicMessageHandler;
                                if (handler == null)
                                {
                                    continue;
                                }

                                await Task.Yield();

                                await handler.Handle(client, content);
                            }
                            else
                            {
                                var handler = scope.ResolveOptional(subscription.HandlerType);
                                if (handler == null)
                                {
                                    continue;
                                }
                                var eventType        = _subsManager.GetEventTypeByName(eventName);
                                var integrationEvent = content;
                                var concreteType     = typeof(IMessageHandler <>).MakeGenericType(eventType);

                                await Task.Yield();

                                await(Task) concreteType.GetMethod("Handle").Invoke(handler, new object[] { client, integrationEvent });
                            }
                        }
                    }
                }
                else
                {
                    _logger.LogWarning("No subscription for RabbitMQ event: {EventName}", eventName);
                }
            }
        }
Example #2
0
 /// <summary>
 /// 将消息添加到位于消息池中【接收到的消息队列】的结尾处。
 /// </summary>
 public override void EnqueueReceiving(string message)
 {
     message = message.Trim();
     if (!string.IsNullOrEmpty(message))
     {
         lock (_ReceiveLock)
         {
             _ReceivingQueue.Enqueue(message);
         }
         MessageWrapper wrapp = MessageWrapper.Parse(message, MessageSource.AsyncReceiving);
         OnReceivingMessageArrival(wrapp);
     }
 }