Advertisement
AR2000

OpenComputer cloud_client

Mar 24th, 2017 (edited)
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 4.62 KB | None | 0 0
  1. local fs = require("filesystem")
  2. local component = require("component")
  3. local event = require("event")
  4. local serialization = require("serialization")
  5. local io = require("io")
  6. local term = require("term")
  7. local os = require("os")
  8. local text = require("text")
  9.  
  10. cloud_name = nil
  11. modem = component.modem
  12. i = 0
  13. try = 2
  14. default_timeout = 4
  15. path = "/"
  16. wd=os.getenv("PWD")
  17.  
  18. modem.open(22)
  19.  
  20. function recive()
  21.   message1 = nil
  22.   message2 = nil
  23.   i=0
  24.   repeat
  25.     __,__,__,__,__,message1,message2 = event.pull(default_timeout,"modem_message")
  26.     i = i+1
  27.   until i == 2 or message1 ~= nil
  28.   if message1 == nil then
  29.     return false
  30.   else
  31.     return true
  32.   end
  33. end
  34.  
  35. function find_cloud()
  36.   repeat
  37.     print("Try ".. i+1 .."/"..try)
  38.     __,__,add,port,__,message1,message2 = event.pull(default_timeout,"modem_message")
  39.     i=i+1
  40.   until i==try or add ~= nil
  41.   if add == nil then
  42.     return flase
  43.   elseif message1 == "CLOUD" then
  44.     cloud_name = message2
  45.     return true
  46.   end
  47. end
  48.  
  49. function download_file(d_path,name)
  50.   modem.send(add,port,"!file",d_path)
  51.   if recive() then
  52.     if message1 == "!file" then
  53.       print("Save as :")
  54.       print("1) "..wd..d_path)
  55.       print("2) "..wd.."/"..name)
  56.       while true do
  57.         input = term.read()
  58.         if input == "1\n" then
  59.           if fs.exists(wd..path)==false or fs.isDirectory(wd..path)==false then
  60.             fs.makeDirectory(wd..path)
  61.           end
  62.           f_path = wd..path..name
  63.           break
  64.         elseif input == "2\n" then
  65.           f_path = wd.."/"..name
  66.           break
  67.         end
  68.       end
  69.       file=io.open(f_path,"w")
  70.       file:write(message2)
  71.       file:close()
  72.       term.clear()
  73.       print("CONECTED TO CLOUD "..cloud_name)
  74.       print("Download done")
  75.       print("Saved as "..f_path)
  76.       os.sleep(2)
  77.     elseif message1 == "ERROR" then
  78.       print(message1.." "..message2)
  79.       os.sleep(2)
  80.     else
  81.       print("UKNOWN ERROR")
  82.       os.sleep(2)
  83.     end
  84.   else
  85.     print("ERROR TIMEOUT")
  86.   end
  87. end
  88.  
  89. if find_cloud() then
  90.   while cloud_name ~= nil do
  91.     term.clear()
  92.     print("CONNECTED TO CLOUD "..cloud_name)
  93.     modem.send(add,port,"!ls",path)
  94.    
  95.     if recive() == true and message1 == "!ls" then
  96.       dir = serialization.unserialize(message2)
  97.       for i,v in ipairs(dir) do
  98.         print(v)
  99.       end
  100.       term.write(path)
  101.       input = term.read()
  102.      
  103.       if input == "!exit\n" then
  104.         break
  105.      
  106.       elseif input == "!d\n" then
  107.         print("Quelle fichier télécharger ?")
  108.         input = term.read()
  109.         for i,k in ipairs(dir) do
  110.           if k.."\n" == input then
  111.             download_file(path..k,k)
  112.           end
  113.         end
  114.  
  115.       elseif input == "!u\n" then
  116.         term.write("Adresse du fichier : ")
  117.         input=term.read()
  118.         tmp = text.wrap(input,2,2)
  119.         if tmp == "/" then
  120.         else
  121.           input=wd.."/"..text.trim(input)
  122.         end
  123.         if fs.exists(text.trim(input)) and fs.isDirectory(text.trim(input)) == false then
  124.           term.write("Nom pour la sauvegarde : ")
  125.           name=term.read()
  126.           file=io.open(text.trim(input),"r")
  127.           content=file:read("*a")
  128.           modem.send(add,port,"!upload",path.."/"..text.trim(name),content)
  129.         elseif fs.exists(text.trim(input))==false then
  130.           print("ERROR FILE NOT FOUND")
  131.           os.sleep(2)
  132.         else
  133.           print("ERROR NOT A FILE")
  134.         end
  135.  
  136.       elseif input == "!mk\n" then
  137.         term.write("Nom du dossié : ")
  138.         input = term.read()
  139.         modem.send(add,port,"!mk",path..text.trim(input))
  140.  
  141.       elseif input == "!rm\n" then
  142.         print("ATTENTION L'OPERATION EST IREVERSIBLE")
  143.         print("Laiser vide pour annuler")
  144.         term.write("Nom du fichier/dossier à suprimer : ")
  145.         input = term.read()
  146.         if input ~= "\n" then
  147.           modem.send(add,port,"!rm",path..text.trim(input))
  148.         end
  149.  
  150.       elseif input == "?\n" then
  151.         term.clear()
  152.         print("AIDE")
  153.         print("!d : Télécharger")
  154.         print("!u : Uploader")
  155.         print("!mk : Créer un dossier")
  156.         print("!rm : Suprimer")
  157.         print("!exit : quitter")
  158.         print("APPUILLER SUR UNE TOUCHE POUR CONTINUER")
  159.         event.pull("key_up")
  160.         event.pull("key_down")
  161.  
  162.       else
  163.         for i,k in ipairs(dir) do
  164.           if k.."\n" == input then
  165.             path=path..k
  166.           end
  167.         end
  168.       end
  169.    
  170.     elseif message1 == "CLOUD" then
  171.       modem.send(add,port,"!ls",path)
  172.  
  173.     else
  174.       print("SERVEUR NOT RESPONDING")
  175.       break
  176.     end
  177.   end
  178. else
  179.   print("NO CLOUD FOUND")
  180. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement