public static void UnRegisterMsg(this IMsgReceiver self, string msgName, MoLiVoidDelegate.WithParams callback, MoLiMsgChannel channel = MoLiMsgChannel.Global) { if (CheckStrNullOrEmpty(msgName) || CheckDelegateNull(callback)) { return; } // 添加通道 if (!mMsgHandlerDict.ContainsKey(channel)) { Debug.LogError("Channel:" + channel.ToString() + " doesn't exist"); return; } var handlers = mMsgHandlerDict [channel] [msgName]; int handlerCount = handlers.Count; // 删除List需要从后向前遍历 for (int index = handlerCount - 1; index >= 0; index--) { var handler = handlers [index]; if (handler.receiver == self && handler.callback == callback) { handlers.Remove(handler); break; } } }
static bool CheckDelegateNull(MoLiVoidDelegate.WithParams callback) { if (null == callback) { Debug.LogWarning("callback is Null"); return(true); } return(false); }
/// <summary> /// 注册消息, /// 注意第一个参数,使用了C# this的扩展, /// 所以只有实现IMsgReceiver的对象才能调用此方法 /// </summary> public static void RegisterGlobalMsg(this IMsgReceiver self, string msgName, MoLiVoidDelegate.WithParams callback) { // 略过 if (string.IsNullOrEmpty(msgName)) { Debug.LogError("RegisterMsg:" + msgName + " is Null or Empty"); return; } // 略过 if (null == callback) { Debug.LogError("RegisterMsg:" + msgName + " callback is Null"); return; } // 添加消息通道 if (!mMsgHandlerDict.ContainsKey(MoLiMsgChannel.Global)) { mMsgHandlerDict [MoLiMsgChannel.Global] = new Dictionary <string, List <MoLiMsgHandler> > (); } // 略过 if (!mMsgHandlerDict[MoLiMsgChannel.Global].ContainsKey(msgName)) { mMsgHandlerDict[MoLiMsgChannel.Global] [msgName] = new List <MoLiMsgHandler> (); } // 看下这里 var handlers = mMsgHandlerDict [MoLiMsgChannel.Global][msgName]; // 略过 // 防止重复注册 foreach (var handler in handlers) { if (handler.receiver == self && handler.callback == callback) { Debug.LogWarning("RegisterMsg:" + msgName + " ayready Register"); return; } } // 再看下这里 handlers.Add(new MoLiMsgHandler(self, callback)); }
public static void RegisterLogicMsg(this IMsgReceiver self, string msgName, MoLiVoidDelegate.WithParams callback, MoLiMsgChannel channel = MoLiMsgChannel.Global) { if (CheckStrNullOrEmpty(msgName) || CheckDelegateNull(callback)) { return; } // 添加消息通道 if (!mMsgHandlerDict.ContainsKey(channel)) { mMsgHandlerDict [channel] = new Dictionary <string, List <MoLiMsgHandler> > (); } // 略过 if (!mMsgHandlerDict[channel].ContainsKey(msgName)) { mMsgHandlerDict[channel] [msgName] = new List <MoLiMsgHandler> (); } // 看下这里 var handlers = mMsgHandlerDict [channel][msgName]; // 略过 // 防止重复注册 foreach (var handler in handlers) { if (handler.receiver == self && handler.callback == callback) { Debug.LogWarning("RegisterMsg:" + msgName + " ayready Register"); return; } } // 再看下这里 handlers.Add(new MoLiMsgHandler(self, callback)); }
/* * VoidDelegate.WithParams 是一种委托 ,定义是这样的 * * public class VoidDelegate{ * public delegate void WithParams(params object[] paramList); * } */ public MoLiMsgHandler(IMsgReceiver receiver, MoLiVoidDelegate.WithParams callback) { this.receiver = receiver; this.callback = callback; }