Files
dmex b02427417c PH1.x: fixed build
git-svn-id: svn://svn.code.sf.net/p/processhacker/code@5614 21ef857c-d57f-4fe0-8362-d861dc6d29cd
2014-02-25 23:14:38 +00:00

65 lines
1.8 KiB
C#

using System;
using System.Collections.Generic;
using System.Text;
namespace ProcessHacker.Common.Messaging
{
public class MessageQueue
{
private Queue<Message> _queue = new Queue<Message>();
private List<MessageQueueListener> _listeners = new List<MessageQueueListener>();
public MessageQueue()
{
// Action message listener.
this.AddListener(new MessageQueueListener<ActionMessage>((action) => action.Action()));
}
public void AddListener(MessageQueueListener listener)
{
lock (_listeners)
_listeners.Add(listener);
}
public void Enqueue(Message message)
{
lock (_queue)
_queue.Enqueue(message);
}
public void EnqueueAction(Action action)
{
this.Enqueue(new ActionMessage(action));
}
public void Listen()
{
lock (_queue)
{
// Start dequeuing.
while (_queue.Count > 0)
{
Message message = _queue.Dequeue();
// Look for receivers.
lock (_listeners)
{
foreach (MessageQueueListener listener in _listeners)
{
// If this listener is of the right type, execute the callback.
if (listener.Type.IsInstanceOfType(message))
listener.Callback(message);
}
}
}
}
}
public void RemoveListener(MessageQueueListener listener)
{
lock (_listeners)
_listeners.Remove(listener);
}
}
}