class Overlook::Csgo::Demo::Parser

Constants

Exception
InvalidDemo

Attributes

descriptors[RW]
parser_config[R]
reader[R]

Public Class Methods

new(io, parser_config) click to toggle source
# File lib/overlook/csgo/demo/parser.rb, line 16
def initialize(io, parser_config)
  @parser_config = parser_config
  @reader  = ByteReader.new(io)
  @header  = nil
  @descriptors = {}
end

Public Instance Methods

emit(event, data = {}) click to toggle source
# File lib/overlook/csgo/demo/parser.rb, line 29
def emit(event, data = {})
  broadcast(event.to_sym, data)
end
parse() click to toggle source
# File lib/overlook/csgo/demo/parser.rb, line 23
def parse
  header
  packets
  done
end

Private Instance Methods

done() click to toggle source
# File lib/overlook/csgo/demo/parser.rb, line 40
def done
  emit(:done)
  true
end
header() click to toggle source
# File lib/overlook/csgo/demo/parser.rb, line 35
def header
  emit(:header,
       Header.from_io(reader).to_hash)
end
packets() click to toggle source
# File lib/overlook/csgo/demo/parser.rb, line 45
def packets
  packet_handler = PacketHandler.new(self, @parser_config)

  loop do
    command = Command.from_io(reader)

    next if command.sync?
    break if command.stop?
    raise "Unknown Command: #{command.type}" if command.unknown?

    if command.packet?
      packet = PacketFactory.from_io(reader)
      packet_handler.handle(packet)
    elsif command.skipable?
      reader.read(reader.signed_int32)
    else
      raise "Unknown Command #{command.type}"
    end
  end
end