Mercurial Hosting > luan
annotate src/luan/modules/http/Server.luan @ 1176:79b1e9ffd0c0
minor
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Mon, 12 Feb 2018 15:19:00 -0700 |
parents | d6d0bd05ad8c |
children | 49cf706c326a |
rev | line source |
---|---|
743
2c41f2aec92f
improve Rpc and implement rpc call for local webserver
Franklin Schmidt <fschmidt@gmail.com>
parents:
712
diff
changeset
|
1 local Luan = require "luan:Luan.luan" |
2c41f2aec92f
improve Rpc and implement rpc call for local webserver
Franklin Schmidt <fschmidt@gmail.com>
parents:
712
diff
changeset
|
2 local error = Luan.error |
693
ca169567ce07
module URIs must now include ".luan"
Franklin Schmidt <fschmidt@gmail.com>
parents:
629
diff
changeset
|
3 local String = require "luan:String.luan" |
743
2c41f2aec92f
improve Rpc and implement rpc call for local webserver
Franklin Schmidt <fschmidt@gmail.com>
parents:
712
diff
changeset
|
4 local gsub = String.gsub or error() |
1162 | 5 local match = String.match or error() |
743
2c41f2aec92f
improve Rpc and implement rpc call for local webserver
Franklin Schmidt <fschmidt@gmail.com>
parents:
712
diff
changeset
|
6 local matches = String.matches or error() |
1175
d6d0bd05ad8c
exit on bind conflict, serve "127.0.0.1" for serve_for_nginx
Franklin Schmidt <fschmidt@gmail.com>
parents:
1173
diff
changeset
|
7 local try = Luan.try or error() |
693
ca169567ce07
module URIs must now include ".luan"
Franklin Schmidt <fschmidt@gmail.com>
parents:
629
diff
changeset
|
8 local Io = require "luan:Io.luan" |
ca169567ce07
module URIs must now include ".luan"
Franklin Schmidt <fschmidt@gmail.com>
parents:
629
diff
changeset
|
9 local Package = require "luan:Package.luan" |
743
2c41f2aec92f
improve Rpc and implement rpc call for local webserver
Franklin Schmidt <fschmidt@gmail.com>
parents:
712
diff
changeset
|
10 local Rpc = require "luan:Rpc.luan" |
2c41f2aec92f
improve Rpc and implement rpc call for local webserver
Franklin Schmidt <fschmidt@gmail.com>
parents:
712
diff
changeset
|
11 local Thread = require "luan:Thread.luan" |
1167 | 12 local Http = require "luan:http/Http.luan" |
693
ca169567ce07
module URIs must now include ".luan"
Franklin Schmidt <fschmidt@gmail.com>
parents:
629
diff
changeset
|
13 require "luan:logging/init.luan" -- initialize logging |
743
2c41f2aec92f
improve Rpc and implement rpc call for local webserver
Franklin Schmidt <fschmidt@gmail.com>
parents:
712
diff
changeset
|
14 local Logging = require "luan:logging/Logging.luan" |
2c41f2aec92f
improve Rpc and implement rpc call for local webserver
Franklin Schmidt <fschmidt@gmail.com>
parents:
712
diff
changeset
|
15 local logger = Logging.logger "http/Server" |
174
609c5b3118db
add Web_server.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
16 |
321
7f7708e8fdd4
remove import statement
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
320
diff
changeset
|
17 java() |
1160 | 18 local JavaServer = require "java:luan.webserver.Server" |
19 local FileHandler = require "java:luan.webserver.handlers.FileHandler" | |
1167 | 20 local DirHandler = require "java:luan.webserver.handlers.DirHandler" |
1160 | 21 local IndexHandler = require "java:luan.webserver.handlers.IndexHandler" |
22 local ContentTypeHandler = require "java:luan.webserver.handlers.ContentTypeHandler" | |
23 local SafeHandler = require "java:luan.webserver.handlers.SafeHandler" | |
24 local LogHandler = require "java:luan.webserver.handlers.LogHandler" | |
25 local ListHandler = require "java:luan.webserver.handlers.ListHandler" | |
1171 | 26 local LuanHandler = require "java:luan.modules.http.LuanHandler" |
27 local NotFound = require "java:luan.modules.http.NotFound" | |
1175
d6d0bd05ad8c
exit on bind conflict, serve "127.0.0.1" for serve_for_nginx
Franklin Schmidt <fschmidt@gmail.com>
parents:
1173
diff
changeset
|
28 local System = require "java:java.lang.System" |
1160 | 29 |
174
609c5b3118db
add Web_server.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
30 |
1088
bae2d0c2576c
change module naming convention
Franklin Schmidt <fschmidt@gmail.com>
parents:
1080
diff
changeset
|
31 local Server = {} |
174
609c5b3118db
add Web_server.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
32 |
1088
bae2d0c2576c
change module naming convention
Franklin Schmidt <fschmidt@gmail.com>
parents:
1080
diff
changeset
|
33 Server.port = 8080 |
174
609c5b3118db
add Web_server.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
34 |
1172 | 35 local function init_dir(dir) |
1162 | 36 local dir_uri, dir_path |
37 if matches(dir,":") then | |
38 dir_uri = dir | |
39 dir_path = match(dir,"^file:(.*)$") or error "server dir must be scheme 'file:'" | |
40 else | |
41 dir_path = dir | |
42 dir_uri = "file:"..dir | |
43 end | |
44 dir_uri = gsub(dir_uri,"/$","") -- remove trailing '/' if any | |
1167 | 45 Http.dir = dir_uri |
693
ca169567ce07
module URIs must now include ".luan"
Franklin Schmidt <fschmidt@gmail.com>
parents:
629
diff
changeset
|
46 function Io.schemes.site(path) |
1162 | 47 return Io.uri( dir_uri..path ) |
264
9e0d4452e649
implement URL style module names
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
260
diff
changeset
|
48 end |
1172 | 49 return dir_path |
50 end | |
51 | |
1175
d6d0bd05ad8c
exit on bind conflict, serve "127.0.0.1" for serve_for_nginx
Franklin Schmidt <fschmidt@gmail.com>
parents:
1173
diff
changeset
|
52 local function start() |
d6d0bd05ad8c
exit on bind conflict, serve "127.0.0.1" for serve_for_nginx
Franklin Schmidt <fschmidt@gmail.com>
parents:
1173
diff
changeset
|
53 try { |
d6d0bd05ad8c
exit on bind conflict, serve "127.0.0.1" for serve_for_nginx
Franklin Schmidt <fschmidt@gmail.com>
parents:
1173
diff
changeset
|
54 function() |
d6d0bd05ad8c
exit on bind conflict, serve "127.0.0.1" for serve_for_nginx
Franklin Schmidt <fschmidt@gmail.com>
parents:
1173
diff
changeset
|
55 LuanHandler.start(Server.server) |
d6d0bd05ad8c
exit on bind conflict, serve "127.0.0.1" for serve_for_nginx
Franklin Schmidt <fschmidt@gmail.com>
parents:
1173
diff
changeset
|
56 end |
d6d0bd05ad8c
exit on bind conflict, serve "127.0.0.1" for serve_for_nginx
Franklin Schmidt <fschmidt@gmail.com>
parents:
1173
diff
changeset
|
57 catch = function(e) |
d6d0bd05ad8c
exit on bind conflict, serve "127.0.0.1" for serve_for_nginx
Franklin Schmidt <fschmidt@gmail.com>
parents:
1173
diff
changeset
|
58 -- e.java.printStackTrace(); |
d6d0bd05ad8c
exit on bind conflict, serve "127.0.0.1" for serve_for_nginx
Franklin Schmidt <fschmidt@gmail.com>
parents:
1173
diff
changeset
|
59 Io.print_to(Io.stderr, e ) |
d6d0bd05ad8c
exit on bind conflict, serve "127.0.0.1" for serve_for_nginx
Franklin Schmidt <fschmidt@gmail.com>
parents:
1173
diff
changeset
|
60 System.exit(-1) |
d6d0bd05ad8c
exit on bind conflict, serve "127.0.0.1" for serve_for_nginx
Franklin Schmidt <fschmidt@gmail.com>
parents:
1173
diff
changeset
|
61 end |
d6d0bd05ad8c
exit on bind conflict, serve "127.0.0.1" for serve_for_nginx
Franklin Schmidt <fschmidt@gmail.com>
parents:
1173
diff
changeset
|
62 } |
d6d0bd05ad8c
exit on bind conflict, serve "127.0.0.1" for serve_for_nginx
Franklin Schmidt <fschmidt@gmail.com>
parents:
1173
diff
changeset
|
63 |
1173 | 64 function Rpc.functions.call(domain,fn_name,...) |
65 return Server.luan_handler.call_rpc(fn_name,...) | |
66 end | |
67 Thread.fork(Rpc.serve) | |
68 end | |
69 | |
70 function Server.serve(dir) | |
1172 | 71 local dir_path = init_dir(dir) |
1167 | 72 local file_handler = FileHandler.new(dir_path) |
1168 | 73 local dir_handler = DirHandler.new(file_handler) |
1160 | 74 local luan_handler = LuanHandler.new() |
1167 | 75 local not_found_hander = NotFound.new(luan_handler) |
76 local handler = ListHandler.new( luan_handler, file_handler ) | |
1160 | 77 handler = IndexHandler.new(handler) |
1173 | 78 handler = ListHandler.new( handler, not_found_hander, dir_handler ) |
1160 | 79 handler = ContentTypeHandler.new(handler) |
80 handler = SafeHandler.new(handler) | |
81 handler = LogHandler.new(handler) | |
1175
d6d0bd05ad8c
exit on bind conflict, serve "127.0.0.1" for serve_for_nginx
Franklin Schmidt <fschmidt@gmail.com>
parents:
1173
diff
changeset
|
82 Server.server = JavaServer.new(Server.port,handler) |
d6d0bd05ad8c
exit on bind conflict, serve "127.0.0.1" for serve_for_nginx
Franklin Schmidt <fschmidt@gmail.com>
parents:
1173
diff
changeset
|
83 start() |
174
609c5b3118db
add Web_server.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
84 end |
503 | 85 |
1172 | 86 function Server.serve_for_nginx(dir) |
87 init_dir(dir) | |
88 local luan_handler = LuanHandler.new() | |
89 local not_found_hander = NotFound.new(luan_handler) | |
90 local handler = luan_handler | |
91 handler = IndexHandler.new(handler) | |
92 handler = ListHandler.new( handler, not_found_hander ) | |
93 handler = ContentTypeHandler.new(handler) | |
94 handler = SafeHandler.new(handler) | |
95 handler = LogHandler.new(handler) | |
1176 | 96 Server.server = JavaServer.ForAddress.new("127.0.0.1",Server.port,handler) |
1175
d6d0bd05ad8c
exit on bind conflict, serve "127.0.0.1" for serve_for_nginx
Franklin Schmidt <fschmidt@gmail.com>
parents:
1173
diff
changeset
|
97 start() |
1172 | 98 end |
99 | |
1088
bae2d0c2576c
change module naming convention
Franklin Schmidt <fschmidt@gmail.com>
parents:
1080
diff
changeset
|
100 return Server |