private bool AddTimerTask(TimerTask task, TimerTaskInfo taskInfo) { if (!task.IsValidTask()) { return(false); } for (int i = 0; i < wheelArr.Length; i++) { if (wheelArr[i].AddTimerTask(task, ref taskInfo.wheelSlotIndex, ref taskInfo.taskListIndex)) { taskInfo.wheelIndex = i; break; } } if (taskInfo.wheelIndex < 0 || taskInfo.wheelSlotIndex < 0 || taskInfo.taskListIndex < 0) { return(false); } taskIndex++; task.index = taskIndex; taskInfo.index = taskIndex; taskInfoDic.Add(taskInfo.index, taskInfo); return(true); }
private void OnTimerWheelTrigger(int index, List <TimerTask> taskList) { for (int i = 0; i < taskList.Count; i++) { TimerTask task = taskList[i]; if (task == null) { continue; } TimerTaskInfo taskInfo = null; if (!taskInfoDic.TryGetValue(task.index, out taskInfo)) { continue; } if (task.remainingWheelInMS == 0) { task.OnTrigger(); } if (taskInfo.IsClear()) { RecycleTimerTask(task); } else { taskInfoDic.Remove(task.index); taskInfo.OnClear(); if (task.IsValidTask()) { AddTimerTask(task, taskInfo); } else { RecycleTimerTask(task); } } } }