Advertisement
Grauly

CC_IEC-OS host v2

Apr 13th, 2021 (edited)
493
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 9.07 KB | None | 0 0
  1. local modemSide = "back"
  2. local credentials = {}
  3. credentials["Grauly"] = {pass="f09513d6da1023d369a37bbad13638865c1d0f7aae3b157395fa7bdc3d2b2e89",access=3}
  4. credentials["Marten"] = {pass="53643a3b756ad2ff75b5e63d865c1fffdd8b93796a85eb7b54ea93c157b6ab64",access=2}
  5. credentials["Legolas"] = {pass="6157372f709be592f95321f8fbec165b184f7e3d3b10828f6b51edd3a6f6d752",access=2}
  6.  
  7. -- end of config
  8. sha256 = require("sha256").sha256
  9.  
  10. function startup()
  11.     if (peripheral.isPresent(modemSide)) then
  12.         if (peripheral.getType(modemSide) == "modem") then
  13.             print("Modem found present - starting!")
  14.             rednet.open(modemSide)
  15.             return true
  16.         else
  17.             print("Modem was not found - aborting.")
  18.             return false
  19.         end
  20.     else
  21.         print("Modem was not found - aborting.")
  22.         return false
  23.     end
  24. end
  25.  
  26. function hostnet(net)
  27.     print("Starting " .. net .. "...")
  28.     rednet.host(net, "IEC-Host")
  29.     print(net .. " Successfully hosted!")
  30. end
  31.  
  32. function hostnets()
  33.     hostnet("IECNET")
  34.     hostnet("Turtlenet")
  35.     hostnet("Energynet")
  36.     hostnet("Turretnet")
  37. end
  38.  
  39. function unhostnet(net)
  40.     rednet.unhost(net, "IEC-Host")
  41.     print(net .. " Offline.")
  42. end
  43.  
  44. function unhostnets()
  45.     unhostnet("IECNET")
  46.     unhostnet("Turtlenet")
  47.     unhostnet("Energynet")
  48.     unhostnet("Turretnet")
  49. end
  50.  
  51. function tableContainsValue(table,value)
  52.     if (type(table) == "table") then
  53.         for k,v in pairs(table) do
  54.             if (v == value) then
  55.                 return true
  56.             end
  57.         end
  58.         return false
  59.     else
  60.         return false
  61.     end
  62. end
  63.  
  64. -- rednet handeling and main functionality
  65. local lastTurtleTransmissions = {}
  66. local lastTurtleTransmissionsTimer = {}
  67. local lastEnergyReadouts = {}
  68. local lastEnergyNetTransmissionTimer = {}
  69. local turretRegisters = {}
  70. local lastTurretCommands = {}
  71. local loggedIn = {}
  72.  
  73. function rednetHandeling(sender, message, protocol)
  74.     if (message == "ping") then -- ping
  75.         rednet.send(sender, "pong", protocol)
  76.     elseif (protocol == "Turtlenet") then -- Turtlenet handeling
  77.         if (type(message) == "string") then
  78.             lastTurtleTransmissions[sender] = message;
  79.         end
  80.         lastEnergyNetTransmissionTimer[sender] = 0
  81.     elseif (protocol == "Energynet") then -- Energynet handeling
  82.         lastEnergyReadouts[sender] = message
  83.         lastEnergyNetTransmissionTimer[sender] = 0
  84.     elseif (protocol == "Turretnet") then
  85.         if (type(message) == "table") then
  86.             if (message["command"] == "register") then
  87.                 turretsRegistered = turretRegisters[message["input"]]
  88.                 if (turretsRegistered == nil) then
  89.                     turretsRegistered = {}
  90.                 end
  91.                 if (not tableContainsValue(turretsRegistered,sender)) then
  92.                     table.insert(turretsRegistered,sender)
  93.                     turretRegisters[message["input"]] = turretsRegistered
  94.                     rednet.send(sender,"registered",protocol)
  95.                     turretMessage = {}
  96.                     turretMessage["n"] = false
  97.                     turretMessage["m"] = false
  98.                     turretMessage["p"] = false
  99.                     rednet.send(sender,turretMessage,protocol)
  100.                     lastTurretCommands[message["input"]] = turretMessage
  101.                 end
  102.             end
  103.         end
  104.     elseif (protocol == "IECNET") then
  105.         -- actual protocol handeling
  106.         if (message == "Turtlenet querry") then
  107.             returnMessage = {}
  108.             returnMessage["message"] = lastTurtleTransmissions
  109.             returnMessage["format"] = "turtle"
  110.             rednet.send(sender, returnMessage, protocol)
  111.         elseif (message == "Energynet querry") then
  112.             returnMessage = {}
  113.             returnMessage["message"] = lastEnergyReadouts
  114.             returnMessage["format"] = "energy"
  115.             rednet.send(sender, returnMessage, protocol)
  116.         elseif (message == "Turtlenet Harvest") then
  117.             print("Turtlenet Harvest Initiated")
  118.             returnMessage = {}
  119.             returnMessage["message"] = "Turtlenet Harvest"
  120.             returnMessage["format"] = "Turtlenet"
  121.             rednet.broadcast(returnMessage,"Turtlenet")
  122.         elseif (message == "Turtlenet Reboot") then
  123.             print("Turtlenet Reboot Initiated")
  124.             returnMessage = {}
  125.             returnMessage["message"] = "Turtlenet Reboot"
  126.             returnMessage["format"] = "Turtlenet"
  127.             rednet.broadcast(returnMessage,"Turtlenet")
  128.         elseif (message == "Turretnet querry") then
  129.             if (not (loggedIn[sender] == nil)) then --check if the user is logged in
  130.                 returnMessage = {}
  131.                 returnMessage["message"] = lastTurretCommands
  132.                 returnMessage["format"] = "Securitynet-Data"
  133.                 rednet.send(sender,returnMessage,protocol)
  134.             else
  135.                 rednet.send(sender,"Logout",protocol)
  136.             end
  137.         elseif (message == "Turretnet reboot") then
  138.             if (not (loggedIn[sender] == nil)) then --check if the user is logged in
  139.                 rednet.broadcast("Turretnet reboot","Turretnet")
  140.                 print("Turretnet reboot Initialized")
  141.             else
  142.                 rednet.send(sender,"Logout",protocol)
  143.             end
  144.         elseif (type(message) == "table") then
  145.             if (message["format"] == "Securitynet") then
  146.                 message = message["message"]
  147.                 if (message["action"] == "login") then
  148.                     returnMessage = {}
  149.                     returnMessage["message"] = "Denied"
  150.                     if (type(message["user"]) == "string" and type(message["pass"]) == "string") then
  151.                         if (not (credentials[message["user"]] == nil)) then
  152.                             if (credentials[message["user"]]["pass"] == sha256(message["pass"])) then --password check
  153.                                 loggedIn[sender] = {access=credentials[message["user"]]["access"],timeout=0}
  154.                                 returnMessage["message"] = "Success"
  155.                             end
  156.                         end
  157.                     end
  158.                     returnMessage["format"] = "Securitynet-Login"
  159.                     rednet.send(sender, returnMessage, protocol)
  160.                 elseif (message["action"] == "control") then
  161.                     if (not (loggedIn[sender] == nil)) then --check if the user is logged in
  162.                         turretsToRecieve = turretRegisters[message["label"]]
  163.                         turretMessage = {}
  164.                         turretMessage["n"] = lastTurretCommands[message["label"]]["n"]
  165.                         turretMessage["m"] = lastTurretCommands[message["label"]]["m"]
  166.                         turretMessage["p"] = lastTurretCommands[message["label"]]["p"]
  167.                         if (type(message["n"]) == "boolean") then
  168.                             turretMessage["n"] = message["n"]
  169.                         end
  170.                         if (type(message["m"]) == "boolean") then
  171.                             turretMessage["m"] = message["m"]
  172.                         end
  173.                         if (type(message["p"]) == "boolean") then
  174.                             turretMessage["p"] = message["p"]
  175.                         end
  176.                         for k,v in pairs(turretsToRecieve) do
  177.                             rednet.send(v,turretMessage,"Turretnet")
  178.                         end
  179.                         lastTurretCommands[message["label"]] = turretMessage
  180.                     else
  181.                         rednet.send(sender,"Logout",protocol)
  182.                     end
  183.                 end
  184.             end
  185.         end
  186.     end
  187. end
  188.  
  189. function routine()
  190.     for k, v in pairs(lastEnergyNetTransmissionTimer) do
  191.         if (v > 20) then
  192.             readout = lastEnergyReadouts[k]
  193.             if (not (readout == nil)) then
  194.                 readout["online"] = false
  195.                 lastEnergyReadouts[k] = readout
  196.             end
  197.         end
  198.         lastEnergyNetTransmissionTimer[k] = v + 1
  199.     end
  200.     for k, v in pairs(lastTurtleTransmissionsTimer) do
  201.         if (v > 500) then
  202.             lastEnergyReadouts[k] = nil
  203.         end
  204.         lastTurtleTransmissionsTimer[k] = v + 1
  205.     end
  206.     for k, v in pairs(loggedIn) do
  207.         if (v["timeout"] > 300) then
  208.             loggedIn[k] = nil
  209.             rednet.send(k,"Logout","IECNET")
  210.         end
  211.         v["timeout"] = v["timeout"] - 1
  212.     end
  213. end
  214.  
  215. if (not startup()) then
  216.     print("Unable to Open Networking.")
  217.     return
  218. end
  219. hostnets()
  220. print("IEC-Host Active!")
  221.  
  222. timer = os.startTimer(1)
  223. while true do
  224.     event, a1, a2, a3 = os.pullEventRaw()
  225.     if (event == "timer" and a1 == timer) then
  226.         routine()
  227.         timer = os.startTimer(1)
  228.     elseif (event == "rednet_message") then
  229.         rednetHandeling(a1, a2, a3)
  230.         routine()
  231.     elseif (event == "terminate") then
  232.         term.setTextColor(colors.red)
  233.         print("Shutting down...")
  234.         term.setTextColor(colors.white)
  235.         unhostnets()
  236.         rednet.close(modemSide)
  237.         return
  238.     end
  239. end
  240.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement