2 import java.util.ArrayList;
3 import java.util.Iterator;
5 import org.simgrid.msg.Comm;
6 import org.simgrid.msg.Host;
7 import org.simgrid.msg.Process;
8 import org.simgrid.msg.Msg;
9 import org.simgrid.msg.MsgException;
10 import org.simgrid.msg.Task;
12 import org.simgrid.msg.RngStream;
14 * Tracker, handle requests from peers.
16 public class Tracker extends Process {
17 protected RngStream stream;
21 protected ArrayList<Integer> peersList;
23 * End time for the simulation
25 protected double deadline;
27 * Current comm received
29 protected Comm commReceived = null;
31 public Tracker(Host host, String name, String[]args) {
32 super(host,name,args);
36 public void main(String[] args) throws MsgException {
37 if (args.length != 1) {
38 Msg.info("Wrong number of arguments for the tracker.");
41 //Build the RngStream object for randomness
42 stream = new RngStream("tracker");
43 //Retrieve the end time
44 deadline = Double.valueOf(args[0]);
45 //Building peers array
46 peersList = new ArrayList<Integer>();
48 Msg.info("Tracker launched.");
49 while (Msg.getClock() < deadline) {
50 if (commReceived == null) {
51 commReceived = Task.irecv(Common.TRACKER_MAILBOX);
54 if (commReceived.test()) {
55 Task task = commReceived.getTask();
56 if (task instanceof TrackerTask) {
57 TrackerTask tTask = (TrackerTask)task;
58 //Sending peers to the peer
59 //TODO: Send RANDOM pairs using RngStreams.
61 while (nbPeers < Common.MAXIMUM_PAIRS && nbPeers < peersList.size()) {
64 nextPeer = stream.randInt(0, peersList.size() - 1);
65 } while (tTask.peers.contains(nextPeer));
66 tTask.peers.add(peersList.get(nextPeer));
69 //Adding the peer to our list
70 peersList.add(tTask.peerId);
71 tTask.type = TrackerTask.Type.ANSWER;
72 //Setting the interval
73 tTask.interval = Common.TRACKER_QUERY_INTERVAL;
74 //Sending the task back to the peer
75 tTask.dsend(tTask.mailbox);
83 catch (MsgException e) {
87 Msg.info("Tracker is leaving");