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 LinkedList<TaskInfo> list = manager.getTaskList();
|
314
|
24 if (ps.getNowTask()!=null&&ps.getNowTask().getManagerKey().equals(newTask.getManagerKey())){
|
|
25 long postponeTime = ps.getNowTask().getSleepTime() - (System.currentTimeMillis() - ps.getTime());
|
310
|
26 TaskInfo nextTask = list.getFirst();
|
|
27 nextTask.setSleepTime(postponeTime + nextTask.getSleepTime());
|
|
28 manager.addTask(newTask);
|
|
29 ps.interrupt();
|
|
30 } else {
|
|
31 for (TaskInfo info : list){
|
|
32 if (newTask.getManagerKey().equals(info.getManagerKey())){
|
|
33 list.remove(info);
|
|
34 }
|
|
35 }
|
|
36 manager.addTask(newTask);
|
|
37 }
|
314
|
38 ods.update("_WAITINGLIST", manager);
|
311
|
39 new CheckExistTask();
|
310
|
40 }
|
|
41 }
|