Mercurial > hg > Database > Alice
diff 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 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/java/alice/topology/manager/keeparive/RespondPing.java Wed Apr 16 18:26:07 2014 +0900 @@ -0,0 +1,43 @@ +package alice.topology.manager.keeparive; + +import alice.codesegment.CodeSegment; +import alice.datasegment.CommandType; +import alice.datasegment.DataSegment; +import alice.datasegment.Receiver; + +public class RespondPing extends CodeSegment{ + private Receiver respond = ids.create(CommandType.TAKE); + private long pingedTime = System.currentTimeMillis(); + + public RespondPing(String key) { + respond.setKey(key); + } + + @Override + public void run() { + RespondData d = respond.asClass(RespondData.class); + System.out.print("ping from "+d.from); + System.out.println(" Recieved time "+(d.time - pingedTime)); + if (d.time - pingedTime > 60 * 1000){ + // need check, this connection is alive. may be close + DataSegment.get(d.from).close(); + } else { + // if nowTask close d.from's socket cancel. + // if not remove close task in the Queue. + TaskExecuter exec = TaskExecuter.getInstance(); + TaskInfo task = new TaskInfo(TaskType.CLOSE); + task.setInfo(d.from, null, 0); + if (exec.compareNowTask(task)){ + // case: remove task is state countdown. + exec.skip(); // countdown + } else { + // case: remove task is still in the waiting queue. + ods.put("_REMOVETASK",task); + new RemoveTask(); + } + TaskInfo task2 = new TaskInfo(TaskType.PING); + task2.setInfo(d.from, "_FORM_"+d.from, 5 * 1000); + ods.put("_TASKINFO", task2); + } + } +}