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);
+		}
 	}
-
 }