Advertisement
SuPeRMiNoR3

File_Client

Dec 8th, 2014
217
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 2.10 KB | None | 0 0
  1. fs = require("filesystem")
  2. serial = require("serialization")
  3. string = require("string")
  4. event = require("event")
  5. component = require("component")
  6. dns = require("dns")
  7. modem = component.modem
  8.  
  9. debug = false
  10.  
  11. --May need to split files into sections to get larger files across.
  12.  
  13. function decode(data)
  14. status, result = pcall(serial.unserialize, data)
  15. return status, result
  16. end
  17.  
  18. function encode(data)
  19. return serial.serialize(data)
  20. end
  21.  
  22. function decodeFile(path)
  23. good = false
  24. data = nil
  25. if fs.exists(path) then
  26.  f = fs.open(path)
  27.  data = f:read()
  28.  f:close()
  29.  good = true
  30. end
  31. if good then return data else return false end
  32. end
  33.  
  34. function send(addr, port, data)
  35. addr = addr or server_addr
  36. port = port or 80
  37. modem.send(addr, port, encode(data))
  38. end
  39.  
  40. function broadcast(port, data)
  41. modem.broadcast(port, encode(data))
  42. end
  43.  
  44. function getMessage()
  45.   while true do
  46.     modem.open(81)
  47.     e, localAddress, address, port, distance, message = event.pull(60, "modem_message")
  48.     modem.close(81)
  49.     --print("Got data from server.")
  50.     --print(message)
  51.     return decode(message)
  52.   end
  53. end
  54.  
  55. function getFile(serverpath, path)
  56.   msg = {action="get", data=serverpath}
  57.   print("Requesting file "..serverpath)
  58.   send(server_addr, 80, msg)
  59.   result, msg = getMessage()
  60.  
  61.   if result then
  62.     if msg.action == "get" then
  63.       print("Writing file "..path)
  64.       folder = fs.path(path)
  65.       if fs.exists(folder) == false then
  66.         fs.makeDirectory(folder)
  67.       end
  68.       fd, er = io.open(path, "wb")
  69.       if fd == nil then print(er) end
  70.       fd:write(msg.data)
  71.       fd:close()
  72.     end
  73.   end
  74. end
  75.  
  76. server = "FileServer"
  77. server_addr = false
  78.  
  79. print("File Client Starting...")
  80. print("Trying to resolve "..server)
  81. server_addr = dns.lookup(server)
  82. print("Server address "..server_addr)
  83.  
  84. print("Getting list of files.")
  85. send(server_addr, 80, {action="list"})
  86. result, msg = getMessage()
  87. print("Downloading all files")
  88.  
  89. if result then
  90.   for i, name in pairs(msg["data"]) do
  91.   realname = fs.concat("/dl", name)
  92.   getFile(name, realname)
  93.   os.sleep(1)
  94.   end
  95. end
  96.  
  97. print("Goodbye")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement