class Server::Server

Public Class Methods

log(msg) click to toggle source
# File lib/server/server.rb, line 40
def self.log msg
  STDERR.puts msg
end
new(dispatcher) click to toggle source
# File lib/server/server.rb, line 8
def initialize(dispatcher)
  @dispatcher = dispatcher
end

Public Instance Methods

listen(port, host) click to toggle source
# File lib/server/server.rb, line 12
def listen(port, host)
  server = TCPServer.new(host, port)
  Server.log "Server bound to http://#{host}:#{port}"

  loop do
    socket       = server.accept
    request      = Request.new socket
    response     = Response.new request

    next if request.empty?
    Server.log request.inspect

    begin
      @dispatcher.dispatch(request, response)
    rescue Exception => e
      msg = "#{e.backtrace.first}: #{e.message} (#{e.class})", e.backtrace.drop(1).map{|s| "\t#{s}"}
      Server.log msg
      socket.print "HTTP/1.1 200 OK\r\nContent-Type: text/html;charset=utf-8\r\n\r\n"
      socket.print '<html><body><pre style="max-width: 100%; color: red; width: 100%; font-size:20px; white-space: normal;">'

      socket.print msg.join("<br>")
      socket.print '</pre></body></html>'
    end

    socket.close
  end
end