Mercurial > hg > Database > Alice
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; + } +} +