public CGameEvent(ESysEvent k, GameEventDelegate fun, object p1 = null) { key = k; param1 = p1; param2 = null; paramFun = fun; }
//public bool DetachNetListener(RockProtocol.MsgID msgID, DGameEventHandle eventHandle) //{ // return DetachListener(GetNetMsgIdEventKey(msgID), eventHandle); //} public bool DetachListener(ESysEvent eventKey, DGameEventHandle eventHandle) { if (!mListenerTable.ContainsKey(eventKey)) { return(false); } List <CEventData> listenerList = mListenerTable[eventKey]; CEventData find = null; foreach (CEventData evtData in listenerList) { if (evtData.mHandle == eventHandle) { find = evtData; break; } } if (find != null) { listenerList.Remove(find); } return(true); }
public bool AddListener(ESysEvent eventkey, DGameEventHandle eventHandle) { if (eventHandle == null) { return(false); } if (!mListenerTable.ContainsKey(eventkey)) { mListenerTable.Add(eventkey, new List <CEventData>()); } List <CEventData> listenerList = mListenerTable[eventkey]; listenerList.Add(new CEventData(eventHandle)); return(true); }
//public bool AddNetListener(RockProtocol.MsgID msgID, DGameEventHandle eventHandle) //{ // return AddListener(GetNetMsgIdEventKey(msgID), eventHandle); //} //static public int GetNetMsgIdEventKey(RockProtocol.MsgID msgID) //{ // return (int)msgID; //} public bool RemoveListener(ESysEvent eventkey, DGameEventHandle eventHandle) { if (!mListenerTable.ContainsKey(eventkey)) { return(false); } List <CEventData> listenerList = mListenerTable[eventkey]; for (int i = 0; i < listenerList.Count; ++i) { if (eventHandle == listenerList[i].mHandle) { listenerList.Remove(listenerList[i]); return(true); } } return(false); }
public CSystemEvent(ESysEvent sysEvt, object param1, object param2) { mSysEvt = sysEvt; mParam1 = param1; mParam2 = param2; }
public CSystemEvent(ESysEvent sysEvt) { mSysEvt = sysEvt; }
public CSystemEvent(ESysEvent sysEvt, object param1, object param2) { this.mSysEvt = sysEvt; this.mParam1 = param1; this.mParam2 = param2; }
public SEventData(ESysEvent eventKey, DGameEventHandle eventHandle) { this.eventKey = eventKey; this.eventHandle = eventHandle; }
public CGameEvent(ESysEvent k) { key = k; param1 = null; param2 = null; }
public CGameEvent(ESysEvent k, object p1, object p2) { key = k; param1 = p1; param2 = p2; }
public CGameEvent(ESysEvent k, object p1 = null) { key = k; param1 = p1; param2 = null; }
/// <summary> /// 自定义超时时间,-1表示不使用超时机制 /// </summary> /// <param name="evtKey"></param> /// <param name="waitTime"></param> public CEvtWaiter(ESysEvent evtKey, float waitTime) { mEvtKey = evtKey; mWaitTime = waitTime; mEvt = null; }
public const float cDefaultWaitTime = 10f;//20f /// <summary> /// 使用默认超时时间 /// </summary> /// <param name="evtKey"></param> public CEvtWaiter(ESysEvent evtKey) { mEvtKey = evtKey; mWaitTime = cDefaultWaitTime; mEvt = null; }
/// <summary> /// 同步事件触发 /// </summary> /// <param name="evt"></param> /// <returns></returns> public bool TriggerEvent(IEvent evt) { #if PROFILE Profiler.BeginSample("TriggerEvent"); #endif bool ret = true; ESysEvent eventKey = (ESysEvent)evt.GetKey(); if (!mListenerTable.ContainsKey(eventKey)) { ret = false; } else { List <CEventData> listenerList = mListenerTable[eventKey]; //防止在事件处理流程中改变事件列表 List <CEventData> tmpList = new List <CEventData>(listenerList); for (int i = 0; i < tmpList.Count; ++i) //foreach (CEventData evtData in tmpList) { CEventData evtData = tmpList[i]; if (evtData.mHandle != null && (!evtData.mObjRelate || evtData.mGameObj != null)) { #if PROFILE Profiler.BeginSample(string.Format("HandleEvt: {0}, {1}", eventKey, evtData.mGameObj != null ? evtData.mGameObj.name : "null")); #endif evtData.mHandle(evt); #if PROFILE Profiler.EndSample(); #endif } } for (int i = 0; i < tmpList.Count; ++i) { if (tmpList[i].mObjRelate && tmpList[i].mGameObj == null) { listenerList.Remove(tmpList[i]); } } } //改变事件等待协程的状态 if (mEvtWaiterMap.ContainsKey(eventKey)) { foreach (CEvtWaiter waiter in mEvtWaiterMap[eventKey]) { waiter.mEvt = evt; } mEvtWaiterMap[eventKey].Clear(); mEvtWaiterMap[eventKey] = null; mEvtWaiterMap.Remove(eventKey); } #if PROFILE Profiler.EndSample(); #endif return(ret); }