Mercurial > hg > Members > sugi > javafx
comparison src/alice/topology/manager/keeparive/PingScheduler.java @ 36:1dc3c76e6b34
bug fixed
author | sugi |
---|---|
date | Mon, 11 Nov 2013 19:32:00 +0900 |
parents | 9638020264cd |
children |
comparison
equal
deleted
inserted
replaced
35:9638020264cd | 36:1dc3c76e6b34 |
---|---|
8 | 8 |
9 public class PingScheduler extends CodeSegment{ | 9 public class PingScheduler extends CodeSegment{ |
10 private LinkedList<TaskInfo> list = new LinkedList<TaskInfo>(); | 10 private LinkedList<TaskInfo> list = new LinkedList<TaskInfo>(); |
11 private HashMap<String, Integer> map = new HashMap<String, Integer>(); | 11 private HashMap<String, Integer> map = new HashMap<String, Integer>(); |
12 private long INTERVAL = 60 * 1000; | 12 private long INTERVAL = 60 * 1000; |
13 | 13 |
14 public boolean updateFlag = false; | 14 public boolean updateFlag = false; |
15 private boolean postponeFlag = false; | 15 private boolean interruptFlag = false; |
16 | 16 |
17 public long time = 0; | 17 public long time = 0; |
18 public int taskNum = 0; | 18 public int taskNum = 0; |
19 public TaskInfo nowTask; | 19 public TaskInfo nowTask; |
20 private long totalTime = 0; | 20 private long totalTime = 0; |
21 private long postponeTime = 0; | 21 private long postponeTime = 0; |
22 | 22 |
23 public long getTotalTime(){ | 23 public long getTotalTime(){ |
24 return totalTime; | 24 return totalTime; |
25 } | 25 } |
26 | 26 |
27 public List<TaskInfo> getTaskList(){ | 27 public List<TaskInfo> getTaskList(){ |
28 return list; | 28 return list; |
29 } | 29 } |
30 | 30 |
31 public synchronized void postpone(String name){ | 31 public synchronized void postpone(String name){ |
32 long elapsedTime = System.currentTimeMillis() - time; | 32 long elapsedTime = System.currentTimeMillis() - time; |
33 totalTime += elapsedTime; | 33 totalTime += elapsedTime; |
34 postponeTime = nowTask.getTime() - elapsedTime; | 34 postponeTime = nowTask.getTime() - elapsedTime; |
35 if (name.equals(nowTask.getName())){ | 35 if (name.equals(nowTask.getName())){ |
36 TaskInfo nextTask = list.get(0); | 36 TaskInfo nextTask = list.get(0); |
37 nextTask.setTime(postponeTime + nextTask.getTime()); | 37 nextTask.setTime(postponeTime + nextTask.getTime()); |
38 nowTask.setTime(INTERVAL); | 38 nowTask.setTime(INTERVAL); |
39 addTask(nowTask); | 39 addTask(nowTask); |
40 | 40 |
41 } else { | 41 } else { |
42 int cnt = 0; | |
42 nowTask.setTime(postponeTime); | 43 nowTask.setTime(postponeTime); |
43 list.add(0, nowTask); | 44 list.add(cnt, nowTask); |
44 | 45 for (TaskInfo info : list){ |
45 for (int cnt = 0 ;cnt < list.size(); cnt++){ | 46 if (name.equals(info.getName())){ |
46 TaskInfo task = list.get(cnt); | 47 if (info != list.getLast()){ |
47 if (name.equals(task.getName())){ | 48 TaskInfo nextInfo = list.get(cnt+1); |
48 if (cnt+1 < list.size()){ | 49 nextInfo.setTime(nextInfo.getTime() + info.getTime()); |
49 TaskInfo tasknext = list.get(cnt+1); | |
50 tasknext.setTime(task.getTime()); | |
51 } | 50 } |
52 list.remove(task); | 51 list.remove(info); |
53 task.setTime(INTERVAL); | 52 info.setTime(INTERVAL); |
54 addTask(task); | 53 addTask(info); |
55 break; | 54 break; |
56 } | 55 } |
56 cnt++; | |
57 } | 57 } |
58 } | 58 } |
59 postponeFlag = true; | 59 interruptFlag = true; |
60 notify(); | 60 notify(); |
61 } | 61 } |
62 | 62 |
63 | 63 |
64 public synchronized void addTask(TaskInfo newInfo){ | 64 public synchronized void addTask(TaskInfo newInfo){ |
65 if (map.containsKey(newInfo.getName())){ | 65 if (map.containsKey(newInfo.getName())){ |
66 newInfo.setTaskNum(map.get(newInfo.getName())); | 66 newInfo.setTaskNum(map.get(newInfo.getName())); |
67 } else { | 67 } else { |
68 taskNum +=10; | 68 taskNum +=10; |
84 info.setTime(info.getTime() - newInfo.getTime()); | 84 info.setTime(info.getTime() - newInfo.getTime()); |
85 break; | 85 break; |
86 } | 86 } |
87 cnt++; | 87 cnt++; |
88 } | 88 } |
89 | |
90 list.add(cnt, newInfo); | 89 list.add(cnt, newInfo); |
91 } | 90 } |
92 updateFlag = true; | 91 updateFlag = true; |
93 } | 92 } |
94 | 93 |
96 public synchronized void run() { | 95 public synchronized void run() { |
97 try { | 96 try { |
98 while(true){ | 97 while(true){ |
99 if(list.size()== 0) | 98 if(list.size()== 0) |
100 System.exit(0); | 99 System.exit(0); |
100 for (TaskInfo info : list){ | |
101 System.out.println(info.getName()+" "+info.getTime()); | |
102 } | |
101 nowTask = list.poll(); | 103 nowTask = list.poll(); |
102 System.out.print("taskNum "+nowTask.getTaskNum()); | 104 System.out.print("taskNum "+nowTask.getTaskNum()); |
103 System.out.println(" taskTime "+nowTask.getTime()); | 105 System.out.println(" taskTime "+nowTask.getTime()); |
104 time = System.currentTimeMillis(); | 106 time = System.currentTimeMillis(); |
105 if (nowTask.getTime()!=0) | 107 if (nowTask.getTime()!=0) |
106 this.wait(nowTask.getTime()); | 108 this.wait(nowTask.getTime()); |
107 if (postponeFlag){ | 109 if (interruptFlag){ |
108 postponeFlag = false; | 110 interruptFlag = false; |
109 } else { | 111 } else { |
110 totalTime +=nowTask.getTime(); | 112 totalTime +=nowTask.getTime(); |
111 nowTask.setTime(INTERVAL); | 113 nowTask.setTime(INTERVAL); |
112 addTask(nowTask); | 114 addTask(nowTask); |
113 } | 115 } |
114 | 116 |
115 } | 117 } |
116 } catch (InterruptedException e) { | 118 } catch (InterruptedException e) { |
117 } | 119 } |
118 } | 120 } |
119 } | 121 } |