class Overlook::Csgo::SharecodeDecoder

Constants

DICTIONARY
DICTIONARY_LENGTH
DecodingError
InvalidShareCode

Attributes

code[R]

Public Class Methods

new(_code) click to toggle source
# File lib/overlook/csgo/sharecode_decoder.rb, line 14
def initialize(_code)
  @code = _code.dup
end

Public Instance Methods

decode() click to toggle source
# File lib/overlook/csgo/sharecode_decoder.rb, line 18
def decode
  sanitize_code!

  reader     = ByteReader.new(io)
  matchid    = reader.read_int64
  outcomeid  = reader.read_int64
  tokenid    = reader.read_short

  { matchid: matchid.to_s, outcomeid: outcomeid.to_s, tokenid: tokenid.to_s }
end

Private Instance Methods

decoded() click to toggle source
# File lib/overlook/csgo/sharecode_decoder.rb, line 35
def decoded
  result = [0] * 18

  @code.chars.reverse.each_with_index do |char, index|
    addval = DICTIONARY.index(char)

    tmp    = [0] * 18

    carry, v = 0, 0
    17.downto(0).each do |t|
      carry = 0
      t.downto(0).each do |s|
        if t - s == 0
          v = tmp[s] + result[t] * 57
        else
          v = 0
        end

        v      = v + carry
        carry  = v >> 8
        tmp[s] = v & 0xFF
      end
    end

    result = tmp

    carry  = 0
    17.downto(0).each do |t|
      if t == 17
        v = result[t] + addval
      else
        v = result[t]
      end

      v         = v + carry
      carry     = v >> 8
      result[t] = v & 0xFF
    end
  end

  result.pack('C*')
end
io() click to toggle source
# File lib/overlook/csgo/sharecode_decoder.rb, line 31
def io
  StringIO.new(decoded)
end
sanitize_code!() click to toggle source
# File lib/overlook/csgo/sharecode_decoder.rb, line 78
def sanitize_code!
  @code.gsub!(/CSGO|\-/, '')
end