|
|
using System;
|
|
|
using System.Collections.Generic;
|
|
|
using System.Linq;
|
|
|
using System.Text;
|
|
|
|
|
|
namespace JwKdsV.Core.MessageEvent
|
|
|
{
|
|
|
/// <summary>
|
|
|
/// 消息事件提供者
|
|
|
/// </summary>
|
|
|
public class MsgEventProvider
|
|
|
{
|
|
|
private string eventType = string.Empty;
|
|
|
|
|
|
public List<MsgReceiver> Receivers;
|
|
|
|
|
|
public MsgEventProvider(string _eventType)
|
|
|
{
|
|
|
eventType = _eventType;
|
|
|
Receivers = new List<MsgReceiver>();
|
|
|
}
|
|
|
|
|
|
~MsgEventProvider()
|
|
|
{
|
|
|
//Console.WriteLine(string.Format("{0}的MsgEventProvider析构函数执行!", eventType));
|
|
|
}
|
|
|
|
|
|
public string EventType
|
|
|
{
|
|
|
get { return eventType; }
|
|
|
}
|
|
|
|
|
|
private event EventHandler<MsgEventArgs> appEventHandler;
|
|
|
|
|
|
public event EventHandler<MsgEventArgs> 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
|
|
|
}
|
|
|
}
|