code: func (p *Parser) onCSVCMsg_ServerInfo(m *dota.CSVCMsg_ServerInfo) error {
  	// This may be needed to parse PacketEntities.
  	p.classIdSize = uint32(math.Log(float64(m.GetMaxClasses()))/math.Log(2)) + 1
  
  	// Extract the build from the game dir.
  	matches := gameBuildRegexp.FindStringSubmatch(m.GetGameDir())
  	if len(matches) < 2 {
  		return fmt.Errorf("unable to determine game build from '%s'", m.GetGameDir())
  	}
  	build, err := strconv.ParseUint(matches[1], 10, 32)
  	if err != nil {
  		return err
  	}
  	p.GameBuild = uint32(build)
  
  	return nil
  }
docs: // Internal callback for OnCSVCMsg_ServerInfo.