Mercurial > hg > Members > sugi > javafx
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) { + } + } +}