Advertisement
melzneni

sys_database

Feb 9th, 2020
174
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 2.48 KB | None | 0 0
  1. function string:split(s, delimiter)
  2.     local result = {};
  3.     for match in (s .. delimiter):gmatch("(.-)" .. delimiter) do
  4.         table.insert(result, match);
  5.     end
  6.     return result;
  7. end
  8.  
  9. function getMsgData(msg)
  10.     local i, j = string.find(msg, ":")
  11.     local tag = string.sub(msg, 1, i - 1)
  12.     local pts = string:split(string.sub(msg, i + 1, -1), ",")
  13.     return tag, pts
  14. end
  15.  
  16. --syslib end
  17.  
  18. rednet.open("back")
  19. rednet.broadcast("root:initialise")
  20.  
  21. function init(unit)
  22.     --rednet.send(unit["id"], "action:setLabel,unit "..unit["id"])
  23. end
  24.  
  25. local predefinedPrograms = {}
  26. predefinedPrograms["service:printUnits"] = "WevF0J8v" --sys_service_printUnits
  27. predefinedPrograms["service:terminal"] = "bjC7PAsd" --sys_service_terminal
  28.  
  29. local singleUnitId = "kzcjG72h"
  30. local databaseId = "A1EaLX00"
  31.  
  32. local f = fs.open("startup", "w")
  33. f.write("shell.run(\"delete\",\"unitHandler\")\n")
  34. f.write("shell.run(\"pastebin\",\"get\",\"" .. databaseId .. "\",\"unitHandler\")\n")
  35. f.write("shell.run(\"unitHandler\")\n")
  36. f.close()
  37.  
  38. local units = {}
  39.  
  40. function getUnitsData()
  41.     local data = ""
  42.     for id1, unit in pairs(units) do
  43.         data = data .. id1 .. " " .. unit["label"] .. " "
  44.         if unit["free"] then
  45.             data = data .. "free "
  46.         else data = data .. "inUsage "
  47.         end
  48.     end
  49.     return data
  50. end
  51.  
  52. while true do
  53.     local id, msg = rednet.receive()
  54.  
  55.     local tag, pts = getMsgData(msg)
  56.     if tag == "@root" then
  57.         if pts[1] == "identify" then
  58.             local label = pts[2]
  59.             units[id] = { id = id, label = label, free = true }
  60.             rednet.send(id, "action:setStartup," .. singleUnitId)
  61.             for l, progId in pairs(predefinedPrograms) do
  62.                 if l == label then
  63.                     rednet.send(id, "action:executePastebin," .. progId)
  64.                     units[id]["free"] = false
  65.                 end
  66.             end
  67.         elseif pts[1] == "reboot" then
  68.             rednet.broadcast("root:reboot")
  69.             os.reboot()
  70.         elseif pts[1] == "getUnitsData" then
  71.             rednet.send(id, "action:" .. getUnitsData())
  72.         else print("unknown msg>@root-msg: ", msg)
  73.         end
  74.     elseif tag == "answer" then
  75.         if pts[1] == "executePastebinFinished" then
  76.             if units[id] ~= nil then
  77.                 units[id]["free"] = true
  78.             end
  79.         else print("unknown msg>answer: ", msg)
  80.         end
  81.     else
  82.         print("unknown msg-tag: ", msg)
  83.     end
  84. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement