Mercurial Hosting > luan
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 |