def pop(opts = {}, &blk)
ack = opts.delete(:ack)
client.send_frame(
Qrack::Protocol::Basic::Get.new({ :queue => name,
:consumer_tag => name,
:no_ack => !ack,
:nowait => true }.merge(opts))
)
method = client.next_method
if method.is_a?(Qrack::Protocol::Basic::GetEmpty) then
queue_empty = true
elsif !method.is_a?(Qrack::Protocol::Basic::GetOk)
raise Bunny::ProtocolError, "Error getting message from queue #{name}"
end
if !queue_empty
self.delivery_tag = method.delivery_tag if ack
header = client.next_payload
msg = ''
while msg.length < header.size
msg += client.next_payload
end
msg_hash = {:header => header, :payload => msg, :delivery_details => method.arguments}
else
msg_hash = {:header => nil, :payload => :queue_empty, :delivery_details => nil}
end
blk ? blk.call(msg_hash) : msg_hash
end