using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace GuruClient
{
public interface IEventData
{
string Name { get; }
object Sender { get; }
}
public class BaseIEventData : IEventData
{
public string Name
{
get
{
return GetType().FullName;
}
}
public object Sender
{
get; private set;
}
public BaseIEventData()
{
}
public BaseIEventData(object sender)
{
Sender = sender;
}
}
public class EventData : BaseIEventData
{
private readonly string _data;
public string Data { get { return _data; } }
public EventData(string data)
{
_data = data;
}
}
public delegate void MyEventHandler(IEventData data);
///
/// 全局事件管理器
///
public class EventManager
{
#region 单例
private static readonly EventManager _instance = new EventManager();
internal static void AddListenner(string uI_SignIn_SignHandler1, string uI_SignIn_SignHandler2)
{
throw new NotImplementedException();
}
#endregion
#region 静态公共接口
///
/// 为指定事件注册一个处理函数
///
///
///
public static void AddListenner(string eventName, MyEventHandler handler)
{
_instance.AddEventHandler(eventName, handler);
}
///
/// 取消指定事件的指定处理函数
///
///
///
public static void RemoveListenner(string eventName, MyEventHandler handler)
{
_instance.RemoveEventHandler(eventName, handler);
}
///
/// 取消指定事件的所有处理函数
///
///
public static void ClearEvent(string eventName)
{
_instance.ClearEventHandler(eventName);
}
///
/// 取消所有事件监听
///
public static void Clear()
{
_instance.ClearAllEvent();
}
///
/// 激发一个事件
///
///
///
public static void Dispatch(string eventName, IEventData data)
{
_instance.FireEvent(eventName, data);
}
public static void Dispatch(string eventName)
{
Dispatch(eventName, null);
}
#endregion
private readonly Dictionary _handlerDict = new Dictionary();
///
/// 为指定事件注册一个处理函数
///
///
///
private void AddEventHandler(string eventName, MyEventHandler handler)
{
if (handler == null)
{
return;
}
if (_handlerDict.ContainsKey(eventName))
{
_handlerDict[eventName] += handler;
}
else
{
_handlerDict.Add(eventName, handler);
}
}
///
/// 取消指定事件的指定处理函数
///
///
///
private void RemoveEventHandler(string eventName, MyEventHandler handler)
{
if (_handlerDict.ContainsKey(eventName))
{
_handlerDict[eventName] -= handler;
}
}
private void ClearEventHandler(string eventName)
{
if (_handlerDict.ContainsKey(eventName))
{
_handlerDict.Remove(eventName);
}
}
private void ClearAllEvent()
{
_handlerDict.Clear();
}
///
/// 激发一个事件
///
///
///
private void FireEvent(string eventName, IEventData data)
{
if (_handlerDict.ContainsKey(eventName))
{
var handler = _handlerDict[eventName];
if (handler != null)
{
handler.Invoke(data);
}
}
}
}
}