Sha256: 18ea6dd13057d3c9533b1ab1392227278e4c3f8ce812dc78b0be56391a4f95aa
Contents?: true
Size: 1.23 KB
Versions: 2
Compression:
Stored size: 1.23 KB
Contents
# encoding: utf-8 module HTTPkit class Server def self.start(config) Connection::EventMachine.start_server(config, self) end include Support::HandlerManager::Setup include Connection::Status attr_reader :config def initialize(config, connection) @sequence = 0 @config = config (@config[:handlers] ||= []).push(MandatoryHandler.new, BodyHandler.new) setup_connection(connection) setup_handlers end def serve(request) served = Promise.new served.then { |response| respond(request, response) } serve!(request, served).resume end def respond(request, response) fiber = Fiber.new do request, response = @handlers.invoke(:respond, request, response) @connection.serialize(response) finish(request) end fiber.resume end def finish(request) @handlers.invoke(:finish, request) end private def setup_connection(connection) @connection = connection @connection.on_message = method(:serve) end def serve!(request, served) Fiber.new do request.sequence(self, @sequence += 1) request, _ = @handlers.invoke(:serve, request, served) end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
httpkit-0.6.0 | lib/httpkit/server.rb |
httpkit-0.6.0.pre.5 | lib/httpkit/server.rb |