Пример #1
0
        /// <summary>
        /// Initializes a new instance of the <see cref="MessageProcessingRpcReceive{TReceivedMessage}" /> class.
        /// </summary>
        /// <param name="configurationReceive">The configuration receive.</param>
        /// <param name="receiveMessagesFactory">The receive messages factory.</param>
        /// <param name="messageContextFactory">The message context factory.</param>
        /// <param name="messageHandler">The message handler.</param>
        /// <param name="rpcContextFactory">The RPC context factory.</param>
        /// <param name="commitMessage">The commit message.</param>
        public MessageProcessingRpcReceive(
            QueueConsumerConfiguration configurationReceive,
            IReceiveMessagesFactory receiveMessagesFactory,
            IMessageContextFactory messageContextFactory,
            IMessageHandlerRegistration messageHandler,
            IRpcContextFactory rpcContextFactory,
            ICommitMessage commitMessage)
        {
            Guard.NotNull(() => configurationReceive, configurationReceive);
            Guard.NotNull(() => receiveMessagesFactory, receiveMessagesFactory);
            Guard.NotNull(() => messageContextFactory, messageContextFactory);
            Guard.NotNull(() => messageHandler, messageHandler);
            Guard.NotNull(() => rpcContextFactory, rpcContextFactory);
            Guard.NotNull(() => commitMessage, commitMessage);

            _configurationReceive   = configurationReceive;
            _receiveMessagesFactory = receiveMessagesFactory;
            _messageContextFactory  = messageContextFactory;
            _messageHandler         = messageHandler;
            _rpcContextFactory      = rpcContextFactory;
            _commitMessage          = commitMessage;

            void Action(IReceivedMessage <TReceivedMessage> message, IWorkerNotification worker)
            {
            }

            messageHandler.Set((Action <IReceivedMessage <TReceivedMessage>, IWorkerNotification>)Action);
        }
Пример #2
0
        /// <summary>
        /// Register a synchronous message handler delegate for the message type.
        /// </summary>
        /// <typeparam name="TMessage">Type of message.</typeparam>
        /// <param name="syncMessageHandler">Synchronous message handler delegate.</param>
        public static void Register <TMessage>(this IMessageHandlerRegistration registration, Action <TMessage> syncMessageHandler)
            where TMessage : class
        {
            if (registration == null)
            {
                throw new ArgumentNullException(nameof(registration));
            }

            if (syncMessageHandler == null)
            {
                throw new ArgumentNullException(nameof(syncMessageHandler));
            }

            // Convert to async delegate.
            registration.Register <TMessage>((message, cancellationToken) =>
            {
                try
                {
                    syncMessageHandler.Invoke(message);
                    return(TaskUtility.CompletedTask);
                }
                catch (Exception ex)
                {
                    return(TaskUtility.FromException(ex));
                }
            });
        }
Пример #3
0
        public static bool IsPublishOnly(this IMessageHandlerRegistration handlerRegistration)
        {
            if (handlerRegistration == null)
            {
                throw new ArgumentNullException(nameof(handlerRegistration));
            }

            var config = handlerRegistration.Configuration;

            if (config.Count == 0)
            {
                return(false);
            }

            var configEntry = config.OfType <PublishOnlyAttribute>().FirstOrDefault();

            return(configEntry != null && configEntry.PublishOnly);
        }
        public bool Register(IMessageHandlerRegistration handlerRegistration)
        {
            if (handlerRegistration == null)
            {
                throw new ArgumentNullException(nameof(handlerRegistration));
            }

            var handlerCollection = _handlerRegistrations.GetOrAdd(handlerRegistration.MessageType, _ => new OrderedSet <IMessageHandlerRegistration>());

            if (handlerCollection.Contains(handlerRegistration))
            {
                return(false);
            }

            handlerCollection.Add(handlerRegistration);

            return(true);
        }
        public bool Unregister(IMessageHandlerRegistration handlerRegistration)
        {
            if (handlerRegistration == null)
            {
                throw new ArgumentNullException(nameof(handlerRegistration));
            }

            if (!_handlerRegistrations.TryGetValue(handlerRegistration.MessageType, out var handlerCollection))
            {
                return(false);
            }

            if (!handlerCollection.Remove(handlerRegistration))
            {
                return(false);
            }

            if (!handlerCollection.Any())
            {
                _handlerRegistrations.Remove(handlerRegistration.MessageType);
            }

            return(true);
        }
Пример #6
0
        public IEventProcessorConfiguration RegisterEventHandlers(ISessionMessagePump receiver, IMessageHandlerRegistration <IEventHandler> registrationSource)
        {
            foreach (var registration in registrationSource.GetRegistrations())
            {
                AddMessageType(receiver, registration.Key, registration.Value.ToArray());
            }

            // Continue.
            return(this);
        }
Пример #7
0
 public void Subscribe(Messenger messenger)
 {
     _registration = messenger.Register<object>(ReceiveMessage);
 }
Пример #8
0
        /// <summary>
        /// Initializes a new instance of the <see cref="RegisterMessages"/> class.
        /// </summary>
        /// <param name="messageHandlerRegistration">The message handler registration.</param>
        public RegisterMessages(IMessageHandlerRegistration messageHandlerRegistration)
        {
            Guard.NotNull(() => messageHandlerRegistration, messageHandlerRegistration);

            _messageHandlerRegistration = messageHandlerRegistration;
        }
Пример #9
0
 /// <summary>
 /// Initializes a new instance of the <see cref="MessageHandler"/> class.
 /// </summary>
 /// <param name="messageHandlerRegistration">The message handler registration.</param>
 public MessageHandler(IMessageHandlerRegistration messageHandlerRegistration)
 {
     Guard.NotNull(() => messageHandlerRegistration, messageHandlerRegistration);
     _messageHandlerRegistration = messageHandlerRegistration;
 }