Mercurial Hosting > luan
diff src/luan/modules/http/Server.luan @ 1171:794ddcfbee20
remove http/impl
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Sun, 11 Feb 2018 02:41:23 -0700 |
parents | src/luan/modules/http/impl/Server.luan@312e4cadd508 |
children | 1aa6dd74f3fc |
line wrap: on
line diff
--- a/src/luan/modules/http/Server.luan Sun Feb 11 02:34:35 2018 -0700 +++ b/src/luan/modules/http/Server.luan Sun Feb 11 02:41:23 2018 -0700 @@ -1,1 +1,78 @@ -return require "luan:http/impl/Server.luan" +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 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 Server = {} + +Server.port = 8080 + +function Server.init(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 + 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) +end + +function Server.start() + LuanHandler.start(Server.server) +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) + Server.init(dir) + Server.start_rpc() + Server.start() +end + +return Server