Advertisement
willwac

DropX Server

Nov 27th, 2014
257
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 3.04 KB | None | 0 0
  1. local path = "/data/~"
  2. for _, s in pairs(rs.getSides()) do
  3.     if peripheral.isPresent(s) and peripheral.getType(s) == "modem" then
  4.         rednet.open(s)
  5.     end
  6. end
  7. isDebug = ...
  8. function split(str, pattern)
  9.   local tbl = {}
  10.   local fpat = "(.-)"..pattern
  11.   local le = 1
  12.   local s, e, cap = str:find(fpat, 1)
  13.   while s do
  14.     if s ~= 1 or cap ~= "" then
  15.       table.insert(tbl,cap)
  16.     end
  17.     le = e+1
  18.     s, e, cap = str:find(fpat, le)
  19.   end
  20.   if le <= #str then
  21.     cap = str:sub(le)
  22.     table.insert(tbl, cap)
  23.   end
  24.   return tbl
  25. end
  26. term.setBackgroundColor(colors.black)
  27. term.setTextColor(colors.white)
  28. term.setCursorPos(1,1)
  29. term.clear()
  30. print("DropX Server\n")
  31. if not isDebug then
  32.     if shell.openTab then
  33.         shell.openTab("shell")
  34.         print("You can still use the computer!\n")
  35.     end
  36. else
  37.     printError("Debug Mode Enabled!")
  38. end
  39. while true do
  40.     local sender,msg=rednet.receive()
  41.     local sMsg = split(msg,"~!DSX!~")
  42.     if isDebug then
  43.         print(msg)
  44.         --print(sMsg)
  45.     end
  46.     if not fs.exists(path..sender) or not fs.isDir(path..sender) then
  47.         fs.makeDir(path..sender)
  48.         print("Created folder for: "..sender)
  49.     end
  50.     if sMsg[1] == "@put" and sMsg[2] and sMsg[3] then
  51.         file=fs.open(path..sender.."/"..sMsg[2],"w")
  52.         if file then
  53.             file.write(sMsg[3])
  54.             file.close()
  55.             rednet.send(sender,"Saved "..sMsg[2].." to server.")
  56.             print(sender..": saved file: "..sMsg[2])
  57.         else
  58.             printError("Cannot open: "..path..sender)
  59.             rednet.send(sender,"An error occored on the server. Try again later, or contact the owner.")
  60.         end
  61.     elseif sMsg[1] == "@get" and sMsg[2] then
  62.         file = fs.open(path..sMsg[2].."/"..sMsg[3],"r")
  63.         if file then
  64.         rednet.send(sender,file.readAll())
  65.         file.close()
  66.         print(sender..": got file: "..sMsg[3])
  67.         else
  68.         printError("Cannot open: "..path..sender)
  69.         rednet.send(sender,"An error occored on the server. Try again later, or contact the owner.")
  70.         end
  71.     elseif sMsg[1] == "@list" then
  72.         if sMsg[2] then
  73.             if not fs.exists(path..sMsg[2]) or not fs.isDir(path..sMsg[2]) then
  74.                 fs.makeDir(path..sMsg[2])
  75.             end
  76.             rednet.send(sender,textutils.serialize(fs.list(path..sMsg[2])))
  77.             print(sender..": retreived files from: "..sMsg[2])
  78.         else
  79.             rednet.send(sender,textutils.serialize(fs.list(path..sender)))
  80.             print(sender..": retreived their files.")
  81.         end
  82.     elseif sMsg[1] == "@delete" then
  83.         if isDebug then print(path..sender.."/"..sMsg[2]) end
  84.         if sMsg[2]:find("../") then rednet.send(sender,"Can't do that!") end
  85.         if fs.exists(path..sender.."/"..sMsg[2]) then
  86.             fs.delete(path..sender.."/"..sMsg[2])
  87.             rednet.send(sender,"Deleted "..sMsg[2])
  88.             print(sender..": deleted "..sMsg[2])
  89.         end
  90.     else
  91.         print(sender..": "..textutils.serialize(sMsg))
  92.     end
  93. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement