消息分發機制:
簡單來說就是你觸發了某個事件時,會把對應的消息分發下去,這個消息你可以選擇接收或者不收,代碼也不會報錯。而當你在某個代碼中注冊了這個事件的監聽,你就可以收到該事件發來的消息,但使用完要記得移除監聽。
代碼如下:
public class MyEventMsg
{
public delegate void DelHandler(MyMessage a);
public static Dictionary<string, DelHandler> delHandelDic = new Dictionary<string, DelHandler>();
/// <summary>
/// 添加監聽
/// </summary>
/// <param name="eventString"></param>
/// <param name="delHandler"></param>
public static void AddListener(string eventString, DelHandler delHandler)
{
if (!delHandelDic.ContainsKey(eventString))
{
delHandelDic.Add(eventString, null);
}
delHandelDic[eventString] += delHandler;
}
/// <summary>
/// 移除監聽
/// </summary>
/// <param name="eventString"></param>
/// <param name="delHandler"></param>
public static void RemoveListener(string eventString, DelHandler delHandler)
{
if (delHandelDic.ContainsKey(eventString))
{
delHandelDic[eventString] -= delHandler;
}
}
public static void ClearAllListener()
{
if (delHandelDic != null)
delHandelDic.Clear();
}
/// <summary>
/// 消息分發
/// </summary>
/// <param name="eventString"></param>
/// <param name="msg"></param>
public static void MessageDispatch(string eventString, MyMessage msg = null)
{
DelHandler del;
if (delHandelDic.TryGetValue(eventString, out del))
{
if (del != null)
del.Invoke(msg);
}
}
}
public class MyMessage
{
public string msg;
public int value;
public MyMessage()
{
}
public MyMessage(string msg, int value)
{
this.msg = msg;
this.value = value;
}
}