| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161 |
- package battlepass
- import (
- "encoding/json"
- "os"
- "sync"
- "time"
- "bet24.com/log"
- platformconfig "bet24.com/servers/micros/platformconfig/proto"
- )
- const season_config_key = "battlepass_seasons"
- const refresh_config_sec = 3600
- type seasonmanager struct {
- seasons []*BattlePassSeason
- configString string
- lock *sync.RWMutex
- currentSeasonId int
- }
- func newSeasonManager() *seasonmanager {
- ret := new(seasonmanager)
- ret.lock = &sync.RWMutex{}
- ret.readConf()
- return ret
- }
- func (m *seasonmanager) refreshAndChesk() {
- time.AfterFunc(refresh_config_sec*time.Second, m.refreshAndChesk)
- m.readConf()
- m.checkSeason()
- }
- func (m *seasonmanager) checkSeason() {
- seasonId := 0
- s := m.getValidSeason()
- if s != nil {
- seasonId = s.SeasonId
- }
- if m.currentSeasonId == seasonId {
- return
- }
- if seasonId == 0 {
- mgr.seasonEnd()
- } else {
- mgr.seasonStart(seasonId)
- }
- m.currentSeasonId = seasonId
- }
- func (m *seasonmanager) readConf() {
- configString := platformconfig.GetConfig(season_config_key)
- if configString == "" {
- data, err := os.ReadFile("fishconf/battlepass.json")
- if err != nil {
- log.Release("battlepass.seasonmanager.loadData read battlepass failed")
- return
- }
- configString = string(data)
- if configString != "" {
- platformconfig.SetConfig(season_config_key, configString)
- }
- }
- if configString == m.configString {
- return
- }
- m.configString = configString
- m.lock.Lock()
- err := json.Unmarshal([]byte(configString), &m.seasons)
- m.lock.Unlock()
- if err != nil {
- log.Release("battlepass.manager.loadData Unmarshal failed err:%v", err)
- }
- }
- func (m *seasonmanager) getValidSeason() *BattlePassSeason {
- m.lock.RLock()
- defer m.lock.RUnlock()
- for _, v := range m.seasons {
- if v.isValid() {
- return v
- }
- }
- return nil
- }
- func (m *seasonmanager) getMaxExp() int {
- s := m.getValidSeason()
- if s == nil {
- return 0
- }
- return s.MaxExp
- }
- func (m *seasonmanager) getMaxDayExp() int {
- s := m.getValidSeason()
- if s == nil {
- return 0
- }
- return s.MaxDayExp
- }
- func (m *seasonmanager) getGrowthPacks() []GrowthPack {
- var ret []GrowthPack
- s := m.getValidSeason()
- if s == nil {
- return ret
- }
- return s.Packs
- }
- func (m *seasonmanager) getGrowthPack(packId int) *GrowthPack {
- s := m.getValidSeason()
- if s == nil {
- return nil
- }
- for i := 0; i < len(s.Packs); i++ {
- if s.Packs[i].Id == packId {
- return &s.Packs[i]
- }
- }
- return nil
- }
- func (m *seasonmanager) getGrowthPackByProduct(productId string) *GrowthPack {
- s := m.getValidSeason()
- if s == nil {
- return nil
- }
- for i := 0; i < len(s.Packs); i++ {
- if s.Packs[i].ProductId == productId || s.Packs[i].FullProductId == productId {
- return &s.Packs[i]
- }
- }
- return nil
- }
- func (m *seasonmanager) getGrowthTerm(growthPackId, index int) *GrowthTerm {
- pack := m.getGrowthPack(growthPackId)
- if pack == nil {
- return nil
- }
- for _, term := range pack.Terms {
- if term.TermIndex == index {
- return &term
- }
- }
- return nil
- }
|