class Hyla::WebSocket

Public Instance Methods

dispatch(data) click to toggle source
Calls superclass method
# File lib/hyla/websocket.rb, line 8
def dispatch(data)
  parser = Http::Parser.new
  parser << data
  if parser.http_method != 'GET' || parser.upgrade?
    super #pass the request to websocket
  elsif parser.request_path == '/livereload.js'
    _serve_file(_livereload_js_file)
  elsif File.exist?(parser.request_path[1..-1])
    _serve_file(parser.request_path[1..-1]) # Strip leading slash
  else
    send_data("HTTP/1.1 404 Not Found\r\nContent-Type: text/plain\r\nContent-Length: 13\r\n\r\n404 Not Found")
    close_connection_after_writing
  end
end

Private Instance Methods

_content_type(path) click to toggle source
# File lib/hyla/websocket.rb, line 31
def _content_type(path)
  case File.extname(path)
    when '.css' then
      'text/css'
    when '.js' then
      'application/ecmascript'
    when '.gif' then
      'image/gif'
    when '.jpeg', '.jpg' then
      'image/jpeg'
    when '.png' then
      'image/png'
    else
      ; 'text/plain'
  end
end
_livereload_js_file() click to toggle source
# File lib/hyla/websocket.rb, line 48
def _livereload_js_file
  File.expand_path("../../../data/js/livereload.js", __FILE__)
end
_serve_file(path) click to toggle source
# File lib/hyla/websocket.rb, line 25
def _serve_file(path)
  Hyla.logger2.info "Serving file #{path}"
  send_data "HTTP/1.1 200 OK\r\nContent-Type: #{_content_type(path)}\r\nContent-Length: #{File.size path}\r\n\r\n"
  stream_file_data(path).callback { close_connection_after_writing }
end