public class SubscriptionEventManager : WeakEventManager
{
public static SubscriptionEventManager CurrentManager
{
get
{
var manager_type = typeof(SubscriptionEventManager);
var manager = WeakEventManager.GetCurrentManager(manager_type) as SubscriptionEventManager;
if (manager == null)
{
manager = new SubscriptionEventManager();
WeakEventManager.SetCurrentManager(manager_type, manager);
}
return manager;
}
}
public static void AddListener(object source, IWeakEventListener listener)
{
CurrentManager.ProtectedAddListener(source, listener);
}
public static void RemoveListener(object source, IWeakEventListener listener)
{
CurrentManager.ProtectedRemoveListener(source, listener);
}
protected override void StartListening(object source)
{
((EventingBasicConsumer)source).Received
+= new EventHandler<BasicDeliverEventArgs>(DeliverMessage);
}
protected override void StopListening(object source)
{
((EventingBasicConsumer)source).Received
-= new EventHandler<BasicDeliverEventArgs>(DeliverMessage);
}
void DeliverMessage(object sender, BasicDeliverEventArgs e)
{
DeliverEvent(sender, e);
}
}
public sealed class WeakEventListener : IWeakEventListener
{
private readonly EventHandler _handler;
public WeakEventListener(EventHandler handler)
{
_handler = handler;
}
bool IWeakEventListener.ReceiveWeakEvent(Type managerType, object sender, EventArgs e)
{
if (null == e)
return false;
CallHandler(sender, e);
return true;
}
public void CallHandler(object sender, EventArgs e)
{
BasicDeliverEventArgs ea = (BasicDeliverEventArgs)e;
var body = ea.Body;
var message = Encoding.UTF8.GetString(body);
_handler(message, e);
}
}