303
|
1 package alice.topology.manager.keeparive;
|
|
2
|
|
3 import alice.codesegment.CodeSegment;
|
309
|
4 import alice.datasegment.CommandType;
|
321
|
5 import alice.datasegment.DataSegment;
|
309
|
6 import alice.datasegment.Receiver;
|
303
|
7
|
329
|
8 public class TaskExecuter extends CodeSegment {
|
310
|
9 private Receiver info = ids.create(CommandType.TAKE);
|
|
10 private TaskInfo nowTask;
|
323
|
11 private boolean skipFlag = false;
|
|
12 private long startTime = 0;
|
329
|
13 private long remainingTime = 0;
|
319
|
14 private static TaskExecuter instance = new TaskExecuter();
|
310
|
15
|
329
|
16 private TaskExecuter() {}
|
|
17 public static TaskExecuter getInstance() {
|
315
|
18 return instance;
|
|
19 }
|
|
20
|
329
|
21 public void setKey() {
|
314
|
22 ids.init();
|
309
|
23 info.setKey("_WAITINGLIST");
|
|
24 }
|
315
|
25
|
309
|
26 @Override
|
329
|
27 public synchronized void run() {
|
330
|
28 ListManager list = info.asClass(ListManager.class);
|
314
|
29 if (list.getTaskList().size() == 0){
|
329
|
30 if (remainingTime !=0){
|
|
31 TaskInfo info = new TaskInfo(TaskType.SKIP);
|
|
32 info.setSleepTime(remainingTime);
|
|
33 remainingTime = 0;
|
|
34 list.addTask(info);
|
|
35 }
|
314
|
36 ods.update("_WAITINGLIST", list);
|
329
|
37 } else {
|
|
38 setNowTask(list.getTaskList().poll());
|
|
39 ods.update("_WAITINGLIST", list);
|
|
40
|
|
41 if (skipFlag) {
|
|
42 skipFlag = false;
|
|
43 nowTask.setSleepTime(remainingTime + nowTask.getSleepTime());
|
|
44 remainingTime = 0;
|
|
45 }
|
|
46
|
|
47 startTime = System.currentTimeMillis();
|
|
48 System.out.println(nowTask.getSleepTime()+" "+nowTask.getType());
|
|
49 if (nowTask.getSleepTime() != 0){
|
|
50 try {
|
|
51 wait(nowTask.getSleepTime());
|
|
52 } catch (InterruptedException e) {
|
|
53 e.printStackTrace();
|
|
54 }
|
|
55 }
|
330
|
56
|
329
|
57
|
|
58 if (!skipFlag){
|
330
|
59 execTask();
|
329
|
60 }
|
330
|
61 setNowTask(null);
|
|
62 startTime = 0;
|
323
|
63 }
|
329
|
64 setKey();
|
|
65 }
|
|
66
|
330
|
67 private synchronized void execTask(){
|
|
68 // ping or close
|
|
69 System.out.println("aaaa");
|
|
70 if (nowTask.getType() == TaskType.PING) {
|
|
71 System.out.println("bbb");
|
|
72 ods.ping(nowTask.getManagerKey(), nowTask.getReturnKey());
|
|
73 TaskInfo task = new TaskInfo(TaskType.CLOSE);
|
|
74 task.setInfo(nowTask.getManagerKey(), 10 * 1000);
|
|
75 ods.put("_TASKINFO", task);
|
|
76 new RespondPing(nowTask.getReturnKey());
|
|
77 } else if (nowTask.getType() == TaskType.CLOSE) {
|
|
78 // no response from the Remote DataSegment. So close this connection.
|
|
79 //DataSegment.get(nowTask.getManagerKey()).close();
|
|
80 System.out.println("CLOSE");
|
|
81
|
|
82 nowTask.show();
|
|
83 System.exit(0);
|
|
84 }
|
|
85 }
|
|
86
|
329
|
87 public synchronized void skip() {
|
|
88 skipFlag = true;
|
|
89 if (startTime == 0){
|
|
90 remainingTime = nowTask.getSleepTime();
|
|
91 } else {
|
|
92 remainingTime = nowTask.getSleepTime() - (System.currentTimeMillis() - startTime);
|
309
|
93 }
|
330
|
94 System.out.println(remainingTime);
|
321
|
95 nowTask = null;
|
329
|
96 notify();
|
330
|
97 System.out.println(nowTask);
|
309
|
98 }
|
329
|
99
|
|
100 public synchronized void ignore() {
|
323
|
101 skipFlag = true;
|
329
|
102 remainingTime = 0;
|
323
|
103 nowTask = null;
|
303
|
104 notify();
|
309
|
105 }
|
315
|
106
|
330
|
107 public synchronized TaskInfo getNowTask() {
|
310
|
108 return nowTask;
|
|
109 }
|
315
|
110
|
329
|
111 public synchronized void setNowTask(TaskInfo info) {
|
|
112 nowTask = info;
|
310
|
113 }
|
329
|
114
|
|
115 public long getRemainingTime() {
|
|
116 if (nowTask != null) {
|
|
117 if (startTime !=0) {
|
|
118 return nowTask.getSleepTime() - (System.currentTimeMillis() - startTime);
|
|
119 } else {
|
|
120 return nowTask.getSleepTime();
|
|
121 }
|
|
122 } else {
|
|
123 return remainingTime;
|
|
124 }
|
|
125 }
|
|
126
|
|
127 public boolean compareNowTask(TaskInfo task) {
|
323
|
128 if (nowTask != null){
|
|
129 if (nowTask.getType().equals(task.getType())
|
|
130 && nowTask.getManagerKey().equals(task.getManagerKey())){
|
|
131 return true;
|
|
132 }
|
|
133 }
|
|
134 return false;
|
|
135 }
|
303
|
136
|
323
|
137 } |