public class ShortestPath extends Process {
int parent = -1;
int cost = -1;
int edgeWeight[] = null;
public ShortestPath(Linker initComm, int initCost[]) {
super(initComm);
edgeWeight = initCost;
}
public void initiate() {
if (myId == Symbols.coordinator) {
parent = myId;
cost = 0;
sendToNeighbors("path", cost);
}
}
public synchronized void handleMsg(Message m, int source, String tag) {
if (tag.equals("path")) {
int dist = m.getMessageInt();
if ((parent == -1) || (dist + edgeWeight[source] < cost)) {
parent = source;
cost = dist + edgeWeight[source];
System.out.println("New cost is " + cost);
sendToNeighbors("path", cost);
}
}
}
}