// todo test public void RemoveMessage(GameMsgDef msgName, object sender) { if (sender == null) { return; } Delegate funcs = null; if (m_MsgMap.TryGetValue(msgName, out funcs)) { foreach (Delegate func in funcs.GetInvocationList()) { if (func.Target == sender) { Delegate.Remove(funcs, func); } } } if (funcs == null) { m_MsgMap.Remove(msgName); } }
public void AddMessage <T1, T2, T3>(GameMsgDef msgName, Action <T1, T2, T3> listener) { if (listener == null) { return; } AddDelegate(msgName, listener); }
// 3个参 public void SendMessage <T1, T2, T3>(GameMsgDef msgName, T1 arg1, T2 arg2, T3 arg3) { Delegate funcs = null; if (m_MsgMap.TryGetValue(msgName, out funcs)) { foreach (Delegate func in funcs.GetInvocationList()) { Action <T1, T2, T3> tmp = (Action <T1, T2, T3>)func; tmp(arg1, arg2, arg3); } } }
// 1个参 public void SendMessage <T>(GameMsgDef msgName, T arg) { Delegate funcs = null; if (m_MsgMap.TryGetValue(msgName, out funcs)) { foreach (Delegate func in funcs.GetInvocationList()) { Action <T> tmp = (Action <T>)func; tmp(arg); } } }
private void AddDelegate(GameMsgDef msgName, Delegate listener) { if (listener == null) { return; } Delegate func = null; if (m_MsgMap.TryGetValue(msgName, out func)) { Delegate.Combine(func, listener); } else { func = listener; } m_MsgMap[msgName] = func; }