changeset 327:235f6d0994df

change algorism
author sugi
date Tue, 11 Feb 2014 15:47:14 +0900
parents c382d6fe1ec4
children 370a2f63944f
files src/alice/topology/manager/keeparive/ListManager.java
diffstat 1 files changed, 84 insertions(+), 43 deletions(-) [+]
line wrap: on
line diff
--- 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<TaskInfo> list = new LinkedList<TaskInfo>();
-	
+
 	public LinkedList<TaskInfo> 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<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;
+		}
+
+	}
 }