Mercurial Hosting > luan
annotate src/luan/modules/http/Server.luan @ 1806:3b7a8f1cc887 default tip
update discord
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Thu, 09 May 2024 20:39:53 -0600 |
parents | d3ea0380dfb6 |
children |
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" |
1716 | 4 local regex = String.regex or error() |
5 local contains = String.contains or error() | |
693
ca169567ce07
module URIs must now include ".luan"
Franklin Schmidt <fschmidt@gmail.com>
parents:
629
diff
changeset
|
6 local Io = require "luan:Io.luan" |
1315 | 7 local uri = Io.uri or error() |
693
ca169567ce07
module URIs must now include ".luan"
Franklin Schmidt <fschmidt@gmail.com>
parents:
629
diff
changeset
|
8 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
|
9 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
|
10 local Thread = require "luan:Thread.luan" |
1167 | 11 local Http = require "luan:http/Http.luan" |
743
2c41f2aec92f
improve Rpc and implement rpc call for local webserver
Franklin Schmidt <fschmidt@gmail.com>
parents:
712
diff
changeset
|
12 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
|
13 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
|
14 |
1353
8d95711f6615
replace java() with require "java"
Franklin Schmidt <fschmidt@gmail.com>
parents:
1347
diff
changeset
|
15 require "java" |
1402
27efb1fcbcb5
move luan.lib to goodjava
Franklin Schmidt <fschmidt@gmail.com>
parents:
1358
diff
changeset
|
16 local JavaServer = require "java:goodjava.webserver.Server" |
27efb1fcbcb5
move luan.lib to goodjava
Franklin Schmidt <fschmidt@gmail.com>
parents:
1358
diff
changeset
|
17 local FileHandler = require "java:goodjava.webserver.handlers.FileHandler" |
27efb1fcbcb5
move luan.lib to goodjava
Franklin Schmidt <fschmidt@gmail.com>
parents:
1358
diff
changeset
|
18 local DirHandler = require "java:goodjava.webserver.handlers.DirHandler" |
27efb1fcbcb5
move luan.lib to goodjava
Franklin Schmidt <fschmidt@gmail.com>
parents:
1358
diff
changeset
|
19 local IndexHandler = require "java:goodjava.webserver.handlers.IndexHandler" |
27efb1fcbcb5
move luan.lib to goodjava
Franklin Schmidt <fschmidt@gmail.com>
parents:
1358
diff
changeset
|
20 local ContentTypeHandler = require "java:goodjava.webserver.handlers.ContentTypeHandler" |
27efb1fcbcb5
move luan.lib to goodjava
Franklin Schmidt <fschmidt@gmail.com>
parents:
1358
diff
changeset
|
21 local SafeHandler = require "java:goodjava.webserver.handlers.SafeHandler" |
27efb1fcbcb5
move luan.lib to goodjava
Franklin Schmidt <fschmidt@gmail.com>
parents:
1358
diff
changeset
|
22 local LogHandler = require "java:goodjava.webserver.handlers.LogHandler" |
27efb1fcbcb5
move luan.lib to goodjava
Franklin Schmidt <fschmidt@gmail.com>
parents:
1358
diff
changeset
|
23 local ListHandler = require "java:goodjava.webserver.handlers.ListHandler" |
1607 | 24 local HeadersHandler = require "java:goodjava.webserver.handlers.HeadersHandler" |
1171 | 25 local LuanHandler = require "java:luan.modules.http.LuanHandler" |
1175
d6d0bd05ad8c
exit on bind conflict, serve "127.0.0.1" for serve_for_nginx
Franklin Schmidt <fschmidt@gmail.com>
parents:
1173
diff
changeset
|
26 local System = require "java:java.lang.System" |
1358
1d31c1f3ea30
better not_found_handler
Franklin Schmidt <fschmidt@gmail.com>
parents:
1357
diff
changeset
|
27 local NotFound = require "java:luan.modules.http.NotFound" |
1160 | 28 |
174
609c5b3118db
add Web_server.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
29 |
1088
bae2d0c2576c
change module naming convention
Franklin Schmidt <fschmidt@gmail.com>
parents:
1080
diff
changeset
|
30 local Server = {} |
174
609c5b3118db
add Web_server.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
31 |
1184
2eba58842bbb
remove serve_for_nginx
Franklin Schmidt <fschmidt@gmail.com>
parents:
1178
diff
changeset
|
32 function Server.init_dir(dir) |
1716 | 33 if not contains(dir,":") then |
1256
c147e2e877e3
allow subclassing of HttpServicer
Franklin Schmidt <fschmidt@gmail.com>
parents:
1250
diff
changeset
|
34 dir = "file:"..dir |
1162 | 35 end |
1716 | 36 dir = regex("/$").gsub(dir,"") -- remove trailing '/' if any |
1256
c147e2e877e3
allow subclassing of HttpServicer
Franklin Schmidt <fschmidt@gmail.com>
parents:
1250
diff
changeset
|
37 Http.dir = dir |
1414 | 38 Http.is_serving = true |
693
ca169567ce07
module URIs must now include ".luan"
Franklin Schmidt <fschmidt@gmail.com>
parents:
629
diff
changeset
|
39 function Io.schemes.site(path) |
1424 | 40 local u = uri( dir..path ) |
1685 | 41 if u ~= nil then |
42 u.uri_string = "site:"..path | |
43 end | |
1424 | 44 return u |
264
9e0d4452e649
implement URL style module names
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
260
diff
changeset
|
45 end |
1172 | 46 end |
47 | |
1357 | 48 function Server.start(server) |
1520 | 49 try |
50 LuanHandler.start(server) | |
51 catch e | |
52 -- e.java.printStackTrace(); | |
53 Io.print_to(Io.stderr, e ) | |
54 System.exit(-1) | |
55 end | |
1178
49cf706c326a
serve_for_nginx on port 8081
Franklin Schmidt <fschmidt@gmail.com>
parents:
1176
diff
changeset
|
56 end |
1175
d6d0bd05ad8c
exit on bind conflict, serve "127.0.0.1" for serve_for_nginx
Franklin Schmidt <fschmidt@gmail.com>
parents:
1173
diff
changeset
|
57 |
1281 | 58 function Server.start_rpc(luan_handler) |
1173 | 59 function Rpc.functions.call(domain,fn_name,...) |
1281 | 60 return luan_handler.call_rpc(fn_name,...) |
1173 | 61 end |
1780
d3ea0380dfb6
rename Thread.fork to Thread.run
Franklin Schmidt <fschmidt@gmail.com>
parents:
1716
diff
changeset
|
62 Thread.run(Rpc.serve) |
1173 | 63 end |
64 | |
1716 | 65 local file_regex = regex("^file:(.*)$") |
66 | |
1242 | 67 function Server.serve(dir,port) |
68 port = port or 8080 | |
1256
c147e2e877e3
allow subclassing of HttpServicer
Franklin Schmidt <fschmidt@gmail.com>
parents:
1250
diff
changeset
|
69 Server.init_dir(dir) |
1716 | 70 local dir_path = file_regex.match(Http.dir) or error "server dir must be scheme 'file:'" |
1167 | 71 local file_handler = FileHandler.new(dir_path) |
1605
ef9d96aeb541
use FileHandler in WebHandler
Franklin Schmidt <fschmidt@gmail.com>
parents:
1520
diff
changeset
|
72 local luan_handler = LuanHandler.new() |
ef9d96aeb541
use FileHandler in WebHandler
Franklin Schmidt <fschmidt@gmail.com>
parents:
1520
diff
changeset
|
73 local handler = ListHandler.new( luan_handler, file_handler ) |
1607 | 74 handler = ContentTypeHandler.new(handler) |
1605
ef9d96aeb541
use FileHandler in WebHandler
Franklin Schmidt <fschmidt@gmail.com>
parents:
1520
diff
changeset
|
75 handler = IndexHandler.new(handler) |
1168 | 76 local dir_handler = DirHandler.new(file_handler) |
1358
1d31c1f3ea30
better not_found_handler
Franklin Schmidt <fschmidt@gmail.com>
parents:
1357
diff
changeset
|
77 local not_found_hander = NotFound.new(luan_handler) |
1607 | 78 not_found_hander = ContentTypeHandler.new(not_found_hander) |
1358
1d31c1f3ea30
better not_found_handler
Franklin Schmidt <fschmidt@gmail.com>
parents:
1357
diff
changeset
|
79 handler = ListHandler.new( handler, dir_handler, not_found_hander ) |
1607 | 80 handler = HeadersHandler.new(handler) |
1160 | 81 handler = SafeHandler.new(handler) |
82 handler = LogHandler.new(handler) | |
1281 | 83 local server = JavaServer.new(port,handler) |
1357 | 84 Server.start(server) |
1281 | 85 return server, luan_handler |
174
609c5b3118db
add Web_server.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
86 end |
503 | 87 |
1088
bae2d0c2576c
change module naming convention
Franklin Schmidt <fschmidt@gmail.com>
parents:
1080
diff
changeset
|
88 return Server |