# File lib/ts3query/ts3_connection.rb, line 17
    def method_missing(meth, *args, &block)
      buffer  = StringIO.new
      result  = []
      options = ''
      params  = ''

      if block
        query_options = QueryOptions.new
        yield query_options

        query_options.options.each do |opt|
          options += " -#{opt}"
        end
      end

      if args.first
        args.first.each do |key, value|
          params += " #{key}=#{value.is_a?(String) ? Escaping.encode(value) : value}"
        end
      end

      @connection.cmd('String'  => "#{meth}#{params}#{options}\r",
                      'Match'   => /error id=0 msg=ok\n/,
                      'Timeout' => 3) do |data|
        buffer << data
      end

      data = buffer.string
      data.force_encoding 'UTF-8'

      data.split('|').each do |current|
        current_data = {}

        current.split(' ').each do |entity|
          key, value        = entity.split '='
          current_data[key] = value.is_a?(String) ? Escaping.decode(value) : nil
        end

        current_data.delete('error')
        current_data.delete('id')
        current_data.delete('msg')

        result << current_data
      end

      result << {'id' => '0', 'msg' => 'ok'}

      result.delete({})
      result
    end