314
|
1 package alice.topology.manager.keeparive;
|
|
2
|
|
3 import alice.codesegment.CodeSegment;
|
|
4 import alice.datasegment.CommandType;
|
323
|
5 import alice.datasegment.DataSegment;
|
314
|
6 import alice.datasegment.Receiver;
|
|
7
|
|
8 public class RespondPing extends CodeSegment{
|
|
9 private Receiver respond = ids.create(CommandType.TAKE);
|
323
|
10 private long pingedTime = System.currentTimeMillis();
|
314
|
11
|
|
12 public RespondPing(String key) {
|
|
13 respond.setKey(key);
|
|
14 }
|
|
15
|
|
16 @Override
|
|
17 public void run() {
|
316
|
18 RespondData d = respond.asClass(RespondData.class);
|
318
|
19 System.out.print("ping from "+d.from);
|
|
20 System.out.println(" Recieved time "+d.time);
|
323
|
21 if (pingedTime - d.time > 60 * 1000){
|
|
22 // need check, this connection is alive. may be close
|
|
23 DataSegment.get(d.from).close();
|
|
24 } else {
|
326
|
25 // if nowTask close d.from's socket cancel.
|
323
|
26 // if not remove close task in the Queue.
|
|
27 TaskExecuter exec = TaskExecuter.getInstance();
|
|
28 TaskInfo task = new TaskInfo(TaskType.CLOSE);
|
|
29 task.setInfo(d.from, null, 0);
|
|
30 if (exec.compareNowTask(task)){
|
|
31 // case: remove task is state countdown.
|
|
32 exec.skip();
|
|
33 } else {
|
|
34 // case: remove task is still in the waiting queue.
|
|
35 ods.put("_REMOVETASK",task);
|
|
36 new RemoveTask();
|
|
37 }
|
|
38 TaskInfo task2 = new TaskInfo(TaskType.PING);
|
|
39 task2.setInfo(d.from, "_FORM_"+d.from, 5 * 1000);
|
|
40 ods.put("_TASKINFO", task2);
|
|
41 }
|
314
|
42 }
|
|
43 }
|