view src/luan/modules/http/impl/Server.luan @ 1162:e2d2354807f3

minor
author Franklin Schmidt <fschmidt@gmail.com>
date Tue, 06 Feb 2018 21:25:55 -0700
parents 4beabb087be6
children 7e6f28c769a1
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 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 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.impl.LuanHandler"
local NotFound = require "java:luan.modules.http.impl.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 handler = FileHandler.new(dir_path)
	local luan_handler = LuanHandler.new()
	handler = ListHandler.new( luan_handler, handler )
	handler = IndexHandler.new(handler)
	handler = NotFound.new(handler)
	handler = ContentTypeHandler.new(handler)
	handler = SafeHandler.new(handler)
	handler = LogHandler.new(handler)
--	Server.handlers.addHandler(NotFound.new(Server.luan_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