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
60 while (nbPeers < Common.MAXIMUM_PAIRS && nbPeers < peersList.size()) {
63 nextPeer = stream.randInt(0, peersList.size() - 1);
64 } while (tTask.peers.contains(nextPeer));
65 tTask.peers.add(peersList.get(nextPeer));
68 //Adding the peer to our list
69 peersList.add(tTask.peerId);
70 tTask.type = TrackerTask.Type.ANSWER;
71 //Setting the interval
72 tTask.interval = Common.TRACKER_QUERY_INTERVAL;
73 //Sending the task back to the peer
74 tTask.dsend(tTask.mailbox);
82 catch (MsgException e) {
86 Msg.info("Tracker is leaving");