Sha256: 678155ebb1ca40bf8948a177954e340c4f4db45bd15c8a636a3d8ae94a5a1a46
Contents?: true
Size: 1.55 KB
Versions: 1
Compression:
Stored size: 1.55 KB
Contents
# encoding: utf-8 module Hatetepe class Server SERVER = 'Server'.freeze SERVER_VALUE = "hatetepe/#{Hatetepe::VERSION}".freeze DATE = 'Date'.freeze def self.start(config) callback = proc { |connection| new(config, connection) } EM.start_server(config[:address], config[:port], Connection::EventMachine, callback) end include Support::Handlers include Connection::Status attr_reader :config def initialize(config, connection) @config = config setup_connection(connection) setup_handlers notify_handlers(:setup, @config, self, @connection) end def serve(request) served = Promise.new served.then { |response| respond(request, response) } Fiber.new { notify_handlers(:serve, request, served) }.resume end def respond(request, response) fiber = Fiber.new do add_extra_headers(response) respond!(request, response) response.closed { finish(request) } end fiber.resume end def finish(request) notify_handlers(:finish, request) end def close @connection.close end private def add_extra_headers(response) date = Time.now.httpdate response.add_extra_headers(SERVER => SERVER_VALUE, DATE => date) end def respond!(request, response) notify_handlers(:respond, request, response) @connection.serialize(response) end def setup_connection(connection) @connection = connection @connection.parse(method(:serve)) end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
hatetepe-0.6.0.pre.2 | lib/hatetepe/server.rb |