You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

104 lines
2.5 KiB
C#

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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
}
}