Mercurial > hg > Database > Alice
diff src/alice/topology/manager/keeparive/RespondPing.java @ 323:d746c4486287
work
author | one |
---|---|
date | Mon, 23 Dec 2013 17:13:16 +0900 |
parents | aafc88985822 |
children | 806cc010a5bd |
line wrap: on
line diff
--- a/src/alice/topology/manager/keeparive/RespondPing.java Tue Dec 17 19:46:29 2013 +0900 +++ b/src/alice/topology/manager/keeparive/RespondPing.java Mon Dec 23 17:13:16 2013 +0900 @@ -2,10 +2,12 @@ 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); @@ -16,10 +18,27 @@ RespondData d = respond.asClass(RespondData.class); System.out.print("ping from "+d.from); System.out.println(" Recieved time "+d.time); - TaskInfo task = new TaskInfo(TaskType.PING); - task.setInfo(d.from, "_RESPONCE", 5 * 1000); - ods.put("_TASKINFO", task); - + if (pingedTime - d.time > 60 * 1000){ + // need check, this connection is alive. may be close + DataSegment.get(d.from).close(); + } else { + System.out.println("alive"); + // if nowTask is 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(); + } 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); + } } - }