/// <summary> /// 设置连接器参数,检查是否触发 /// </summary> /// <param name="iIndex"></param> /// <param name="o"></param> public void SetLinkerArgs(int iIndex, object o) { if (iIndex >= 0 && iIndex < mUserArgs.Length) { mUserArgs[iIndex] = o; } ///检查是否触发 if (CheckArgsFull()) { try { if (mLinkerFun != null) { mLinkerFun(this, mUserArgs); } } catch (System.Exception ex) { LogSystem.LogError(ex.ToString()); } ///回收所有触发器 UserDelegateTriggle.CollectTriggle(mTriggles); } }
/// <summary> /// 回收所有触发器,用于连接器的回收 /// </summary> /// <param name="args"></param> public static void CollectTriggle(object[] args) { for (int i = 0; i < args.Length; i++) { UserDelegateTriggle triggle = args[i] as UserDelegateTriggle; if (triggle != null) { triggle.Clear(); mTrigglePools.Enqueue(triggle); } } }
/// <summary> /// 调用一个异步触发器 /// </summary> /// <param name="triggle"></param> /// <param name="bFree"></param> public static void Triggle(UserDelegateTriggle triggle, params object[] args) { if (triggle != null) { ///触发返回是否回收 if (triggle.Triggle(args)) { triggle.Clear(); ///没有触发连接器的,直接回收 mTrigglePools.Enqueue(triggle); } } }
/// <summary> /// 设置触发器连接对象 /// </summary> /// <param name="args"></param> /// <returns></returns> public static UserDelegateTriggleLinker SetTriggleLinker(params object[] args) { UserDelegateTriggleLinker triggleLinker = new UserDelegateTriggleLinker(); triggleLinker.mTriggles = args; for (int i = 0; i < args.Length; i++) { UserDelegateTriggle triggle = args[i] as UserDelegateTriggle; if (triggle != null) { ///设置触发器的连接者 triggle.SetTriggleLinker(triggleLinker); } } return(triggleLinker); }
/// <summary> /// 获取当前可用的异步触发器,提供触发类型 /// </summary> /// <param name="ud"></param> /// <returns></returns> public static UserDelegateTriggle GetTriggle(UserDelegateFun ud, params object[] args) { UserDelegateTriggle triggle; if (mTrigglePools.Count > 0) { triggle = mTrigglePools.Dequeue(); triggle.SetDelegateFun(ud); triggle.SetContext(args); } else { triggle = new UserDelegateTriggle(); triggle.SetDelegateFun(ud); triggle.SetContext(args); } return(triggle); }