1 -- A SimGrid Lua implementation of the Bittorrent protocol.
17 -- Check the arguments
20 simgrid.info("Wrong number of arguments for the tracker")
22 -- Initialization of the random generator
24 -- Retrieve the end time
25 tracker_data.deadline = tonumber(args[1])
27 simgrid.info("Tracker launched")
29 local now = simgrid.get_clock()
31 tracker_data.comm_received = simgrid.task.irecv("tracker")
32 while now < tracker_data.deadline do
33 task, err = tracker_data.comm_received:test()
35 simgrid.debug("Received a request from " .. task.mailbox)
36 tracker_data.comm_received = simgrid.task.irecv("tracker")
37 -- Sending peers to the peer
40 if #tracker_data.peers_list > 0 then
41 i = math.random(1,#tracker_data.peers_list)
43 while #peers < #tracker_data.peers_list and #peers < common_tracker.MAXIMUM_PEERS do
44 table.insert(peers,tracker_data.peers_list[i])
45 i = (i + 1) % #tracker_data.peers_list
49 -- Add the peer to our peer list
50 table.insert(tracker_data.peers_list,task.peer_id)
51 -- Setting the interval
52 task.interval = TRACKER_QUERY_INTERVAL
53 -- Sending the task back to the peer
54 task:dsend(task.mailbox)
56 simgrid.process.sleep(1)
57 now = simgrid.get_clock()
61 simgrid.info("Tracker is leaving")