local lib = {} local expect = require "cc.expect".expect local file = fs.open("/repos.dat","r") local repos = {} if file then repos = textutils.unserialise(file.readAll() or "") or repos end local function saveRepos() local file = fs.open("/repos.dat","w") file.write(textutils.serialise(repos)) file.close() end function lib.addRepo(id) expect(1,id,"number") repos[id] = "computer" saveRepos() end function lib.getRepos() return repos end function lib.rmRepo(id) expect(1,id,"number") repos[id] = nil saveRepos() end function lib.listPackages(type) local queued_requests = {} local recorded_packages = {} for k,v in pairs(repos) do if v == "computer" then network.send({proto="query",package_type=type},k) queued_requests[k] = "computer" end end local next_timestamp = os.clock()+5 repeat local event = {os.pullEvent()} if event[1] == "network_packet" then if queued_requests[event[3]] == "computer" and event[2].proto == "query_resp" and event[2].package_type == type then for name,data in pairs(event[2].data) do if recorded_packages[name] then recorded_packages[name].repos[event[3]] = event[4] else data.repos = {[event[3]] = event[4]} recorded_packages[name] = data end end end end until next(queued_requests) == nil or os.clock() >= next_timestamp return recorded_packages end _G.repo = lib