using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace JwKdsV.Core.MessageEvent
{
///
/// 消息事件提供者
///
public class MsgEventProvider
{
private string eventType = string.Empty;
public List Receivers;
public MsgEventProvider(string _eventType)
{
eventType = _eventType;
Receivers = new List();
}
~MsgEventProvider()
{
//Console.WriteLine(string.Format("{0}的MsgEventProvider析构函数执行!", eventType));
}
public string EventType
{
get { return eventType; }
}
private event EventHandler appEventHandler;
public event EventHandler AppEventHandler
{
add
{
appEventHandler += value;
}
remove
{
appEventHandler -= value;
}
}
#region 外部调用事件
public void Run(Object sender , MsgEventArgs args)
{
if (appEventHandler != null)
{
appEventHandler(sender , args);
}
#region 去除那些只绑定一次处理事件的对象
for (int i = 0; i < Receivers.Count; i++)
{
try
{
MsgReceiver item = Receivers[i];
if (item == null) continue;
if (item.IsOnce)
{
AppEventHandler -= item.appEventHandler;
Receivers.Remove(item);
}
}
catch
{
Console.WriteLine("去除接受者对象列表中内容错误!");
}
}
#endregion
}
public void AddListener(MsgReceiver receiver)
{
Receivers.Add(receiver);
AppEventHandler += receiver.appEventHandler;
}
public void RemoveListener(MsgReceiver receiver)
{
for (int i = 0; i < Receivers.Count; i++)
{
MsgReceiver item = Receivers[i];
if (item.ReceiverObj == receiver.ReceiverObj)
{
AppEventHandler -= item.appEventHandler;
Receivers.Remove(item);
return;
}
}
}
#endregion
}
}