Class: Px4LogReader::MessageDescriptorCache

Inherits:
Object
  • Object
show all
Defined in:
lib/px4_log_reader/message_descriptor_cache.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(filename) ⇒ MessageDescriptorCache

Returns a new instance of MessageDescriptorCache.



39
40
41
# File 'lib/px4_log_reader/message_descriptor_cache.rb', line 39

def initialize( filename )
  @cache_filename = filename
end

Instance Attribute Details

#cache_filenameObject (readonly)

Returns the value of attribute cache_filename.



37
38
39
# File 'lib/px4_log_reader/message_descriptor_cache.rb', line 37

def cache_filename
  @cache_filename
end

Instance Method Details

#exist?Boolean

Returns:

  • (Boolean)


43
44
45
# File 'lib/px4_log_reader/message_descriptor_cache.rb', line 43

def exist?
  return File.exist?( @cache_filename )
end

#read_descriptorsObject



47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# File 'lib/px4_log_reader/message_descriptor_cache.rb', line 47

def read_descriptors

  message_descriptors = {}

  if File.exist?( cache_filename )
    File.open( cache_filename, 'r' ) do |input|
      begin
        while ( ( data = input.read(4) ) && ( data.length == 4 ) ) do
          descriptor_size = data.unpack('L').first
          descriptor = Marshal.load( input.read( descriptor_size ) )

          message_descriptors[ descriptor.type ] = descriptor
          end
      rescue EOFError => error
        puts "Parsed #{@message_descriptions.size} cached message descriptions"
      rescue StandardError => error
        puts "#{error.class}: #{error.message}"
        puts error.backtrace.join("\n")
      end
    end
  else
    puts "Cache file '#{cache_filename}' not found"
  end

  return message_descriptors
end

#write_descriptors(message_descriptors) ⇒ Object



74
75
76
77
78
79
80
81
82
83
84
# File 'lib/px4_log_reader/message_descriptor_cache.rb', line 74

def write_descriptors( message_descriptors )
  if !@cache_filename.empty? && File.exist?( File.dirname( @cache_filename ) )
    File.open( @cache_filename, 'w+' ) do |output|
      message_descriptors.each do |message_type,descriptor|
        descriptor_data = Marshal.dump( descriptor )
        output.write( [ descriptor_data.size ].pack('L') )
        output.write( descriptor_data )
      end
    end
  end
end