annotate src/alice/topology/manager/keeparive/PingScheduler.java @ 308:a8255a831ade

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