# encoding: utf-8 require 'eventmachine' require 'fiber' require 'promise' require 'http/parser' require 'time' require 'adamantium' require 'httpkit/version' require 'httpkit/support/handler_manager' require 'httpkit/support/message' require 'httpkit/promise' require 'httpkit/body' require 'httpkit/request' require 'httpkit/response' require 'httpkit/connection/eventmachine' require 'httpkit/connection/status' require 'httpkit/serializer' require 'httpkit/client' require 'httpkit/client/body_handler' require 'httpkit/client/mandatory_handler' require 'httpkit/client/keep_alive_handler' require 'httpkit/client/timeouts_handler' require 'httpkit/server' require 'httpkit/server/body_handler' require 'httpkit/server/mandatory_handler' require 'httpkit/server/keep_alive_handler' require 'httpkit/server/timeouts_handler' require 'httpkit/server/block_handler' module HTTPkit def self.run start do yield stop end end def self.start EM.run do Fiber.new { yield }.resume end end def self.stop EM.stop EM.next_tick {} end def self.sleep(duration) promise = Promise.new EM.add_timer(duration) { promise.fulfill } promise.sync end def self.random_port(address) server = TCPServer.new(address, 0) server.addr[1] ensure server.shutdown if server end def self.server(uri, &block) uri = URI(uri) Server.start(address: uri.host, port: uri.port, handlers: [Server::KeepAliveHandler.new, Server::TimeoutsHandler.new, Server::BlockHandler.new(block)]) end def self.request(*args) uri = URI(args[1]) client = Client.start(address: uri.host, port: uri.port) client.request(*args) end end