Advertisement
Imgoodisher

server

Jul 5th, 2013
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 2.00 KB | None | 0 0
  1. local serverdir = "/servers/"
  2. local notfounddata = [[cPrint("404") cPrint("Page Not Found")]]
  3.  
  4. for i,v in pairs(rs.getSides()) do
  5.     if peripheral.getType(v) == "modem" then
  6.         rednet.open(v)
  7.         break
  8.     end
  9. end
  10.  
  11.  
  12. local function server()
  13.   while true do
  14.     local event = {os.pullEvent()}
  15.     if event[1] == "rednet_message" then
  16.         if event[3] == "firewolf.broadcast.dns.list" then
  17.             for i,v in pairs(fs.list(serverdir)) do
  18.                 if fs.isDir(serverdir..v) then
  19.                     rednet.send(event[2], "firewolf-site:"..v)
  20.                 end
  21.             end
  22.         else
  23.      local url = event[3]
  24.      _GET = {}
  25.             local site, path
  26.      if url:find("?") then
  27.        local getdata
  28.        url, getdata = url:match("(.-)%?(.+)")
  29.        --print(url)
  30.        for key, val in getdata:gmatch("(.-)=([^&]+)") do
  31.          _GET[key] = val
  32.          --print(key.."="..val)
  33.        end
  34.      end
  35.             if url:find("/") then
  36.                 site, path = url:match("(.-)(/.*)")
  37.       if path == "/" then path = "/home" end
  38.             else
  39.                 site, path = url, "/home"
  40.             end
  41.             if fs.exists(serverdir..site) then
  42.                 if fs.exists(serverdir..site..path) then
  43.                     local f = io.open(serverdir..site..path, "r")
  44.                     local data = f:read("*a")
  45.                     f:close()
  46.    
  47.        if data:find("^!SERVER") then
  48.          local func = loadstring(data:sub(8))
  49.          local env = {_GET=_GET}
  50.          for i,v in pairs(_G) do
  51.            if i~="os.pullEventRaw" then
  52.              env[i] = v
  53.            end
  54.          end
  55.          setfenv(func, env)
  56.          if func then
  57.            local ok, d = pcall(func)
  58.            if not ok then print("ERROR: "..d) end
  59.            data = (ok and d) or "cPrint('Server Error 1')"
  60.          else
  61.            data = "cPrint('Server Error 2')"
  62.          end
  63.        end
  64.  
  65.                     rednet.send(event[2], data)
  66.                 else
  67.                     rednet.send(event[2], notfounddata)
  68.                 end
  69.             else
  70.            
  71.             end
  72.         end
  73.     end
  74.   end
  75. end
  76.  
  77. function sh()
  78.   shell.run("rom/programs/shell")
  79. end
  80.  
  81. parallel.waitForAny(sh, server)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement