303
|
1 package alice.topology.manager.keeparive;
|
|
2
|
|
3 import java.util.LinkedList;
|
|
4 import alice.codesegment.CodeSegment;
|
|
5
|
|
6 public class PingScheduler extends CodeSegment{
|
305
|
7 public PingSchedList plist = new PingSchedList();
|
|
8 private TaskInfo nowTask;
|
303
|
9
|
|
10 private boolean interruptFlag = false;
|
|
11
|
305
|
12 private long INTERVAL = 60 * 1000;
|
303
|
13 private long time = 0;
|
|
14 private long postponeTime = 0;
|
|
15
|
|
16 public synchronized void postpone(String name){
|
|
17 long elapsedTime = System.currentTimeMillis() - time;
|
|
18 postponeTime = nowTask.getSleepTime() - elapsedTime;
|
304
|
19 LinkedList<TaskInfo> list = plist.getTaskList();
|
303
|
20 if (name.equals(nowTask.getManagerKey())){
|
|
21 TaskInfo nextTask = list.get(0);
|
|
22 nextTask.setSleepTime(postponeTime + nextTask.getSleepTime());
|
|
23 nowTask.setSleepTime(INTERVAL);
|
304
|
24 plist.addTask(nowTask);
|
303
|
25
|
|
26 } else {
|
|
27 int cnt = 0;
|
|
28 nowTask.setSleepTime(postponeTime);
|
|
29 list.add(cnt, nowTask);
|
|
30 for (TaskInfo info : list){
|
|
31 if (name.equals(info.getManagerKey())){
|
|
32 if (info != list.getLast()){
|
|
33 TaskInfo nextInfo = list.get(cnt+1);
|
|
34 nextInfo.setSleepTime(nextInfo.getSleepTime() + info.getSleepTime());
|
|
35 }
|
|
36 list.remove(info);
|
|
37 info.setSleepTime(INTERVAL);
|
304
|
38 plist.addTask(info);
|
303
|
39 break;
|
|
40 }
|
|
41 cnt++;
|
|
42 }
|
|
43 }
|
|
44 interruptFlag = true;
|
|
45 notify();
|
304
|
46 }
|
303
|
47
|
|
48 @Override
|
|
49 public synchronized void run() {
|
304
|
50 LinkedList<TaskInfo> list = plist.getTaskList();
|
303
|
51 try {
|
|
52 while(true){
|
|
53 nowTask = list.poll();
|
305
|
54 System.out.print("TaskName "+nowTask.getManagerKey());
|
|
55 System.out.println(" sleepTime "+nowTask.getSleepTime());
|
303
|
56 time = System.currentTimeMillis();
|
|
57 if (nowTask.getSleepTime()!=0)
|
|
58 this.wait(nowTask.getSleepTime());
|
|
59 if (interruptFlag){
|
|
60 interruptFlag = false;
|
|
61 } else {
|
308
|
62 ods.put("_SENDPING", nowTask.getManagerKey());
|
303
|
63 }
|
|
64 }
|
|
65 } catch (InterruptedException e) {
|
|
66 }
|
|
67 }
|
|
68 }
|
|
69
|