Mercurial > hg > Members > tatsuki > Alice
comparison src/main/java/alice/topology/manager/keeparive/RespondPing.java @ 345:8f71c3e6f11d
Change directory structure Maven standard
author | sugi |
---|---|
date | Wed, 16 Apr 2014 18:26:07 +0900 |
parents | |
children | 388e7d4b0624 |
comparison
equal
deleted
inserted
replaced
344:9f97ec18f8c5 | 345:8f71c3e6f11d |
---|---|
1 package alice.topology.manager.keeparive; | |
2 | |
3 import alice.codesegment.CodeSegment; | |
4 import alice.datasegment.CommandType; | |
5 import alice.datasegment.DataSegment; | |
6 import alice.datasegment.Receiver; | |
7 | |
8 public class RespondPing extends CodeSegment{ | |
9 private Receiver respond = ids.create(CommandType.TAKE); | |
10 private long pingedTime = System.currentTimeMillis(); | |
11 | |
12 public RespondPing(String key) { | |
13 respond.setKey(key); | |
14 } | |
15 | |
16 @Override | |
17 public void run() { | |
18 RespondData d = respond.asClass(RespondData.class); | |
19 System.out.print("ping from "+d.from); | |
20 System.out.println(" Recieved time "+(d.time - pingedTime)); | |
21 if (d.time - pingedTime > 60 * 1000){ | |
22 // need check, this connection is alive. may be close | |
23 DataSegment.get(d.from).close(); | |
24 } else { | |
25 // if nowTask close d.from's socket cancel. | |
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(); // countdown | |
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 } | |
42 } | |
43 } |