# File lib/riddle/client.rb, line 220
    def run
      response = Response.new request(:search, @queue)
      
      results = @queue.collect do
        result = {
          :matches         => [],
          :fields          => [],
          :attributes      => {},
          :attribute_names => [],
          :words           => {}
        }

        result[:status] = response.next_int
        case result[:status]
        when Statuses[:warning]
          result[:warning] = response.next
        when Statuses[:error]
          result[:error] = response.next
          next result
        end
        
        result[:fields] = response.next_array

        attributes = response.next_int
        for i in 0...attributes
          attribute_name = response.next
          type           = response.next_int

          result[:attributes][attribute_name] = type
          result[:attribute_names] << attribute_name
        end

        matches   = response.next_int
        is_64_bit = response.next_int
        for i in 0...matches
          doc = is_64_bit > 0 ? response.next_64bit_int : response.next_int
          weight = response.next_int

          result[:matches] << {:doc => doc, :weight => weight, :index => i, :attributes => {}}
          result[:attribute_names].each do |attr|
            result[:matches].last[:attributes][attr] = attribute_from_type(
              result[:attributes][attr], response
            )
          end
        end

        result[:total] = response.next_int.to_i || 0
        result[:total_found] = response.next_int.to_i || 0
        result[:time] = ('%.3f' % (response.next_int / 1000.0)).to_f || 0.0

        words = response.next_int
        for i in 0...words
          word = response.next
          docs = response.next_int
          hits = response.next_int
          result[:words][word] = {:docs => docs, :hits => hits}
        end

        result
      end
      
      @queue.clear
      results
    end