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