Advertisement
albrat

File update server Computercraft

Jul 11th, 2013
265
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 2.65 KB | None | 0 0
  1. --[[  Fileserver - Senders call for a file update on the machine.
  2. -- This machine responds with the files from within the
  3. -- File server folder.
  4.  
  5. --]]
  6.  
  7. -- Local Vars
  8.  
  9. local serverdir = "\\server\\"
  10. local clientdir = "\\client\\"
  11.  
  12.  
  13. -- setup rednet
  14. local sModemSide = nil
  15. for n,sSide in ipairs(rs.getSides()) do
  16.   if peripheral.getType(sSide) == "modem" then
  17.     sModemSide = sSide
  18.     break
  19.   end
  20. end
  21. if sModemSide == nil then
  22.   print("No wireless modem attached")
  23.   return
  24. end
  25. rednet.open(sModemSide)
  26.  
  27. -- end setup rednet
  28.  
  29.  
  30. --     *************
  31. --     * Functions *
  32. --     *************
  33.  
  34. -- Sending file function
  35.  
  36. local function sendFile(filename, computerID, filedir)
  37.     local file = filedir .. filename
  38.     if not fs.exists(file) or fs.isDir(file) then
  39.         print("File can't be sent!")
  40.         print("It is either non existant or is a directory!")
  41.         return false
  42.     end
  43.    
  44.     computerID = tonumber(computerID)
  45.    
  46.     local sr = io.open(file, "r")
  47.     print("Connecting")
  48.    
  49.     while true do
  50.         rednet.send(computerID, "bt.con")
  51.         os.startTimer(1)
  52.         local e,p1,p2,p3 = os.pullEvent()
  53.         if e == "rednet_message" then
  54.             local id,msg = p1,p2
  55.             if msg == "bt.acc" then
  56.                 print("connected!")
  57.                 break
  58.             end
  59.         end
  60.     end
  61.    
  62.     sleep(0.8)
  63.     rednet.send(computerID, "bt.fn:" .. filename)
  64.    
  65.     sleep(0.5)
  66.    
  67.     print("Sending...")
  68.     local data
  69.     while true do
  70.         data = sr.read()
  71.         if data == nil then
  72.             break
  73.         end
  74.         rednet.send(computerID, "bt.file:" .. data)
  75.         sleep(0.1)
  76.     end
  77.     rednet.send(computerID, "bt.done")
  78.     print("File sent!")
  79. end
  80.  
  81.  
  82.  
  83. -- Check if folder exists --
  84. function FolderExists(strFolderName)
  85.     local fileHandle = fs.isDir(strFolderName)
  86.     if fileHandle == false then
  87.         return false
  88.     else
  89.         return true
  90.     end
  91. end
  92.  
  93. -- function get Dir listing
  94. function Dirlist(folder)
  95.     local list = fs.list(folder)
  96. return list
  97. end
  98.  
  99. -- Sending of Programs funct
  100. local args = {}
  101. function Sendprogs( list, directory, cmpId, ... )
  102.   args = ( ... )
  103.   if type(list) ~= "table" then
  104.     return false
  105.   else
  106.     for i = 1,#list do
  107.         err = sendFile(list[i], cmpId)
  108.     end
  109.   end
  110.  
  111. end
  112.  
  113. -- one time grab of the directory on boot up
  114.  
  115.  
  116.  
  117. -- Main program
  118.  
  119. while true do
  120.     id,msg = "",""
  121.     id, msg = rednet.receive(0.8)
  122.     if msg == "update_client" then
  123.         list = Dirlist(clientdir)
  124.         print("Client update starting")
  125.         for i = 1,#list do
  126.             sendFile(list[i], id, clientdir)
  127.         end
  128.     elseif msg == "update_server" then
  129.         list = Dirlist(serverdir)
  130.         print("Server update starting")
  131.         for i = 1,#list do
  132.             sendFile(list[i], id, serverdir)
  133.         end
  134.  
  135.     end
  136.     rednet.send(id, "bt.eol")
  137. end
  138. --[[
  139.    
  140.     err = Sendprogs( list, filedir, cmpId )
  141.  
  142. --]]
  143. -- EOF.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement