/// <summary>
        /// Tie the handler to the specified recipient and message type.
        /// This way it will be raised when a message of this type comes in.
        /// </summary>
        /// <param name="rMessageType">Message we want to listen for</param>
        /// <param name="rFilter">Filter tag to determine who gets the message (recipient name or a tag)</param>
        /// <param name="rHandler">Hander to handle the message</param>
        /// <param name="rImmediate">Determines if the function ignores the cache and forces the listener into the list now</param>
        public static void AddListener(string rMessageType, string rFilter, MessageHandler rHandler, bool rImmediate)
        {
            MessageListenerDefinition lListener = MessageListenerDefinition.Allocate();

            lListener.MessageType = rMessageType;
            lListener.Filter      = rFilter;
            lListener.Handler     = rHandler;

            if (rImmediate)
            {
                AddListener(lListener);
                MessageListenerDefinition.Release(lListener);
            }
            else
            {
                mListenerAdds.Add(lListener);
            }
        }
        /// <summary>
        /// Stop listening for messages for the specified type and to the specified recipient.
        /// </summary>
        /// <param name="rMessageType">Message we want to listen for</param>
        /// <param name="rFilter">Filter used to determine who gets the message (recipient name or tag)</param>
        /// <param name="rHandler">Hander to handle the message</param>
        /// <param name="rImmediate">Determines if the function ignores the cache and forcibly removes the listener from the list now</param>
        public static void RemoveListener(string rMessageType, string rFilter, MessageHandler rHandler, bool rImmediate)
        {
            // Post for clean up outside of any processing loops
            MessageListenerDefinition lListener = MessageListenerDefinition.Allocate();

            lListener.MessageType = rMessageType;
            lListener.Filter      = rFilter;
            lListener.Handler     = rHandler;

            if (rImmediate)
            {
                RemoveListener(lListener);
                MessageListenerDefinition.Release(lListener);
            }
            else
            {
                mListenerRemoves.Add(lListener);
            }
        }