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