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); }
/// <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; }