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