package data import ( "f1-game/internal/types" cstring "github.com/cherry-game/cherry/extend/string" clog "github.com/cherry-game/cherry/logger" ) type ( SdkRow struct { SdkID int32 `json:"sdkID"` // sdk配置id CallbackName string `json:"callbackName"` // 支付回调名称路由使用 Salt string `json:"salt"` // !禁止JSON输出 Params map[string]string `json:"params"` // !禁止JSON输出 PIDList []int32 `json:"pidList"` // 平台id列表 PIDRanges types.Map[int32, int32] `json:"pidRanges"` // pid范围 Desc string `json:"desc"` } // 平台sdk参数 sdkConfig struct { pidMaps map[int32]*SdkRow // key:pid, value:SdkRow nameMap map[string]*SdkRow // key:callbackName, value:SdkRow } ) func (p *sdkConfig) Name() string { return "sdk" } func (p *sdkConfig) Init() { p.pidMaps = map[int32]*SdkRow{} p.nameMap = map[string]*SdkRow{} } func (p *sdkConfig) OnLoad(maps any, _ bool) (int, error) { var list []*SdkRow if err := DecodeData(maps, &list); err != nil { return 0, err } var ( loadMaps = map[int32]*SdkRow{} nameMaps = map[string]*SdkRow{} ) for _, row := range list { row.mergePIDRanges() for _, pid := range row.PIDList { if value, found := loadMaps[pid]; found { clog.Errorf("duplicate sdk config. [pid = %,cfg = %v]", pid, value, ) continue } loadMaps[pid] = row nameMaps[row.CallbackName] = row } } p.pidMaps = loadMaps p.nameMap = nameMaps return len(list), nil } func (p *sdkConfig) OnAfterLoad(_ bool) { } func (p *sdkConfig) Get(pid int32) *SdkRow { sdkRow, found := p.pidMaps[pid] if found { return sdkRow } return nil } func (p *sdkConfig) GetWithName(callName string) *SdkRow { if callName == "" { return nil } return p.nameMap[callName] } func (p *SdkRow) AppId() string { return p.Params["appId"] } func (p *SdkRow) AppKey() string { return p.Params["appKey"] } func (p *SdkRow) LoginURL() string { return p.Params["loginUrl"] } func (p *SdkRow) GetString(key string) string { v, found := p.Params[key] if !found { return "" } return v } func (p *SdkRow) GetInt(key string) int { v, found := p.Params[key] if !found { return 0 } intValue, _ := cstring.ToInt(v, 0) return intValue } func (p *SdkRow) mergePIDRanges() { if p.PIDRanges == nil { return } for k, v := range p.PIDRanges { if k < 1 || v < 1 || k >= v { clog.Warnf("pid range error from:%d, end:%d", k, v) continue } for pid := k; pid <= v; pid++ { p.PIDList = append(p.PIDList, pid) } } }