# File lib/bunny/queue08.rb, line 194
          def pop(opts = {}, &blk)
                        
                        # do we want to have to provide an acknowledgement?
                        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
                                # get delivery tag to use for acknowledge
                                self.delivery_tag = method.delivery_tag if ack
                        
                    header = client.next_payload
        
                    # If maximum frame size is smaller than message payload body then message
                                # will have a message header and several message bodies
                                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
                        
                        # Pass message hash to block or return message hash
                        blk ? blk.call(msg_hash) : msg_hash          
                        
          end