Mercurial > hg > Members > tatsuki > Alice
view src/alice/topology/manager/keeparive/ListManager.java @ 327:235f6d0994df
change algorism
author | sugi |
---|---|
date | Tue, 11 Feb 2014 15:47:14 +0900 |
parents | 54d0b947079a |
children | 370a2f63944f |
line wrap: on
line source
package alice.topology.manager.keeparive; import java.util.LinkedList; public class ListManager { private LinkedList<TaskInfo> list = new LinkedList<TaskInfo>(); public LinkedList<TaskInfo> getTaskList() { return list; } public void addTask(TaskInfo newInfo) { TaskExecuter exec = TaskExecuter.getInstance(); 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 { // 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; } 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<String> nameList = new LinkedList<String>(); 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; } } }