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