Mercurial Hosting > luan
view src/luan/modules/http/Server.luan @ 1191:dada70cb57c1
put dir_handler before not_found_handler
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Sun, 25 Feb 2018 17:17:08 -0700 |
parents | 2eba58842bbb |
children | 7f4a12fb7716 |
line wrap: on
line source
local Luan = require "luan:Luan.luan" local error = Luan.error local String = require "luan:String.luan" local gsub = String.gsub or error() local match = String.match or error() local matches = String.matches or error() local try = Luan.try or error() local Io = require "luan:Io.luan" local Package = require "luan:Package.luan" local Rpc = require "luan:Rpc.luan" local Thread = require "luan:Thread.luan" local Http = require "luan:http/Http.luan" require "luan:logging/init.luan" -- initialize logging local Logging = require "luan:logging/Logging.luan" local logger = Logging.logger "http/Server" java() local JavaServer = require "java:luan.webserver.Server" local FileHandler = require "java:luan.webserver.handlers.FileHandler" local DirHandler = require "java:luan.webserver.handlers.DirHandler" local IndexHandler = require "java:luan.webserver.handlers.IndexHandler" local ContentTypeHandler = require "java:luan.webserver.handlers.ContentTypeHandler" local SafeHandler = require "java:luan.webserver.handlers.SafeHandler" local LogHandler = require "java:luan.webserver.handlers.LogHandler" local ListHandler = require "java:luan.webserver.handlers.ListHandler" local LuanHandler = require "java:luan.modules.http.LuanHandler" local NotFound = require "java:luan.modules.http.NotFound" local System = require "java:java.lang.System" local Server = {} Server.port = 8080 function Server.init_dir(dir) local dir_uri, dir_path if matches(dir,":") then dir_uri = dir dir_path = match(dir,"^file:(.*)$") or error "server dir must be scheme 'file:'" else dir_path = dir dir_uri = "file:"..dir end dir_uri = gsub(dir_uri,"/$","") -- remove trailing '/' if any Http.dir = dir_uri function Io.schemes.site(path) return Io.uri( dir_uri..path ) end return dir_path end function Server.start() try { function() LuanHandler.start(Server.server) end catch = function(e) -- e.java.printStackTrace(); Io.print_to(Io.stderr, e ) System.exit(-1) end } end function Server.start_rpc() function Rpc.functions.call(domain,fn_name,...) return Server.luan_handler.call_rpc(fn_name,...) end Thread.fork(Rpc.serve) end function Server.serve(dir) local dir_path = Server.init_dir(dir) local file_handler = FileHandler.new(dir_path) local dir_handler = DirHandler.new(file_handler) local luan_handler = LuanHandler.new() local not_found_hander = NotFound.new(luan_handler) local handler = ListHandler.new( luan_handler, file_handler ) handler = IndexHandler.new(handler) handler = ListHandler.new( handler, dir_handler, not_found_hander ) handler = ContentTypeHandler.new(handler) handler = SafeHandler.new(handler) handler = LogHandler.new(handler) Server.server = JavaServer.new(Server.port,handler) Server.start() Server.start_rpc() end return Server