Advertisement
blunty666

remotePeripheralServer

May 8th, 2016
564
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 4.38 KB | None | 0 0
  1. local REDNET_PROTOCOL = "REMOTE_PERIPHERAL"
  2. local UPDATE_INTERVAL = 1
  3.  
  4. --===== OPEN REDNET =====--
  5. for _, side in ipairs(redstone.getSides()) do
  6.     if peripheral.getType(side) == "modem" then
  7.         rednet.open(side)
  8.     end
  9. end
  10.  
  11. if not rednet.isOpen() then
  12.     printError("could not open rednet")
  13.     return
  14. end
  15.  
  16. --===== PERIPHERALS =====--
  17. local peripheralMethods = {
  18.     --[[
  19.     peripheralType = {
  20.         method = arguments,
  21.     }
  22.     ]]
  23.     ["BigReactors-Reactor"] = {
  24.         getConnected = {},
  25.         getActive = {},
  26.         isActivelyCooled = {},
  27.  
  28.         getFuelConsumedLastTick = {},
  29.         getFuelAmount = {},
  30.         getFuelAmountMax = {},
  31.         getFuelReactivity = {},
  32.         getWasteAmount = {},
  33.  
  34.         getFuelTemperature = {},
  35.         getCasingTemperature = {},
  36.  
  37.         getCoolantAmount = {},
  38.         getCoolantAmountMax = {},
  39.         getCoolantType = {},
  40.  
  41.         getEnergyStored = {},
  42.         getEnergyProducedLastTick = {},
  43.  
  44.         getHotFluidAmount = {},
  45.         getHotFluidAmountMax = {},
  46.         getHotFluidType = {},
  47.         getHotFluidProducedLastTick = {},
  48.     },
  49.     ["BigReactors-Turbine"] = {
  50.         getConnected = {},
  51.  
  52.         getActive = {},
  53.         getInductorEngaged = {},
  54.  
  55.         getFluidFlowRate = {},
  56.         getFluidFlowRateMax = {},
  57.  
  58.         getInputType = {},
  59.         getInputAmount = {},
  60.         getOutputType = {},
  61.         getOutputAmount = {},
  62.         getFluidAmountMax = {},
  63.  
  64.         getRotorSpeed = {},
  65.         getBladeEfficiency = {},
  66.  
  67.         getEnergyStored = {},
  68.         getEnergyProducedLastTick = {},
  69.     },
  70. }
  71. local peripheralHandlers = {}
  72. for peripheralType, methods in pairs(peripheralMethods) do
  73.     peripheralHandlers[peripheralType] = function(peripheralName)
  74.         local data = {}
  75.         for method, arguments in pairs(methods) do
  76.             data[method] = peripheral.call(peripheralName, method, unpack(arguments))
  77.         end
  78.         return data
  79.     end
  80. end
  81.  
  82. local function checkPeripheral(peripheralType, peripheralName)
  83.     if peripheralHandlers[peripheralType] then
  84.         return peripheralHandlers[peripheralType](peripheralName)
  85.     end
  86.     return false
  87. end
  88.  
  89. --===== SOURCES =====--
  90. local sourceMethods = {
  91.     --[[
  92.     source = {
  93.         method = arguments,
  94.     }
  95.     ]]
  96.     fluid_handler = {
  97.         getTankInfo = {"unknown"},
  98.     },
  99.     fluid_tank = {
  100.         getInfo = {},
  101.     },
  102.     inventory = {
  103.         getInventoryName = {},
  104.         getInventorySize = {},
  105.         getAllStacks = {false}
  106.     },
  107.     rf_info = {
  108.         getEnergyPerTickInfo = {},
  109.         getMaxEnergyPerTickInfo = {},
  110.         getEnergyInfo = {},
  111.         getMaxEnergyInfo = {},
  112.     },
  113.     rf_receiver = {
  114.         getEnergyStored = {"unknown"},
  115.         getMaxEnergyStored = {"unknown"},
  116.     },
  117.     vanilla_comparator = {
  118.         getOutputSignal = {},
  119.     },
  120.     vanilla_daylight_sensor = {
  121.         hasSky = {},
  122.         getSkyLight = {},
  123.         getBlockLight = {},
  124.         getCelestialAngle = {},
  125.     },
  126.     vanilla_furnace = {
  127.         getBurnTime = {},
  128.         getCookTime = {},
  129.         getCurrentItemBurnTime = {},
  130.         isBurning = {},
  131.     },
  132. }
  133. local sourceHandlers = {}
  134. for source, methods in pairs(sourceMethods) do
  135.     sourceHandlers[source] = function(peripheralName)
  136.         local data = {}
  137.         for method, arguments in pairs(methods) do
  138.             data[method] = peripheral.call(peripheralName, method, unpack(arguments))
  139.         end
  140.         return data
  141.     end
  142. end
  143.  
  144. local function getSources(peripheralName)
  145.     local peripheralSources = peripheral.call(peripheralName, "listSources")
  146.     local sourcesData = {}
  147.     for peripheralSource, _ in pairs(peripheralSources) do
  148.         if sourceHandlers[peripheralSource] then
  149.             sourcesData[peripheralSource] = sourceHandlers[peripheralSource](peripheralName)
  150.         end
  151.     end
  152.     return sourcesData
  153. end
  154.  
  155. local function checkSources(peripheralName)
  156.     local peripheralMethods = peripheral.getMethods(peripheralName)
  157.     if peripheralMethods then
  158.         for _, peripheralMethod in ipairs(peripheralMethods) do
  159.             if peripheralMethod == "listSources" then
  160.                 return getSources(peripheralName)
  161.             end
  162.         end
  163.     end
  164.     return false
  165. end
  166.  
  167. --===== MAIN =====--
  168. local function checkPeripherals()
  169.     local peripheralsData = {}
  170.     for _, peripheralName in ipairs(peripheral.getNames()) do
  171.  
  172.         local peripheralType = peripheral.getType(peripheralName)
  173.         local peripheralData = {
  174.             type = peripheralType,
  175.             main = checkPeripheral(peripheralType, peripheralName),
  176.             sources = checkSources(peripheralName),
  177.         }
  178.        
  179.         peripheralsData[peripheralName] = peripheralData
  180.     end
  181.    
  182.     rednet.broadcast(peripheralsData, REDNET_PROTOCOL)
  183.     rednet.send(os.getComputerID(), peripheralsData, REDNET_PROTOCOL) -- loop back to ourself
  184. end
  185.  
  186. local updateTime
  187. while true do
  188.     updateTime = os.clock()
  189.     checkPeripherals()
  190.     sleep(math.max(0, UPDATE_INTERVAL + updateTime - os.clock()))
  191. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement