Advertisement
demon012

aeManager

Jun 20th, 2014
326
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 3.11 KB | None | 0 0
  1. local json = (loadfile "json")()
  2.  
  3. MENetwork = {
  4.     mePowerSide = "right",
  5.     controllerAddress = 'http://home.alan-jenkins.com:8080',
  6.     stateAddress = 'http://home.alan-jenkins.com:8080/aestate/json',
  7.     capabilitiesAddress = 'http://home.alan-jenkins.com:8080/caps/json',
  8.     craftingQueueAddress = 'http://home.alan-jenkins.com:8080/crafting/queue',
  9.     craftingQueueClearAddress = 'http://home.alan-jenkins.com:8080/crafting/clear',
  10.     storedItemsUpdateAddress = 'http://home.alan-jenkins.com:8080/stored/update',
  11.     craftingTerm = peripheral.wrap("appeng_me_tilecraftingterminal_0"),
  12.     craftingMon = peripheral.wrap("appeng_me_tilecraftingmonitor_0"),
  13.     MEDrive = peripheral.wrap("me_drive_0"),
  14.     updateInterval = 8,
  15.     updateTimer = ""
  16. }
  17. MENetwork_mt = {__index = MENetwork}
  18. function MENetwork:create()--{{{
  19.     local new_MENetwork = {}
  20.     setmetatable(new_MENetwork, MENetwork_mt)
  21.     return new_MENetwork
  22. end--}}}
  23. function MENetwork:power(state)--{{{
  24.     if type(state) == "string" then
  25.         if state == 'true' then
  26.             state = true
  27.         else
  28.             state = false
  29.         end
  30.     end
  31.     rs.setOutput(self.mePowerSide, state)
  32. end--}}}
  33. function MENetwork:getState(response)--{{{
  34.     aeState = json:decode(response)
  35.     if aeState then
  36.         self:power(aeState.power)
  37.         -- http.request(self.stateAddress)
  38.     else
  39.         self:power(false)
  40.     end
  41. end--}}}
  42. function MENetwork:craftingQueue(response)--{{{
  43.     craft = json:decode(response)
  44.     if craft then
  45.         for item,amount in pairs(craft) do
  46.             req = {['name'] = item, ['qty'] =  amount}
  47.             self.craftingTerm.requestCrafting(req)
  48.         end
  49.         http.get(self.craftingQueueClearAddress)
  50.     end
  51. end--}}}
  52.  
  53. net = MENetwork
  54.  
  55. -- report capabilities of components:
  56. caps = {}
  57. caps['craftingTerm'] = net.craftingTerm.getAdvancedMethodsData()
  58. caps['craftingMon'] = net.craftingMon.getAdvancedMethodsData()
  59. caps['MEDrive'] = net.MEDrive.getAdvancedMethodsData()
  60. capsstring = "json=" .. textutils.urlEncode(json:encode_pretty(caps))
  61. http.request(net.stateAddress)
  62. http.post(net.capabilitiesAddress, capsstring)
  63. http.request(net.craftingQueueAddress)
  64. net.updateTimer = os.startTimer(net.updateInterval)
  65. while true do
  66.     local event, param1, param2, param3 = os.pullEvent()
  67.     print("Received event: " .. event)
  68.  
  69.     if event == 'http_success' then
  70.         local response = param2.readAll()
  71.         param2.close()
  72.         if param1 == net.stateAddress then
  73.             net:getState(response)
  74.             http.request(net.stateAddress)
  75.         elseif param1 == net.craftingQueueAddress then
  76.             net:craftingQueue(response)
  77.             http.request(net.craftingQueueAddress)
  78.         end
  79.     elseif event == "timer" then
  80.         if param1 == net.updateTimer then
  81.             print("Updating stored items")
  82.             stored_items = 'json=' .. textutils.urlEncode(json:encode_pretty(net.craftingTerm.getAvailableItems()))
  83.             http.post(net.storedItemsUpdateAddress, stored_items)
  84.             net.updateTimer = os.startTimer(net.updateInterval)
  85.         end
  86.     end
  87. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement