using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
public class EventDispatch
{
[SLua.DoNotToLua]
public delegate void OnNotificationDelegate(Notification note);
private Dictionary<string, OnNotificationDelegate> _eventListeners;
[SLua.DoNotToLua]
public virtual void Clear()
{
}
[SLua.DoNotToLua]
public EventDispatch()
{
_eventListeners = new Dictionary<string, OnNotificationDelegate>();
}
/// <summary>
/// 添加事件侦听
/// </summary>
/// <param name="type"></param>
/// <param name="listener"></param>
public void AddEventListener(string type, OnNotificationDelegate listener)
{
if (!_eventListeners.ContainsKey(type))
{
OnNotificationDelegate delegat = null;
_eventListeners[type] = delegat;
}
_eventListeners[type] += listener;
}
/// <summary>
/// 添加事件侦听
/// </summary>
/// <param name="type"></param>
/// <param name="listener"></param>
public void AddEventListenerAndRemove(string type, OnNotificationDelegate listener)
{
RemoveEventListener(type);
if (!_eventListeners.ContainsKey(type))
{
OnNotificationDelegate delegat = null;
_eventListeners[type] = delegat;
}
_eventListeners[type] += listener;
}
/// <summary>
/// 移除事件侦听
/// </summary>
/// <param name="type"></param>
/// <param name="listener"></param>
public void RemoveEventListener(string type,OnNotificationDelegate listener)
{
if (!_eventListeners.ContainsKey(type))
{
return;
}
_eventListeners[type] -= listener;
if (_eventListeners[type] == null)
{
_eventListeners.Remove(type);
}
}
/// <summary>
/// 移除某一类事件侦听
/// </summary>
/// <param name="type"></param>
public void RemoveEventListener(string type)
{
if (_eventListeners.ContainsKey(type))
{
_eventListeners.Remove(type);
}
}
/// <summary>
/// 派发数据
/// </summary>
/// <param name="type"></param>
/// <param name="note"></param>
public void DispatchEvent(string type, Notification note)
{
if (_eventListeners.ContainsKey(type))
{
_eventListeners[type](note);
}
}
/// <summary>
/// 派发:无数据
/// </summary>
/// <param name="type"></param>
public void DispatchEvent(string type)
{
DispatchEvent(type, null);
}
/// <summary>
/// 是否有type类型的事件侦听
/// </summary>
/// <param name="type"></param>
/// <returns></returns>
[SLua.DoNotToLua]
public bool HasEventListener(string type)
{
return _eventListeners.ContainsKey(type);
}
}
事件派发,监听
最新推荐文章于 2022-06-28 10:17:55 发布