import java.util.Timer; public class StableSpanNonroot extends Process { int parent = -1; int dist = 0; int newDist = 0;//distance after recalculation Timer t = new Timer(); int numReports; public StableSpanNonroot(Linker initComm) { super(initComm); t.schedule(new RestartTask(this), 1000, 1000); } public synchronized void recalculate(){ newDist = N;//init newDist to max possible sendToNeighbors("Q.dist",0);//query neighbors for their dist numReports = comm.neighbors.size(); while (numReports > 0) myWait(); //wait for all responses dist = newDist; } public synchronized void handleMsg(Message m, int source, String tag) { if (tag.equals("Q.dist")) { sendMsg(source, "A.dist", dist); //reply with my dist } else if (tag.equals("A.dist")) { int hisDist = m.getMessageInt(); if ((hisDist>=0) && (newDist > hisDist)) { newDist = hisDist+1; parent = source; } numReports--; notifyAll(); } else if (tag.equals("restart")) { recalculate(); } } }