SHOW:
|
|
- or go back to the newest paste.
1 | private def start_server(port) | |
2 | - | ws_handler = ->( ws : HTTP::Websocket, ctx : HTTP::Server::Context ) do { |
2 | + | ws_handler = ->( ws : HTTP::Websocket, ctx : HTTP::Server::Context ) do |
3 | loop do | |
4 | select | |
5 | when msg = chan.receive then ws.send msg | |
6 | when timeout 1.second then nil | |
7 | end | |
8 | end | |
9 | - | } |
9 | + | |
10 | ||
11 | server = HTTP::Server.new([ | |
12 | HTTP::ErrorHandler.new, | |
13 | HTTP::LogHandler.new, | |
14 | HTTP::CompressHandler.new, | |
15 | HTTP::WebocketHandler.new(ws_handler), | |
16 | HTTP::StaticFileHandler.new("./output/", directory_listing: false), | |
17 | ]) do |context| | |
18 | if is_html_index_request?(context) | |
19 | context.response.status_code = 301 | |
20 | context.response.headers["Location"] = "#{context.request.path}index.html" | |
21 | puts "\nRedirecting implicit HTML index request..." # TODO colorize | |
22 | else | |
23 | context.response.status_code = 404 | |
24 | STDERR.puts "\nFile not found!" # TODO colorize | |
25 | end | |
26 | end | |
27 | ||
28 | address = server.bind_tcp port | |
29 | puts "Listening on http://#{address}" | |
30 | server.listen | |
31 | end |