diff src/alice/topology/manager/keeparive/PingScheduler.java @ 26:650c0f1270a3

add package alice.topology.manager.keeparive
author sugi
date Tue, 05 Nov 2013 03:57:09 +0900
parents
children fe96dd350d9d
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/alice/topology/manager/keeparive/PingScheduler.java	Tue Nov 05 03:57:09 2013 +0900
@@ -0,0 +1,92 @@
+package alice.topology.manager.keeparive;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.List;
+
+import alice.codesegment.CodeSegment;
+
+public class PingScheduler extends CodeSegment{
+	private LinkedList<TaskInfo> list = new LinkedList<TaskInfo>();
+	private ArrayList<TaskInfo> regist = new ArrayList<TaskInfo>();
+	private HashMap<String, Integer> map = new HashMap<String, Integer>();
+	public boolean updateFlag = false;
+	public long time = 0;
+	public int taskNum = 0;
+	public TaskInfo nowTask;
+	private long totalTime = 0;
+	
+	public long getTotalTime(){
+		return totalTime;
+	}
+	
+	public List<TaskInfo> nameList(){
+		return regist;
+	}
+	
+	public List<TaskInfo> getTaskList(){
+		return list;
+	}
+	
+	public synchronized void wake(){
+		long t = System.currentTimeMillis();
+		long addTime = nowTask.getTime() - (t - time);
+		TaskInfo ti = list.get(0);
+		ti.setTime(ti.getTime() + addTime);
+		this.notify();
+	}
+	
+	public synchronized void addTask(TaskInfo newInfo){
+		if (map.containsKey(newInfo.getName())){
+			newInfo.setTaskNum(map.get(newInfo.getName()));
+		} else {
+			taskNum +=10;
+			map.put(newInfo.getName(), taskNum);
+			newInfo.setTaskNum(taskNum);
+		}
+		if (list.isEmpty()) {
+			list.add(newInfo);
+		} else {
+			for (int cnt = 0; cnt < list.size(); cnt++){
+				TaskInfo info = list.get(cnt);
+				if (info.getTime() < newInfo.getTime()){
+					newInfo.setTime(newInfo.getTime() - info.getTime());
+					if (cnt+1 == list.size()){
+						list.add(newInfo);
+						break;
+					}
+				} else if (info.getTime() == newInfo.getTime()){
+					newInfo.setTime(newInfo.getTime() - info.getTime());
+					list.add(cnt+1, newInfo);
+					break;
+				} else if (info.getTime() > newInfo.getTime()){
+					info.setTime(info.getTime() - newInfo.getTime());
+					list.add(cnt, newInfo);
+					break;
+				}
+			}
+		}
+		updateFlag = true;
+	}
+
+	@Override
+	public synchronized void run() {
+		try {
+			while(true){
+				if(list.size()== 0)System.exit(0);
+				nowTask = list.poll();
+				System.out.print("taskNum "+nowTask.getTaskNum());
+				System.out.println(" taskTime "+nowTask.getTime());
+				time = System.currentTimeMillis();
+				if (nowTask.getTime()!=0)
+					this.wait(nowTask.getTime());
+				totalTime +=nowTask.getTime();
+				nowTask.setTime(30 * 1000);
+				addTask(nowTask);
+				
+			}
+		} catch (InterruptedException e) {
+		}
+	}
+}