class Overlook::Csgo::Demo::PacketHandler

Determines which handler to use to read a packet and yields that handler along with the message to the block

Attributes

parser[R]

Public Class Methods

new(_parser, parser_config) click to toggle source
# File lib/overlook/csgo/demo/packet_handler.rb, line 16
def initialize(_parser, parser_config)
  @parser = _parser
  @parser_config = parser_config
end

Public Instance Methods

handle(packet) click to toggle source
# File lib/overlook/csgo/demo/packet_handler.rb, line 21
def handle(packet)
  reader = BitReader.new(packet.data)

  loop do
    message_type  = reader.var_int32
    message_size  = reader.var_int32

    handler = handlers[message_type]
    if handler && handle?(handler)
      handler.handle(reader.bytes(message_size))
    else
      reader.skip(message_size)
    end

    break if reader.eof?
  end
end

Private Instance Methods

handle?(handler) click to toggle source
# File lib/overlook/csgo/demo/packet_handler.rb, line 50
def handle?(handler)
  case handler
  when GameEventListMessageHandler, GameEventMessageHandler
    @parser_config.parse_game_events?
  when UserMessageMessageHandler
    @parser_config.parse_user_messages?
  when EncryptedDataHandler
    @parser_config.parse_encrypted_data?
  else
    true
  end
end
handlers() click to toggle source
# File lib/overlook/csgo/demo/packet_handler.rb, line 41
def handlers
  {
    ::Csgo::SVC_Messages::Svc_UserMessage   => UserMessageMessageHandler.new(parser),
    ::Csgo::SVC_Messages::Svc_GameEventList => GameEventListMessageHandler.new(parser),
    ::Csgo::SVC_Messages::Svc_GameEvent     => GameEventMessageHandler.new(parser),
    ::Csgo::SVC_Messages::Svc_EncryptedData => EncryptedDataHandler.new(parser),
  }
end