diff src/alice/topology/manager/keeparive/SendPing.java @ 312:6e0a3c680b82

Rename
author sugi
date Tue, 26 Nov 2013 18:20:18 +0900
parents src/alice/topology/manager/keeparive/PingScheduler.java@f1cd920ea913
children f1f0638861ab
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/alice/topology/manager/keeparive/SendPing.java	Tue Nov 26 18:20:18 2013 +0900
@@ -0,0 +1,54 @@
+package alice.topology.manager.keeparive;
+
+import alice.codesegment.CodeSegment;
+import alice.datasegment.CommandType;
+import alice.datasegment.Receiver;
+
+public class SendPing extends CodeSegment{
+	private Receiver info = ids.create(CommandType.TAKE);
+	private TaskInfo nowTask;
+	private boolean interruptFlag = false;
+	private long time = 0;
+
+	static class SingletonHolder {
+		private static SendPing Instance = new SendPing();		
+	}
+	public static SendPing getInstance(){
+		return SingletonHolder.Instance;
+	}
+	public void setKey(){
+		info.setKey("_WAITINGLIST");
+	}
+	
+	@Override
+	public synchronized void run() {
+		ListManager list = info.asClass(ListManager.class);
+		try {
+			nowTask = list.getTaskList().pollFirst();
+			ods.update("_WAITINGLIST", list);
+			time = System.currentTimeMillis();
+			if (nowTask.getSleepTime()!=0)
+				this.wait(nowTask.getSleepTime());
+			if (interruptFlag){				
+				interruptFlag = false;
+			} else {
+				ods.ping(nowTask.getManagerKey(), nowTask.getReturnKey());
+			}
+		} catch (InterruptedException e) {		
+		}
+		SendPing.getInstance().setKey();
+	}
+	public synchronized void interrupt(){
+		interruptFlag = true;
+		notify();
+	}
+	
+	public TaskInfo getNowTask() {
+		return nowTask;
+	}
+	
+	public long getTime(){
+		return time;
+	}
+}
+