def next_frame(opts = {})
frame = nil
case
when channel.frame_buffer.size > 0
frame = channel.frame_buffer.shift
when opts.has_key?(:timeout)
Timeout::timeout(opts[:timeout], Qrack::ClientTimeout) do
frame = Qrack::Transport09::Frame.parse(buffer)
end
else
frame = Qrack::Transport09::Frame.parse(buffer)
end
@logger.info("received") { frame } if @logging
raise Bunny::ConnectionError, 'No connection to server' if (frame.nil? and !connecting?)
@message_in = true
case
when frame.is_a?(Qrack::Transport09::Heartbeat)
next_frame(opts)
when frame.nil?
frame
when ((frame.channel != channel.number) and (frame.channel != 0))
channel.frame_buffer << frame
next_frame(opts)
else
frame
end
end