/** * ************* 添加指定回合的本时间节点的任务,返回是否添加成功,不成功则表示需要马上执行 * * @author alzq.z * @time Jul 16, 2015 11:26:06 PM */ public boolean addTimingTask(int _round, _IALSynTask _task) { _lock(); try { if (null == _task) return false; // 当本回合的时候,直接进行添加 if (_round == _m_iCurRound) { _m_lCurRoundTimingTaskList.add(_task); return true; } else if (_round == _m_iNextRound) { _m_lNextRoundTimingTaskList.add(_task); return true; } else if (_round > _m_iNextRound) { // 长时间延迟的任务,按照回合顺序放入对应队列 ListIterator<ALSynTimingTaskNodeFarDelayTaskInfo> iterator = _m_lFarDelayTaskList.listIterator(); while (iterator.hasNext()) { ALSynTimingTaskNodeFarDelayTaskInfo taskInfo = iterator.next(); if (taskInfo.getRound() == _round) { // 匹配回合则加入本节点 taskInfo.addSynTask(_task); break; } else if (taskInfo.getRound() < _round) { // 当插入的回合比对应回合早,则需要在对应回合之前插入数据 // 这里采用的做法是将本节点数据重复插入到下一个节点,之后将本节点设置为新数据 iterator.add(taskInfo); // 创建新节点 ALSynTimingTaskNodeFarDelayTaskInfo newInfo = new ALSynTimingTaskNodeFarDelayTaskInfo(_round); iterator.set(newInfo); // 插入任务 newInfo.addSynTask(_task); break; } } // 判断是否已经到了最后节点 if (!iterator.hasNext()) { // 在最后节点则往最后追加数据 // 创建新节点 ALSynTimingTaskNodeFarDelayTaskInfo newInfo = new ALSynTimingTaskNodeFarDelayTaskInfo(_round); iterator.add(newInfo); // 插入任务 newInfo.addSynTask(_task); } return true; } else { // 当回合小于当前回合则表示失败,外部需要直接处理 return false; } } finally { _unlock(); } }
/** * ************* 向下移动一个回合 * * @author alzq.z * @time Jul 16, 2015 11:58:23 PM */ protected void _moveNextRound() { // 累加一个回合 _m_iCurRound++; _m_iNextRound++; // 将下一回合任务累加到当前队列 while (!_m_lNextRoundTimingTaskList.isEmpty()) { _m_lCurRoundTimingTaskList.addLast(_m_lNextRoundTimingTaskList.pop()); } // 获取第一个长时间间隔任务队列节点,是否匹配下一回合,是则将任务放入 if (!_m_lFarDelayTaskList.isEmpty()) { ALSynTimingTaskNodeFarDelayTaskInfo farDelayInfo = _m_lFarDelayTaskList.getFirst(); if (farDelayInfo.getRound() == _m_iNextRound) { // 从长时间间隔队列删除 _m_lFarDelayTaskList.pop(); // 将任务放入 farDelayInfo.popAllSynTask(_m_lNextRoundTimingTaskList); } } }