Пример #1
0
        public override IList <IMessage> Purge(IMessageSelector selector)
        {
            if (selector == null)
            {
                return(Clear());
            }

            // removing during iterate through an IEnumerable is not supported in .NET.
            // so we use a two step algorythm. first we add all message not accepted by the
            // the selector to a list and then we iterate through this list and remove the elements
            IList <IMessage> messagesToRemove = new List <IMessage>();

            foreach (IMessage message in _queue)
            {
                if (!selector.Accept(message))
                {
                    messagesToRemove.Add(message);
                }
            }

            IList <IMessage> purgedMessages = new List <IMessage>();

            foreach (IMessage message in messagesToRemove)
            {
                if (_queue.Remove(message))
                {
                    purgedMessages.Add(message);
                }
            }
            return(purgedMessages);
        }
 /// <summary>
 /// Remove and return any messages that are stored for the current thread
 /// and do not match the provided <paramref name="selector"/>.
 /// </summary>
 /// <param name="selector">the message selector</param>
 /// <returns>the removed messages</returns>
 public override IList<IMessage> Purge(IMessageSelector selector)
 {
     IList<IMessage> removedMessages = new List<IMessage>();
     IMessage[] allMessages = _queue.ToArray();
     foreach(IMessage message in allMessages) {
         if(!selector.Accept(message) && _queue.Remove(message)) {
             removedMessages.Add(message);
         }
     }
     return removedMessages;
 }
 protected override void HandleRequestMessage(IMessage message, ReplyMessageHolder replyHolder)
 {
     if (_selector.Accept(message))
     {
         replyHolder.Set(message);
     }
     else if (_throwExceptionOnRejection)
     {
         throw new MessageRejectedException(message);
     }
 }
        /// <summary>
        /// Remove and return any messages that are stored for the current thread
        /// and do not match the provided <paramref name="selector"/>.
        /// </summary>
        /// <param name="selector">the message selector</param>
        /// <returns>the removed messages</returns>
        public override IList <IMessage> Purge(IMessageSelector selector)
        {
            IList <IMessage> removedMessages = new List <IMessage>();

            IMessage[] allMessages = _queue.ToArray();
            foreach (IMessage message in allMessages)
            {
                if (!selector.Accept(message) && _queue.Remove(message))
                {
                    removedMessages.Add(message);
                }
            }
            return(removedMessages);
        }
Пример #5
0
        /// <summary>
        /// Intercept the Message and, <em>if accepted</em> by the <see cref="IMessageSelector"/>,
        /// send it to the secondary target. If this wire tap's <see cref="IMessageSelector"/> is
        /// <code>null</code>, it will accept all messages.
        /// </summary>
        /// <param name="message">the message to intercept</param>
        /// <param name="channel">the channel to send to if accepted</param>
        /// <returns></returns>
        public override IMessage PreSend(IMessage message, IMessageChannel channel)
        {
            if (_running && (_selector == null || _selector.Accept(message)))
            {
                bool sent = _timeout == TimeSpan.Zero ? _channel.Send(message, _timeout) : _channel.Send(message);

                #region logging
                if (!sent && logger.IsWarnEnabled)
                {
                    logger.Warn("failed to send message to WireTap _channel '" + _channel + "'");
                }
                #endregion
            }
            return(message);
        }
        public override IList<IMessage> Purge(IMessageSelector selector)
        {
            if(selector == null) {
                return Clear();
            }

            // removing during iterate through an IEnumerable is not supported in .NET.
            // so we use a two step algorythm. first we add all message not accepted by the
            // the selector to a list and then we iterate through this list and remove the elements
            IList<IMessage> messagesToRemove = new List<IMessage>();
            foreach(IMessage message in _queue) {
                if (!selector.Accept(message)) {
                    messagesToRemove.Add(message);
                }
            }

            IList<IMessage> purgedMessages = new List<IMessage>();
            foreach(IMessage message in messagesToRemove) {
                if(_queue.Remove(message)) {
                    purgedMessages.Add(message);
                }
            }
            return purgedMessages;
        }