broadcast.go 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. package broadcast
  2. import (
  3. "encoding/json"
  4. "sort"
  5. "sync"
  6. "git.jiaxianghudong.com/go/logs"
  7. "git.jiaxianghudong.com/webs/pkg/rds"
  8. "git.jiaxianghudong.com/webs/pkg/xgorm"
  9. )
  10. var BroadcastConf = &Config{}
  11. var SnipeAnchorConf = &SnipeAnchorConfig{}
  12. var KSGDMJYJYConf = &ksgdmjyjy{}
  13. type ksgdmjyjy struct {
  14. Award []awardConf
  15. Codes map[string]string
  16. }
  17. type awardConf struct {
  18. RangeMin int `json:"range_min" yaml:"range_min"` // 区间下限
  19. RangeMax int `json:"range_max" yaml:"range_max"` // 区间上限
  20. Weight int `json:"weight" yaml:"weight"` // 权重
  21. }
  22. type Config struct {
  23. Award [][]int64 `json:"award" yaml:"award"`
  24. MahjongEndGame struct {
  25. Interval int `json:"interval" yaml:"interval"` // 生成间隔
  26. PreGenerate int `json:"pregenerate" yaml:"pregenerate"` // 预生成数量
  27. Token string `json:"token" yaml:"token"` // 接口鉴权 token
  28. Rewards []awardConf `json:"rewards" yaml:"rewards"` // 奖励配置
  29. } `json:"mahjong_endgame" yaml:"mahjong_endgame"` // 麻将残局配置
  30. BattleAwards []awardConf `json:"battle_awards" yaml:"battle_awards"` // 挑战赛兑换码奖励配置
  31. GuangDongMahjong []awardConf `json:"guangdong_mahjong" yaml:"guangdong_mahjong"` // 广东麻将兑换码奖励配置
  32. GuiZhouMahjong []awardConf `json:"guizhou_mahjong" yaml:"guizhou_mahjong"` // 贵州麻将兑换码奖励配置
  33. WL5555 struct {
  34. ActiveName string `json:"active_name" yaml:"active_name"`
  35. ExpireTime string `json:"expire_time" yaml:"expire_time"`
  36. Award [][]int64 `json:"award" yaml:"award"`
  37. } `json:"wl5555" yaml:"wl5555"`
  38. }
  39. // 狙击主播配置
  40. type SnipeAnchorConfig struct {
  41. FailBeans int32 `yaml:"fail_beans"` //狙击失败后赠送的豆豆数
  42. MaxCount int32 `yaml:"max_count"` //狙击最大次数
  43. Anchorlist SnipeAnchorList `yaml:"anchorlist"` //主播列表
  44. Anchors map[int32]*SnipeAnchor // 按key归类的主播
  45. }
  46. type SnipeAnchor struct {
  47. UserID int32 `yaml:"userid"` //主播游戏ID
  48. Sort int32 `yaml:"sort"` //排序,值越小越靠前
  49. Starttime int32 `yaml:"starttime"` //每天开播时间,小时*3600 秒
  50. Endtime int32 `yaml:"endtime"` //每天下播时间, 小时*3600 秒
  51. EndLiveTime int32 // 下播时间戳
  52. Game int32 `yaml:"game"` //默认播的游戏,实际根据主播进入的游戏动态更新
  53. PlayMode string `yaml:"play_mode"` //默认播的游戏玩法,实际根据主播进入的玩法动态更新
  54. Bewin int64 `yaml:"bewin"` //默认可以被褥的豆豆数,实际会根据主播身上的豆豆数更新
  55. Isused int32 `yaml:"isused"` //是否启用,0-不启用,1-启用
  56. IsOnline int32 //是否在线,0-离线,1-在线
  57. }
  58. var (
  59. //BroadcastIdMaps = make(map[int64]bool)
  60. //RecommendMaps = make(map[string][]*BroadcastShower)
  61. syncs sync.Mutex
  62. )
  63. // 手动排序,按sort排序
  64. type SnipeAnchorList []*SnipeAnchor
  65. func (s SnipeAnchorList) Len() int { return len(s) }
  66. func (s SnipeAnchorList) Swap(i, j int) { s[i], s[j] = s[j], s[i] }
  67. func (s SnipeAnchorList) Less(i, j int) bool {
  68. return s[i].Sort < s[j].Sort
  69. }
  70. func Init() {
  71. sort.Sort(SnipeAnchorConf.Anchorlist)
  72. SnipeAnchorConf.Anchors = make(map[int32]*SnipeAnchor)
  73. for _, v := range SnipeAnchorConf.Anchorlist {
  74. SnipeAnchorConf.Anchors[v.UserID] = v
  75. logs.Infof("狙击主播配置:%+v", *v)
  76. }
  77. }
  78. func LoadBroadcastId() map[string][]*BroadcastShower {
  79. recommendMaps := make(map[string][]*BroadcastShower)
  80. valBraodcastIdMap := rds.Redis.Get("broadcast_BroadcastIdMaps").Val()
  81. valRecommendMaps := rds.Redis.Get("broadcast_RecommendMaps").Val()
  82. if valBraodcastIdMap == "" || valRecommendMaps == "" {
  83. syncs.Lock()
  84. xdb := xgorm.NewConn(BroadcastGorm)
  85. var list = make([]*BroadcastShower, 0)
  86. xdb.Table("broadcast_shower").Find(&list)
  87. for i := range list {
  88. _, result := recommendMaps[list[i].GameShortName]
  89. if !result {
  90. recommendMaps[list[i].GameShortName] = make([]*BroadcastShower, 0)
  91. }
  92. recommendMaps[list[i].GameShortName] = append(recommendMaps[list[i].GameShortName], list[i])
  93. }
  94. byte2, _ := json.Marshal(recommendMaps)
  95. rds.Redis.Set("broadcast_RecommendMaps", byte2, -1)
  96. syncs.Unlock()
  97. } else {
  98. json.Unmarshal([]byte(valRecommendMaps), &recommendMaps)
  99. }
  100. return recommendMaps
  101. }