class Cucumber::WireSupport::Connection
def call_remote(request_handler, message, params)
def call_remote(request_handler, message, params) packet = WirePacket.new(message, params) begin send_data_to_socket(packet.to_json) response = fetch_data_from_socket(@config.timeout(message)) response.handle_with(request_handler) rescue Timeout::Error => e backtrace = e.backtrace ; backtrace.shift # because Timeout puts some wierd stuff in there raise Timeout::Error, "Timed out calling wire server with message '#{message}'", backtrace end end
def exception(params)
def exception(params) WireException.new(params, @config.host, @config.port) end
def fetch_data_from_socket(timeout)
def fetch_data_from_socket(timeout) raw_response = if timeout == :never socket.gets else Timeout.timeout(timeout) { socket.gets } end WirePacket.parse(raw_response) end
def initialize(config)
def initialize(config) @config = config end
def send_data_to_socket(data)
def send_data_to_socket(data) Timeout.timeout(@config.timeout) { socket.puts(data) } end
def socket
def socket @socket ||= TCPSocket.new(@config.host, @config.port) rescue Errno::ECONNREFUSED => exception raise(ConnectionError, "Unable to contact the wire server at #{@config.host}:#{@config.port}. Is it up?") end