Advertisement
Te-ki

cCBRServer

Feb 13th, 2016
165
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 12.10 KB | None | 0 0
  1. --ComputerCraft BigReactors Serveur by Teki
  2. local isReactor = false
  3. local isTurbine = false
  4. local isModem = false
  5.  
  6. local reactor
  7. local turbine
  8.  
  9. local peripherals = peripheral.getNames()
  10.  
  11. for i=1, #peripherals do
  12.     if peripheral.getType(peripherals[i]) == "BigReactors-Reactor" then
  13.         reactor = peripheral.wrap(peripherals[i])
  14.         isReactor = true
  15.     elseif peripheral.getType(peripherals[i]) == "BigReactors-Turbine" then
  16.         turbine = peripheral.wrap(peripherals[i])
  17.         isTurbine = true
  18.     elseif peripheral.getType(peripherals[i]) == "modem" then
  19.         rednet.open(peripherals[i])
  20.         isModem = true
  21.     end
  22. end
  23.  
  24. local reponse = ""
  25.  
  26. local autoStart = false
  27.  
  28. local curTime
  29. local hours
  30. local minutes
  31. local finalTime
  32.  
  33. local function formatTime()
  34.     curTime = os.time()
  35.     hours = math.floor(curTime)
  36.     minutes = math.floor((curTime - hours)*60)
  37.     return string.format("%02d:%02d", hours, minutes)
  38. end
  39.  
  40. local function split(str, delim, maxNb)
  41.     -- Eliminate bad cases...
  42.     if string.find(str, delim) == nil then
  43.         return { str }
  44.     end
  45.     if maxNb == nil or maxNb < 1 then
  46.         maxNb = 0    -- No limit
  47.     end
  48.     local result = {}
  49.     local pat = "(.-)" .. delim .. "()"
  50.     local nb = 0
  51.     local lastPos
  52.     for part, pos in string.gmatch(str, pat) do
  53.         nb = nb + 1
  54.         result[nb] = part
  55.         lastPos = pos
  56.         if nb == maxNb then break end
  57.     end
  58.     -- Handle the last field
  59.     if nb ~= maxNb then
  60.         result[nb + 1] = string.sub(str, lastPos)
  61.     end
  62.    
  63.     return result
  64. end
  65.  
  66. local function reactorListen()
  67.     id, msg = rednet.receive("CCBRClient", 5)
  68.    
  69.     if (msg == "getConnected") then -- Is the computer connected ?
  70.         reponse = reactor.getConnected()
  71.     elseif (msg == "getAll") then -- Is the computer connected ?
  72.         if reactor.getConnected() then
  73.             --[[
  74.             reponse = {reactor.getConnected(), reactor.getActive(), reactor.getNumberOfControlRods(),
  75.                 reactor.getEnergyStored(), reactor.getEnergyCapacity(), reactor.getFuelTemperature(), reactor.getCasingTemperature(),
  76.                 reactor.getFuelAmount(), reactor.getWasteAmount(), reactor.getFuelAmountMax(), reactor.getEnergyProducedLastTick(),
  77.                 reactor.getHotFluidProducedLastTick(), reactor.getCoolantType(), reactor.getCoolantAmount(), reactor.getHotFluidAmountMax(),
  78.                 reactor.getFuelReactivity(), reactor.getFuelConsumedLastTick(), reactor.isActivelyCooled(), reactor.getMinimumCoordinate(),
  79.                 reactor.getMaximumCoordinate(), reactor.getHotFluidAmountMax(), autoStart}
  80.                 for i = 0, reactor.getNumberOfControlRods()-1 do
  81.                     reponse[#reponse+1] = reactor.getControlRodLevel(i)
  82.                 end
  83.                 for i = 0, reactor.getNumberOfControlRods()-1 do
  84.                     reponse[#reponse+1] = reactor.getControlRodName(i)
  85.                 end
  86.             ]]--
  87.             reponse = {}
  88.             reponse.getConnected = reactor.getConnected()
  89.             reponse.getActive = reactor.getActive()
  90.             reponse.getNumberOfControlRods = reactor.getNumberOfControlRods()
  91.             reponse.getEnergyStored = reactor.getEnergyStored()
  92.             if reactor.getEnergyCapacity ~= nil then
  93.                 reponse.getEnergyCapacity = reactor.getEnergyCapacity()
  94.             else
  95.                 reponse.getEnergyCapacity = 10000000
  96.             end
  97.             reponse.getFuelTemperature = reactor.getFuelTemperature()
  98.             reponse.getCasingTemperature = reactor.getCasingTemperature()
  99.             reponse.getFuelAmount = reactor.getFuelAmount()
  100.             reponse.getWasteAmount = reactor.getWasteAmount()
  101.             reponse.getFuelAmountMax = reactor.getFuelAmountMax()
  102.             reponse.getEnergyProducedLastTick = reactor.getEnergyProducedLastTick()
  103.             reponse.getHotFluidAmount = reactor.getHotFluidAmount()
  104.             reponse.getHotFluidAmountMax = reactor.getHotFluidAmountMax()
  105.             reponse.getHotFluidProducedLastTick = reactor.getHotFluidProducedLastTick()
  106.             reponse.getCoolantType = reactor.getCoolantType()
  107.             reponse.getCoolantAmount = reactor.getCoolantAmount()
  108.             reponse.getFuelReactivity = reactor.getFuelReactivity()
  109.             reponse.getFuelConsumedLastTick = reactor.getFuelConsumedLastTick()
  110.             reponse.isActivelyCooled = reactor.isActivelyCooled()
  111.             reponse.getMinimumCoordinate = reactor.getMinimumCoordinate()
  112.             reponse.getMaximumCoordinate = reactor.getMaximumCoordinate()
  113.             reponse.autoStart = autoStart
  114.                
  115.             for i = 0, reponse.getNumberOfControlRods-1 do
  116.                 reponse[i] = reactor.getControlRodLevel(i)
  117.             end
  118.             for i = 0, reponse.getNumberOfControlRods-1 do
  119.                 reponse[reponse.getNumberOfControlRods + i] = reactor.getControlRodName(i)
  120.             end
  121.         end
  122.     elseif (msg == "getActive") then -- Is Reactor Active ?
  123.         reponse = reactor.getActive()
  124.     elseif (msg == "doEjectWaste") then -- Do Eject Waste
  125.         reactor.doEjectWaste()
  126.     elseif (msg == "doEjectFuel") then -- Do Eject Fuel
  127.         reactor.doEjectFuel()
  128.     elseif msg ~= nil then
  129.         local command = split(msg, "%s", 3)
  130.         if (command[1] == "setAutoStart") then -- Set AutoStart (true/false)
  131.             if (command[2] == "true") then
  132.                 autoStart = true
  133.             else
  134.                 autoStart = false
  135.             end
  136.         elseif (command[1] == "getControlRodName") then -- Get Control Rod Name (rod id)
  137.             reponse = reactor.getControlRodName(tonumber(command[2]))
  138.         elseif (command[1] == "getControlRodLevel") then -- GetControlRodLevel (rod id)
  139.             reponse = reactor.getControlRodLevel(tonumber(command[2]))
  140.         elseif (command[1] == "setActive") then -- Set Active (true/false)
  141.             local cmd = false
  142.             if (command[2] == "true") then
  143.                 cmd = true
  144.             end
  145.             reactor.setActive(cmd)
  146.         elseif (command[1] == "setAllControlRodLevels") then -- Set All Control Rod Levels (level)
  147.             level = tonumber(command[2])
  148.             if level < 0 then level = 0 end
  149.             if level > 100 then level = 100 end
  150.             reactor.setAllControlRodLevels(level)
  151.         elseif (command[1] == "setControlRodLevel") then -- Set Control Rod Level (rod id - level)
  152.             level = tonumber(command[3])
  153.             if level < 0 then level = 0 end
  154.             if level > 100 then level = 100 end
  155.             reactor.setControlRodLevel(tonumber(command[2]), level)
  156.         end
  157.     end
  158.    
  159.     if msg == "getConnected" or msg == "setAutoStart" or msg == "setActive true" or msg == "setActive false" then
  160.     -- if msg ~= nil then
  161.         finalTime = formatTime()
  162.         print(finalTime .. " [CCBRClient] " .. msg .. " from " .. id)
  163.     end
  164.    
  165.     if id ~= nil then
  166.         -- sleep(0)
  167.         rednet.send(id, reponse, "CCBRServeur")
  168.     end
  169. end
  170.  
  171. local function turbineListen()
  172.     id, msg = rednet.receive("CCBTClient", 5)
  173.    
  174.     if (msg == "getConnected") then -- Is the computer connected ?
  175.         reponse = turbine.getConnected()
  176.     elseif (msg == "getAll") then -- Is the computer connected ?
  177.         if turbine.getConnected() then
  178.             -- reponse = {turbine.getConnected(), turbine.getActive(),
  179.                 -- turbine.getEnergyStored(), turbine.getRotorSpeed(), turbine.getInputAmount(), turbine.getInputType(),
  180.                 -- turbine.getOutputAmount(), turbine.getOutputType(), turbine.getFluidAmountMax(), turbine.getFluidFlowRate(),
  181.                 -- turbine.getFluidFlowRateMax(), turbine.getFluidFlowRateMaxMax(), turbine.getEnergyProducedLastTick(), turbine.getNumberOfBlades(),
  182.                 -- turbine.getBladeEfficiency(), turbine.getRotorMass(), turbine.getInductorEngaged(), turbine.getMaximumCoordinate(),
  183.                 -- turbine.getMinimumCoordinate(), autoStart}
  184.             reponse = {}
  185.             reponse.getConnected = turbine.getConnected()
  186.             reponse.getActive = turbine.getActive()
  187.             reponse.getEnergyStored = turbine.getEnergyStored()
  188.             if turbine.getEnergyCapacity ~= nil then
  189.                 reponse.getEnergyCapacity = turbine.getEnergyCapacity()
  190.             else
  191.                 reponse.getEnergyCapacity = 1000000
  192.             end
  193.             reponse.getRotorSpeed = turbine.getRotorSpeed()
  194.             reponse.getInputAmount = turbine.getInputAmount()
  195.             reponse.getInputType = turbine.getInputType()
  196.             reponse.getOutputAmount = turbine.getOutputAmount()
  197.             reponse.getOutputType = turbine.getOutputType()
  198.             reponse.getFluidAmountMax = turbine.getFluidAmountMax()
  199.             reponse.getFluidFlowRate = turbine.getFluidFlowRate()
  200.             reponse.getFluidFlowRateMax = turbine.getFluidFlowRateMax()
  201.             reponse.getFluidFlowRateMaxMax = turbine.getFluidFlowRateMaxMax()
  202.             reponse.getEnergyProducedLastTick = turbine.getEnergyProducedLastTick()
  203.             reponse.getNumberOfBlades = turbine.getNumberOfBlades()
  204.             reponse.getBladeEfficiency = turbine.getBladeEfficiency()
  205.             reponse.getRotorMass = turbine.getRotorMass()
  206.             reponse.getInductorEngaged = turbine.getInductorEngaged()
  207.             reponse.getMaximumCoordinate = turbine.getMaximumCoordinate()
  208.             reponse.getMinimumCoordinate = turbine.getMinimumCoordinate()
  209.             reponse.autoStart = autoStart
  210.         end
  211.     elseif (msg == "getActive") then -- Is Reactor Active ?
  212.         reponse = turbine.getActive()
  213.     elseif (msg == "setVentNone") then -- Set Vent None
  214.         turbine.setVentNone()
  215.     elseif (msg == "setVentOverflow") then -- Set Vent Overflow
  216.         turbine.setVentOverflow()
  217.     elseif (msg == "setVentAll") then -- Set Vent All
  218.         turbine.setVentAll()
  219.     elseif msg ~= nil then
  220.         local command = split(msg, "%s", 3)
  221.         if (command[1] == "setAutoStart") then -- Set AutoStart (true/false)
  222.             if (command[2] == "true") then
  223.                 autoStart = true
  224.             else
  225.                 autoStart = false
  226.             end
  227.         elseif (command[1] == "setActive") then -- Set Active (true/false)
  228.             local cmd = false
  229.             if (command[2] == "true") then
  230.                 cmd = true
  231.             end
  232.             turbine.setActive(cmd)
  233.         elseif (command[1] == "setInductorEngaged") then -- Set Inductor Engaged (true/false)
  234.             local cmd = false
  235.             if (command[2] == "true") then
  236.                 cmd = true
  237.             end
  238.             turbine.setInductorEngaged(cmd)
  239.         elseif (command[1] == "setFluidFlowRateMax") then -- Set Fluid Flow Rate Max (level)
  240.             level = tonumber(command[2])
  241.             if level < 0 then level = 0 end
  242.             if level > 2000 then level = 2000 end
  243.             turbine.setFluidFlowRateMax(level)
  244.         end
  245.     end
  246.    
  247.     if msg == "getConnected" or msg == "setAutoStart" or msg == "setActive true" or msg == "setInductorEngaged false" or msg == "setInductorEngaged true" or msg == "setActive false" then
  248.         finalTime = formatTime()
  249.         print(finalTime .. " [CCBTClient] " .. msg .. " from " .. id)
  250.     end
  251.    
  252.     if id ~= nil then
  253.         rednet.send(id, reponse, "CCBTServeur")
  254.     end
  255. end
  256.  
  257. local function watcher()
  258.     while true do
  259.         finalTime = formatTime()
  260.         if autoStart then
  261.             if isTurbine and isReactor then
  262.                 if turbine.getActive() == true and turbine.getInductorEngaged() == false and turbine.getRotorSpeed() >= 1805 then
  263.                     turbine.setInductorEngaged(true)
  264.                     print(finalTime .. " [AUTO] Inductor engaged")
  265.                 elseif turbine.getActive() == true and turbine.getInductorEngaged() == true and turbine.getRotorSpeed() <= 1795 then
  266.                     turbine.setInductorEngaged(false)
  267.                     print(finalTime .. " [AUTO] Inductor disengaged")
  268.                 end
  269.                
  270.                 if turbine.getActive() == false and turbine.getEnergyStored() <= 150000 then
  271.                     turbine.setActive(true)
  272.                     print(finalTime .. " [AUTO] Turbine enabled")
  273.                 elseif (turbine.getActive() == true or turbine.getInductorEngaged()) and turbine.getEnergyStored() >= 950000 then
  274.                     if turbine.getActive() == true then
  275.                         turbine.setActive(false)
  276.                         print(finalTime .. " [AUTO] Turbine disabled")
  277.                     end
  278.                     if turbine.getInductorEngaged() then
  279.                         turbine.setInductorEngaged(false)
  280.                         print(finalTime .. " [AUTO] Inductor disengaged")
  281.                     end
  282.                 end
  283.                
  284.                 if turbine.getActive() == true and reactor.getActive() == false then
  285.                     reactor.setActive(true)
  286.                     print(finalTime .. " [AUTO] Turbine is active, Reactor enabled.")
  287.                 elseif turbine.getActive() == false and reactor.getActive() == true then
  288.                     reactor.setActive(false)
  289.                     print(finalTime .. " [AUTO] Turbine is inactive, Reactor disabled.")
  290.                 end
  291.             elseif isReactor then
  292.                 if reactor.isActivelyCooled() == false then
  293.                     if reactor.getActive() == false and reactor.getEnergyStored() <= 150000 then
  294.                         reactor.setActive(true)
  295.                         print(finalTime .. " [AUTO] Reactor enabled")
  296.                     elseif reactor.getActive() == true and reactor.getEnergyStored() >= 9000000 then
  297.                         reactor.setActive(false)
  298.                         print(finalTime .. " [AUTO] Reactor disabled")
  299.                     end
  300.                 end
  301.             end
  302.         end
  303.         sleep(1)
  304.     end
  305. end
  306.  
  307. while true do
  308.     if isTurbine and isReactor and isModem then
  309.         parallel.waitForAny(turbineListen, reactorListen, watcher)
  310.     elseif isTurbine and isModem then
  311.         parallel.waitForAny(turbineListen, watcher)
  312.     elseif isReactor and isModem then
  313.         parallel.waitForAny(reactorListen, watcher)
  314.     end
  315.     -- sleep(0)
  316. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement