scansion/serve.lua

changeset 156
807dc9c0f140
parent 137
091212cef52a
child 157
b35dc87ebff0
equal deleted inserted replaced
155:84aa28dda508 156:807dc9c0f140
2 2
3 local server = require "net.server"; 3 local server = require "net.server";
4 local http_server = require "net.http.server"; 4 local http_server = require "net.http.server";
5 local http = require "net.http"; 5 local http = require "net.http";
6 local json = require "util.json"; 6 local json = require "util.json";
7 local time = require "socket".gettime;
7 8
8 function handle_request() 9 function handle_request()
9 return "Hello world"; 10 return "Hello world";
10 end 11 end
11 12
12 local function run(config, run_script) 13 local function run(config, run_script)
13 function handle_run_request(event) 14 function handle_run_request(event)
14 local data = json.decode(event.request.body); 15 local request, response = event.request, event.response;
15 if not data then 16
16 return 400; 17 local function log(type, data)
18 local entry = { type = type, data = data, time = time() };
19 local chunk = json.encode(entry) .. "\r\n";
20 response.conn:write(("%x\r\n%s\r\n"):format(#chunk, chunk));
17 end 21 end
18 22
19 if not data.script then 23 response.status_code = 201;
20 return 400; 24 response.headers.connection = "close";
25 response.headers.transfer_encoding = "chunked";
26 response.conn:send(table.concat(http_server.prepare_header(response)));
27
28 local ok, ret = pcall(run_script, "web", event.request.body, log);
29
30 if not ok then
31 log("error", ret);
21 end 32 end
22 33
23 local ok, ret = pcall(run_script, "web", data.script); 34 response.conn:write("0\r\n\r\n");
35 response:done();
24 36
25 if not ok then 37 return true;
26 return json.encode({ error = true, message = ret });
27 end
28
29 return json.encode(ret);
30 end 38 end
31 39
32 http_server.add_host("localhost"); 40 http_server.add_host("localhost");
33 http_server.set_default_host("localhost"); 41 http_server.set_default_host("localhost");
34 http_server.add_handler("GET localhost/*", handle_request); 42 http_server.add_handler("GET localhost/*", handle_request);
37 verse.log("error", "HTTP error: %s", e.code); 45 verse.log("error", "HTTP error: %s", e.code);
38 end); 46 end);
39 --http_server.add_handler("GET localhost/stream/*", handle_stream_request); 47 --http_server.add_handler("GET localhost/stream/*", handle_stream_request);
40 http_server.listen_on(config.port or 8007); 48 http_server.listen_on(config.port or 8007);
41 verse.log("debug", "Ready") 49 verse.log("debug", "Ready")
42 verse.loop(); 50 repeat until not verse.loop();
43 end 51 end
44 52
45 return { 53 return {
46 run = run; 54 run = run;
47 } 55 }

mercurial