Advertisement
watlok

loader - for others

Jan 30th, 2014
38
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 4.91 KB | None | 0 0
  1. loader = {}
  2.  
  3. loader.url = "http://YOURURL/TOINDEX/"
  4. loader.auto_update = true
  5. loader.update_self = false
  6.  
  7. loader._name = "loader" --remote name of loader if you set update_self to true
  8. loader._ver = "0"
  9. loader._target = "YOURPROJECTORFILETITLE"
  10.  
  11. loader._vtable = {}
  12. loader._ltable = {}
  13.  
  14. function loader.getUrl(action, value)
  15.     local url = loader.url
  16.     if (action ~= nil) then
  17.         url = url .."?"..action
  18.         if (value ~=nil) then
  19.             url = url .."="..value
  20.         end
  21.     end
  22.    
  23.     local response = http.get(url)
  24.     if (response) then
  25.         local cont = response.readAll()
  26.         response.close()
  27.         if (cont ~= nil) then
  28.             return cont
  29.         end
  30.     end
  31.    
  32.     return false
  33. end
  34.  
  35. function loader.getFile(name)
  36.     local content = loader.getUrl("f", name)
  37.     if (content ~= false) then
  38.         local path = shell.resolve(name)
  39.         if fs.exists( path ) then
  40.             fs.delete( path )
  41.         end
  42.  
  43.         local file = fs.open(path, "w" )
  44.         file.write(content)
  45.         file.close()
  46.        
  47.         print("Downloaded "..name)
  48.        
  49.         if (loader.getVer(name) == false) then
  50.             return false
  51.         end
  52.        
  53.         return true
  54.     end
  55.    
  56.     return false
  57. end
  58.  
  59. function loader.getProj(name)
  60.     local content = loader.getUrl("p", name)
  61.     if (fs.isDir(name) == false) then
  62.         fs.makeDir(name)
  63.     end
  64.     if (content ~= false) then
  65.         for file in string.gmatch(content, "[^%s]+") do
  66.             local result = loader.getFile(file)
  67.             if (result == false) then
  68.                 print("ERROR: Failed to get "..file)
  69.                 loader.quit()
  70.             end
  71.         end
  72.  
  73.         return tokes
  74.     end
  75.    
  76.     return false
  77. end
  78.                
  79. function loader.reqVer(name)
  80.     if (loader.auto_update == false) then
  81.         return 0
  82.     end
  83.    
  84.     content = loader.getUrl('v', name)
  85.     if (content ~= false) then
  86.         return tonumber(content)
  87.     end
  88.    
  89.     return false
  90. end
  91.  
  92. function loader.getVer(name)
  93.     local ver = loader.reqVer(name)
  94.     if (ver == false) then
  95.         print("ERROR: version request failed for "..name)
  96.         loader.quit()
  97.     end
  98.    
  99.     local path = shell.resolve(name .. ".ver")
  100.     if fs.exists( path ) then
  101.         fs.delete( path )
  102.     end
  103.  
  104.     local file = fs.open(path, "w" )
  105.     file.write(ver)
  106.     file.close()
  107.    
  108.     loader._vtable[name] = ver
  109.    
  110.     return true
  111. end
  112.  
  113. function loader.newVer(name, ignoreVTable)
  114.     if ((loader._vtable[name] ~= nil) and (ignoreVTable == nil)) then
  115.         return false
  116.     end
  117.    
  118.     local path = shell.resolve(name..".ver")
  119.     if (fs.exists(path) == false) then
  120.         return true
  121.     elseif loader.auto_update == false then
  122.         return false
  123.     else
  124.         local file = fs.open(path, "r")
  125.         local lVer = file.readLine()
  126.         file.close()
  127.         if (lVer ~= nil) then
  128.             lVer = tonumber(lVer)
  129.             rVer = loader.reqVer(name)
  130.             if (lVer >= rVer) then
  131.                 return false
  132.             end
  133.         end
  134.     end
  135.     return true
  136. end
  137.  
  138. function loader.loadProj(name)
  139.     local res = true
  140.     local content = loader.getUrl("p", name)
  141.     print("wat")
  142.     if (fs.isDir(name) == false) then
  143.         fs.makeDir(name)
  144.     end
  145.     if (content ~= false) then
  146.         for file in string.gmatch(content, "[^%s]+") do
  147.             if (loader.loadFile(file) == false) then
  148.                 res = false
  149.             end
  150.         end
  151.     else
  152.         res = false
  153.     end
  154.    
  155.     return res
  156. end
  157.  
  158. function loader.loadFile(name)
  159.     if (loader.newVer(name)) then
  160.         print("Found update for "..name)
  161.         if (loader.getFile(name) == true) then
  162.             local ver = loader.getVer(name)
  163.             if (ver == false) then
  164.                 print("ERROR: getVer failed for "..name)
  165.                 loader.quit()
  166.             end
  167.         else
  168.             print("ERROR: getFile failed for "..name)
  169.             loader.quit()
  170.         end
  171.     end
  172.    
  173.     loader._ltable[name] = true
  174.     dofile(name)
  175.     print("Loaded "..name)
  176. end
  177.    
  178. function loader.load(...)
  179.     local args = { ... }
  180.    
  181.     if #args == 1 then
  182.         if (type(args[1]) == "table") then
  183.             args = args[1]
  184.         end
  185.     end
  186.    
  187.     if #args >= 1 then
  188.         for i,file in pairs(args) do
  189.             if (loader._ltable[file] == nil) then
  190.                 if (loader.loadFile(file) == false) then
  191.                     print("ERROR: failed to getFile "..file)
  192.                     loader.quit()
  193.                 end
  194.             end
  195.         end
  196.     end
  197. end
  198.  
  199. function loader.quit()
  200.     print("Aborting program.")
  201.     os.sleep(3)
  202.     shell.exit()
  203. end
  204.  
  205. function loader.restart()
  206.     print("Rebooting!")
  207.     os.sleep(1)
  208.     os.reboot()
  209. end
  210.  
  211. function req(...)
  212.     local args = { ... }
  213.     loader.load(...)
  214. end
  215.  
  216. --Check dependencies
  217.  
  218. print("Watt framework loader v"..loader._ver.." starting...")
  219. if http == nil then
  220.     print("ERROR: http api not enabled on this server")
  221.     loader.quit()
  222. end
  223.  
  224. if (os.getComputerLabel() == nil) then
  225.     os.setComputerLabel(loader._target)
  226. end
  227.  
  228. if (loader.update_self == true) then
  229.     if (loader.newVer(loader._name) == true) then
  230.         print("New loader version found, upgrading")
  231.         if (loader.getFile(loader._name) == false) then
  232.             print("Failed to get new version")
  233.             loader.restart()
  234.         end
  235.         fs.delete("startup")
  236.         fs.copy(loader._name, "startup")
  237.         loader.restart()
  238.     end
  239. end
  240.  
  241. if (loader.loadProj(loader._target) == false) then
  242.     if (loader.loadFile(loader._target) == false) then
  243.         print("loadProj and loadFile failed for "..loader._target)
  244.     end
  245. end
  246.  
  247. if (start ~= nil) then
  248.     start()
  249. else
  250.     print("ERROR: No start function found.")
  251.     loader.quit()
  252. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement