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.



7
8
9
# File 'lib/px4_log_reader/message_descriptor_cache.rb', line 7

def initialize( filename )
  @cache_filename = filename
end

Instance Attribute Details

#cache_filenameObject (readonly)

Returns the value of attribute cache_filename.



5
6
7
# File 'lib/px4_log_reader/message_descriptor_cache.rb', line 5

def cache_filename
  @cache_filename
end

Instance Method Details

#exist?Boolean

Returns:

  • (Boolean)


11
12
13
# File 'lib/px4_log_reader/message_descriptor_cache.rb', line 11

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

#read_descriptorsObject



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/px4_log_reader/message_descriptor_cache.rb', line 15

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



42
43
44
45
46
47
48
49
50
51
52
# File 'lib/px4_log_reader/message_descriptor_cache.rb', line 42

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