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;
		}

	}
}