Sha256: a5d5db1c5eb933706ac1301ed26ae52e4f7f62ca6fba1cab32be8b59e3534d1e
Contents?: true
Size: 1.24 KB
Versions: 1
Compression:
Stored size: 1.24 KB
Contents
# encoding: utf-8 module Hatetepe class Server 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) 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 notify_handlers(:respond, request, response) @connection.serialize(response) response.closed { finish(request) } end fiber.resume end def finish(request) notify_handlers(:finish, request) end def close @connection.close end private def setup_connection(connection) @connection = connection @connection.parse(method(:serve)) @connection.closed.then(method(:shutdown)) end def shutdown(_) end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
hatetepe-0.6.0.pre.1 | lib/hatetepe/server.rb |