class Redis::Connection::Hiredis

def self.connect(config)

def self.connect(config)
  connection = ::Hiredis::Connection.new
  if config[:scheme] == "unix"
    connection.connect_unix(config[:path], Integer(config[:timeout] * 1_000_000))
  else
    connection.connect(config[:host], config[:port], Integer(config[:timeout] * 1_000_000))
  end
  instance = new(connection)
  instance.timeout = config[:timeout]
  instance
rescue Errno::ETIMEDOUT
  raise TimeoutError
end

def connected?

def connected?
  @connection && @connection.connected?
end

def disconnect

def disconnect
  @connection.disconnect
  @connection = nil
end

def initialize(connection)

def initialize(connection)
  @connection = connection
end

def read

def read
  reply = @connection.read
  reply = CommandError.new(reply.message) if reply.is_a?(RuntimeError)
  reply
rescue Errno::EAGAIN
  raise TimeoutError
rescue RuntimeError => err
  raise ProtocolError.new(err.message)
end

def timeout=(timeout)

def timeout=(timeout)
  # Hiredis works with microsecond timeouts
  @connection.timeout = Integer(timeout * 1_000_000)
end

def write(command)

def write(command)
  @connection.write(command.flatten(1))
rescue Errno::EAGAIN
  raise TimeoutError
end