# HG changeset patch # User sugi # Date 1392101234 -32400 # Node ID 235f6d0994df3dc55a4d200e149abd565bb9a358 # Parent c382d6fe1ec47032170f49fd2fbed0d82ab5826f change algorism diff -r c382d6fe1ec4 -r 235f6d0994df src/alice/topology/manager/keeparive/ListManager.java --- a/src/alice/topology/manager/keeparive/ListManager.java Fri Jan 24 02:18:09 2014 +0900 +++ b/src/alice/topology/manager/keeparive/ListManager.java Tue Feb 11 15:47:14 2014 +0900 @@ -4,56 +4,97 @@ public class ListManager { private LinkedList list = new LinkedList(); - + public LinkedList getTaskList() { return list; } - + public void addTask(TaskInfo newInfo) { TaskExecuter exec = TaskExecuter.getInstance(); - if (list.isEmpty()) { - if (exec.getNowTask() == null) { // active task is nothing - list.add(newInfo); + TaskInfo nowTask = exec.getNowTask(); + long remainingTime = exec.initRemainingTime(); + System.out.println(remainingTime); + if (nowTask == null) { // active task is nothing + TaskInfo task = list.getFirst(); + task.setSleepTime(task.getSleepTime() + remainingTime); + add(newInfo); + } else { + if (remainingTime > newInfo.getSleepTime()) { + // active task is longer than newTask. + TaskInfo task = nowTask.clone(); + task.setSleepTime(remainingTime); + list.addFirst(task); + add(newInfo); + exec.ignore(); } else { - TaskInfo nowTask = exec.getNowTask(); - long remainingTime = nowTask.getSleepTime() - (System.currentTimeMillis() - exec.getStartTime()); - if (remainingTime < 0) { - list.add(newInfo); - return; - } - if (remainingTime < newInfo.getSleepTime()){ - // newTask is longer than active task. - newInfo.setSleepTime(newInfo.getSleepTime() - remainingTime); - list.add(newInfo); - } else { - // active task is longer than newTask. - list.add(newInfo); - TaskInfo task = nowTask.clone(); - task.setSleepTime(remainingTime); - addTask(task); - exec.skip(); - } + // newTask is longer than active task. + newInfo.setSleepTime(newInfo.getSleepTime() - remainingTime); + add(newInfo); + } + } + showList(); + } + + private void add(TaskInfo newInfo){ + int cnt = 0; + for (TaskInfo info : list){ + if (info.getSleepTime() < newInfo.getSleepTime()){ + newInfo.setSleepTime(newInfo.getSleepTime() - info.getSleepTime()); + } else if (info.getSleepTime() == newInfo.getSleepTime()){ + // newInfo.getSleepTime() - info.getSleepTime() must be Zero + newInfo.setSleepTime(0); + cnt++; + break; + } else if (info.getSleepTime() > newInfo.getSleepTime()){ + info.setSleepTime(info.getSleepTime() - newInfo.getSleepTime()); + break; } - } else { - int cnt = 0; - for (TaskInfo info : list){ - if (info.getSleepTime() < newInfo.getSleepTime()){ - newInfo.setSleepTime(newInfo.getSleepTime() - info.getSleepTime()); - } else if (info.getSleepTime() == newInfo.getSleepTime()){ - // newInfo.getSleepTime() - info.getSleepTime() must be Zero - newInfo.setSleepTime(0); - cnt++; - break; - } else if (info.getSleepTime() > newInfo.getSleepTime()){ - info.setSleepTime(info.getSleepTime() - newInfo.getSleepTime()); - break; - } - cnt++; - } - list.add(cnt, newInfo); + cnt++; + } + list.add(cnt, newInfo); + } + + private void showList(){ + if (TaskExecuter.getInstance().getNowTask()!=null){ + System.out.print("NOW | "); + System.out.print(TaskExecuter.getInstance().getNowTask().getSleepTime()); + System.out.print(" | "); + } + for (TaskInfo info : list){ + System.out.print(info.getSleepTime()); + System.out.print(" | "); } - + System.out.println(); } - - + + public static void main(String args[]){ + TaskExecuter.getInstance().getNowTask(); + ListManager manager = new ListManager(); + LinkedList nameList = new LinkedList(); + nameList.add("nodeA"); + nameList.add("nodeB"); + nameList.add("nodeC"); + nameList.add("nodeD"); + + TaskInfo taskA = new TaskInfo(TaskType.PING); + taskA.setInfo("node0", "_TEST", 3 * 1000); + TaskExecuter.getInstance().setNowTask(taskA); + + int i = 5; + for (String name : nameList){ + TaskInfo task = new TaskInfo(TaskType.PING); + task.setInfo(name, "_TEST", i * 1000); + manager.addTask(task); + i +=1; + } + TaskExecuter.getInstance().skip(); + i = 11; + for (String name : nameList){ + TaskInfo task = new TaskInfo(TaskType.PING); + task.setInfo(name, "_TEST", i * 1000); + manager.addTask(task); + i +=1; + } + + } }