namespace ClientCore.Network { public class NetMsg { private static NetMsg instance = new NetMsg(); public static NetMsg Instance { get { return instance; } } private Dictionary> netEventDic = new Dictionary>(128); private NetMsg() { } #region RegisterMsgEvent public void RegNetMsgEvent(int cmd, Action callback) { InterRegNetMsgEvent(cmd, callback); } private void InterRegNetMsgEvent(int cmd, Delegate callback) { if (netEventDic.TryGetValue(cmd, out List dlist)) { if (dlist.IndexOf(callback) < 0) { dlist.Add(callback); } } else { netEventDic.Add(cmd, new List() { callback }); } //if (netEventDic.ContainsKey(cmd)) //{ // if (netEventDic[cmd].IndexOf(callback) < 0) // { // netEventDic[cmd].Add(callback); // } //} //else //{ // netEventDic.Add(cmd, new List() { callback }); //} } #endregion #region UnregisterCMD public void UnregisterCMD(int evt, Action callback) { Delegate tempDelegate = callback; InterUnregisterCMD(evt, tempDelegate); } private void InterUnregisterCMD(int cmd, Delegate callback) { if (netEventDic.TryGetValue(cmd, out List dlist)) { dlist.Remove(callback); if (dlist.Count == 0) netEventDic.Remove(cmd); } //if (netEventDic.ContainsKey(cmd)) //{ // netEventDic[cmd].Remove(callback); // if (netEventDic[cmd].Count == 0) netEventDic.Remove(cmd); //} } #endregion #region PostEvent public void PostNetMsgEvent(int cmd, byte[] arg) { List eventList = GetNetEventDicList(cmd); if (eventList != null) { foreach (Delegate callback in eventList) { try { ((Action)callback)(arg); } catch (Exception e) { App.log.Error(e.Message); } } } } #endregion /// /// 获取所有事件 /// /// /// private List GetNetEventDicList(int cmd) { if (netEventDic.TryGetValue(cmd, out List dlist)) { if (null != dlist) { return dlist; } } //if (netEventDic.ContainsKey(cmd)) //{ // List tempList = netEventDic[cmd]; // if (null != tempList) // { // return tempList; // } //} return null; } } }