310
|
1 package alice.topology.manager.keeparive;
|
|
2
|
|
3 import java.util.LinkedList;
|
|
4
|
|
5 import alice.codesegment.CodeSegment;
|
|
6 import alice.datasegment.CommandType;
|
|
7 import alice.datasegment.Receiver;
|
|
8
|
|
9 public class CreateSchedule extends CodeSegment{
|
|
10 private Receiver info1 = ids.create(CommandType.TAKE); // WaitingList
|
|
11 private Receiver info2 = ids.create(CommandType.TAKE); // TaskInfo
|
|
12
|
|
13 public CreateSchedule(){
|
|
14 info1.setKey("_WAITINGLIST");
|
|
15 info2.setKey("_TASKINFO");
|
|
16 }
|
|
17
|
|
18 @Override
|
|
19 public void run() {
|
|
20 ListManager manager = info1.asClass(ListManager.class);
|
|
21 TaskInfo newTask = info2.asClass(TaskInfo.class);
|
312
|
22 SendPing ps = SendPing.getInstance();
|
310
|
23 TaskInfo nowTask = ps.getNowTask();
|
|
24 LinkedList<TaskInfo> list = manager.getTaskList();
|
|
25 if (nowTask.getManagerKey().equals(newTask.getManagerKey())){
|
|
26 long postponeTime = nowTask.getSleepTime() - (System.currentTimeMillis() - ps.getTime());
|
|
27 TaskInfo nextTask = list.getFirst();
|
|
28 nextTask.setSleepTime(postponeTime + nextTask.getSleepTime());
|
|
29 manager.addTask(newTask);
|
|
30 ps.interrupt();
|
|
31 } else {
|
|
32 for (TaskInfo info : list){
|
|
33 if (newTask.getManagerKey().equals(info.getManagerKey())){
|
|
34 list.remove(info);
|
|
35 }
|
|
36 }
|
|
37 manager.addTask(newTask);
|
|
38 }
|
|
39 ods.update("_SCHEDLIST", manager);
|
311
|
40 new CheckExistTask();
|
310
|
41 }
|
|
42 }
|