def process_cmd(line)
@logger.debug { "*** processing #{line}" } if @logger
reply_type = line[0, 1]
reply_args = line.slice(1..-3)
case reply_type
when MINUS
@redis_callbacks.shift
@error_callback.call(reply_args)
when PLUS
dispatch_response(reply_args)
when DOLLAR
data_len = Integer(reply_args)
if data_len == -1
dispatch_response(nil)
elsif @buffer.size >= data_len + 2
dispatch_response(@buffer.slice!(0, data_len))
@buffer.slice!(0,2)
else
raise ParserError
end
when COLON
dispatch_response(Integer(reply_args))
when ASTERISK
multibulk_count = Integer(reply_args)
if multibulk_count == -1 || multibulk_count == 0
dispatch_response([])
else
if @multibulk_n
@previous_multibulks << [@multibulk_n, @multibulk_values]
end
@multibulk_n = multibulk_count
@multibulk_values = []
end
else
raise ProtocolError, "reply type not recognized: #{line.strip}"
end
end