sdk.go 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. package data
  2. import (
  3. "f1-game/internal/types"
  4. cstring "github.com/cherry-game/cherry/extend/string"
  5. clog "github.com/cherry-game/cherry/logger"
  6. )
  7. type (
  8. SdkRow struct {
  9. SdkID int32 `json:"sdkID"` // sdk配置id
  10. CallbackName string `json:"callbackName"` // 支付回调名称路由使用
  11. Salt string `json:"salt"` // !禁止JSON输出
  12. Params map[string]string `json:"params"` // !禁止JSON输出
  13. PIDList []int32 `json:"pidList"` // 平台id列表
  14. PIDRanges types.Map[int32, int32] `json:"pidRanges"` // pid范围
  15. Desc string `json:"desc"`
  16. }
  17. // 平台sdk参数
  18. sdkConfig struct {
  19. pidMaps map[int32]*SdkRow // key:pid, value:SdkRow
  20. nameMap map[string]*SdkRow // key:callbackName, value:SdkRow
  21. }
  22. )
  23. func (p *sdkConfig) Name() string {
  24. return "sdk"
  25. }
  26. func (p *sdkConfig) Init() {
  27. p.pidMaps = map[int32]*SdkRow{}
  28. p.nameMap = map[string]*SdkRow{}
  29. }
  30. func (p *sdkConfig) OnLoad(maps any, _ bool) (int, error) {
  31. var list []*SdkRow
  32. if err := DecodeData(maps, &list); err != nil {
  33. return 0, err
  34. }
  35. var (
  36. loadMaps = map[int32]*SdkRow{}
  37. nameMaps = map[string]*SdkRow{}
  38. )
  39. for _, row := range list {
  40. row.mergePIDRanges()
  41. for _, pid := range row.PIDList {
  42. if value, found := loadMaps[pid]; found {
  43. clog.Errorf("duplicate sdk config. [pid = %,cfg = %v]",
  44. pid,
  45. value,
  46. )
  47. continue
  48. }
  49. loadMaps[pid] = row
  50. nameMaps[row.CallbackName] = row
  51. }
  52. }
  53. p.pidMaps = loadMaps
  54. p.nameMap = nameMaps
  55. return len(list), nil
  56. }
  57. func (p *sdkConfig) OnAfterLoad(_ bool) {
  58. }
  59. func (p *sdkConfig) Get(pid int32) *SdkRow {
  60. sdkRow, found := p.pidMaps[pid]
  61. if found {
  62. return sdkRow
  63. }
  64. return nil
  65. }
  66. func (p *sdkConfig) GetWithName(callName string) *SdkRow {
  67. if callName == "" {
  68. return nil
  69. }
  70. return p.nameMap[callName]
  71. }
  72. func (p *SdkRow) AppId() string {
  73. return p.Params["appId"]
  74. }
  75. func (p *SdkRow) AppKey() string {
  76. return p.Params["appKey"]
  77. }
  78. func (p *SdkRow) LoginURL() string {
  79. return p.Params["loginUrl"]
  80. }
  81. func (p *SdkRow) GetString(key string) string {
  82. v, found := p.Params[key]
  83. if !found {
  84. return ""
  85. }
  86. return v
  87. }
  88. func (p *SdkRow) GetInt(key string) int {
  89. v, found := p.Params[key]
  90. if !found {
  91. return 0
  92. }
  93. intValue, _ := cstring.ToInt(v, 0)
  94. return intValue
  95. }
  96. func (p *SdkRow) mergePIDRanges() {
  97. if p.PIDRanges == nil {
  98. return
  99. }
  100. for k, v := range p.PIDRanges {
  101. if k < 1 || v < 1 || k >= v {
  102. clog.Warnf("pid range error from:%d, end:%d", k, v)
  103. continue
  104. }
  105. for pid := k; pid <= v; pid++ {
  106. p.PIDList = append(p.PIDList, pid)
  107. }
  108. }
  109. }