comparison 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
comparison
equal deleted inserted replaced
1170:3a0f58d09ee7 1171:794ddcfbee20
1 return require "luan:http/impl/Server.luan" 1 local Luan = require "luan:Luan.luan"
2 local error = Luan.error
3 local String = require "luan:String.luan"
4 local gsub = String.gsub or error()
5 local match = String.match or error()
6 local matches = String.matches or error()
7 local Io = require "luan:Io.luan"
8 local Package = require "luan:Package.luan"
9 local Rpc = require "luan:Rpc.luan"
10 local Thread = require "luan:Thread.luan"
11 local Http = require "luan:http/Http.luan"
12 require "luan:logging/init.luan" -- initialize logging
13 local Logging = require "luan:logging/Logging.luan"
14 local logger = Logging.logger "http/Server"
15
16 java()
17 local JavaServer = require "java:luan.webserver.Server"
18 local FileHandler = require "java:luan.webserver.handlers.FileHandler"
19 local DirHandler = require "java:luan.webserver.handlers.DirHandler"
20 local IndexHandler = require "java:luan.webserver.handlers.IndexHandler"
21 local ContentTypeHandler = require "java:luan.webserver.handlers.ContentTypeHandler"
22 local SafeHandler = require "java:luan.webserver.handlers.SafeHandler"
23 local LogHandler = require "java:luan.webserver.handlers.LogHandler"
24 local ListHandler = require "java:luan.webserver.handlers.ListHandler"
25 local LuanHandler = require "java:luan.modules.http.LuanHandler"
26 local NotFound = require "java:luan.modules.http.NotFound"
27
28
29 local Server = {}
30
31 Server.port = 8080
32
33 function Server.init(dir)
34 local dir_uri, dir_path
35 if matches(dir,":") then
36 dir_uri = dir
37 dir_path = match(dir,"^file:(.*)$") or error "server dir must be scheme 'file:'"
38 else
39 dir_path = dir
40 dir_uri = "file:"..dir
41 end
42 dir_uri = gsub(dir_uri,"/$","") -- remove trailing '/' if any
43 Http.dir = dir_uri
44 function Io.schemes.site(path)
45 return Io.uri( dir_uri..path )
46 end
47 local file_handler = FileHandler.new(dir_path)
48 local dir_handler = DirHandler.new(file_handler)
49 local luan_handler = LuanHandler.new()
50 local not_found_hander = NotFound.new(luan_handler)
51 local handler = ListHandler.new( luan_handler, file_handler )
52 handler = IndexHandler.new(handler)
53 handler = ListHandler.new( handler, dir_handler, not_found_hander )
54 handler = ContentTypeHandler.new(handler)
55 handler = SafeHandler.new(handler)
56 handler = LogHandler.new(handler)
57 Server.server = JavaServer.new(Server.port,handler)
58 end
59
60 function Server.start()
61 LuanHandler.start(Server.server)
62 end
63
64 function Server.start_rpc()
65 function Rpc.functions.call(domain,fn_name,...)
66 return Server.luan_handler.call_rpc(fn_name,...)
67 end
68
69 Thread.fork(Rpc.serve)
70 end
71
72 function Server.serve(dir)
73 Server.init(dir)
74 Server.start_rpc()
75 Server.start()
76 end
77
78 return Server