class Overlook::Csgo::Demo::UserMessageMessageHandler

Public Class Methods

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

Public Instance Methods

handle(message) click to toggle source
# File lib/overlook/csgo/demo/user_message_message_handler.rb, line 9
def handle(message)
  user_message = ::Csgo::CSVCMsg_UserMessage.decode(message)

  case user_message.msg_type
  when ::Csgo::ECstrike15UserMessages::CS_UM_XpUpdate
    xp_update_message =  ::Csgo::CCSUsrMsg_XpUpdate.decode(user_message.msg_data)
    community_id = Steam3Id.parse("[U:1:#{xp_update_message.data.account_id}]").to_i

    xp_update = {
      community_id.to_s => {
        xp: xp_update_message.data.current_xp,
        lvl: xp_update_message.data.current_level,
        progress: xp_update_message.data.xp_progress_data.map do |item|
          { category: item.xp_category, xp: item.xp_points }
        end
      }
    }

    @parser.emit(:xp_update, xp_update)
  when ::Csgo::ECstrike15UserMessages::CS_UM_ServerRankUpdate
    server_rank_update_message = ::Csgo::CCSUsrMsg_ServerRankUpdate.decode(user_message.msg_data)

    server_rank_update_message.rank_update.each do |update|
      # The account_id is used in the 'modern' steam format.
      # [U:1:account_id]
      community_id = Steam3Id.parse("[U:1:#{update.account_id}]").to_i

      rank_update_payload = { rank_change: update.rank_change.to_i, wins: update.num_wins,
                              community_id: community_id.to_s, rank: update.rank_new }

      @parser.emit(:rank_update, rank_update_payload)
    end
  end
end