bacwaterpoolmgr.go 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. package bacwaterpool
  2. import (
  3. "encoding/json"
  4. "os"
  5. "strconv"
  6. "time"
  7. "bet24.com/log"
  8. platformconfig "bet24.com/servers/micros/platformconfig/proto"
  9. pb "bet24.com/servers/micros/waterpool/proto"
  10. )
  11. var mgr *bacWaterPoolMgr
  12. type bacWaterPoolMgr struct {
  13. Pools []*poolInfo
  14. lastConfig string
  15. }
  16. const config_key = "waterpool_config"
  17. const refresh_config_sec = 600
  18. const sync_sec = 5
  19. func newbacWaterPoolMgr() *bacWaterPoolMgr {
  20. ret := new(bacWaterPoolMgr)
  21. ret.readConf()
  22. return ret
  23. }
  24. func (pm *bacWaterPoolMgr) readConf() {
  25. time.AfterFunc(refresh_config_sec*time.Second, pm.readConf)
  26. configString := platformconfig.GetConfig(config_key)
  27. if configString == "" {
  28. data, err := os.ReadFile("serviceconf/waterpool_extra.json")
  29. if err != nil {
  30. log.Release("WaterPool.readConf read waterpool_extra failed")
  31. return
  32. }
  33. configString = string(data)
  34. if configString != "" {
  35. platformconfig.SetConfig(config_key, configString)
  36. }
  37. }
  38. if configString == pm.lastConfig {
  39. return
  40. }
  41. pm.lastConfig = configString
  42. var configs []poolConfig
  43. err := json.Unmarshal([]byte(configString), &configs)
  44. if err != nil {
  45. log.Release("WaterPool.readConf Unmarshal failed err:%v", err)
  46. }
  47. pools := trans_getWaterPoolList(0)
  48. for _, v := range configs {
  49. p := pm.getPool(v.PoolId)
  50. if p == nil {
  51. p = newPoolInfo(v)
  52. for i := 0; i < pools.Count; i++ {
  53. if pools.List[i].GameID == p.GameId && pools.List[i].RoomName == p.PoolName {
  54. p.PoolValue = pools.List[i].InventoryValue
  55. p.lastValue = p.PoolValue
  56. break
  57. }
  58. }
  59. pm.Pools = append(pm.Pools, p)
  60. } else {
  61. // 更新配置
  62. p.poolConfig = v
  63. p.sortLevels()
  64. for i := 0; i < pools.Count; i++ {
  65. if pools.List[i].GameID == p.GameId && pools.List[i].RoomName == p.PoolName {
  66. p.PoolValue = pools.List[i].InventoryValue
  67. p.lastValue = p.PoolValue
  68. break
  69. }
  70. }
  71. }
  72. }
  73. }
  74. func (pm *bacWaterPoolMgr) refreshPoolInfo() {
  75. pools := trans_getWaterPoolList(0)
  76. for _, v := range pm.Pools {
  77. for i := 0; i < pools.Count; i++ {
  78. if pools.List[i].GameID == v.GameId && pools.List[i].RoomName == v.PoolName {
  79. v.PoolValue = pools.List[i].InventoryValue
  80. break
  81. }
  82. }
  83. }
  84. }
  85. func (pm *bacWaterPoolMgr) showPoolInfo(param string) {
  86. if param == "" {
  87. for _, v := range pm.Pools {
  88. v.dump()
  89. }
  90. } else {
  91. id, _ := strconv.Atoi(param)
  92. for _, v := range pm.Pools {
  93. if v.PoolId == id {
  94. v.dump()
  95. }
  96. }
  97. }
  98. }
  99. func (pm *bacWaterPoolMgr) getPool(poolId int) *poolInfo {
  100. for _, v := range pm.Pools {
  101. if v.PoolId == poolId {
  102. return v
  103. }
  104. }
  105. return nil
  106. }
  107. func (pm *bacWaterPoolMgr) addBet(userGold int, betAmount int, isSlots bool, gameId int, poolName string) {
  108. for _, v := range pm.Pools {
  109. v.addBet(betAmount, userGold, isSlots, gameId, poolName)
  110. }
  111. }
  112. func (pm *bacWaterPoolMgr) reducePool(userGold int, amount int, isSlots bool, gameId int, poolName string) {
  113. for _, v := range pm.Pools {
  114. v.reducePool(amount, userGold, isSlots, gameId, poolName)
  115. }
  116. }
  117. func (pm *bacWaterPoolMgr) getControlType(userGold int, isSlots bool, gameId int) int {
  118. for _, v := range pm.Pools {
  119. t := v.getControlType(userGold, isSlots, gameId)
  120. if t != pb.PoolControl_Invalid {
  121. return t
  122. }
  123. }
  124. return pb.PoolControl_Normal
  125. }
  126. func (pm *bacWaterPoolMgr) getControlProb(userGold int, isSlots bool, gameId int, poolName string) (int, int) {
  127. for _, v := range pm.Pools {
  128. if v.isConcerned(userGold, isSlots, gameId) && poolName == v.PoolName {
  129. return v.getControlProb(userGold, isSlots, gameId, poolName)
  130. }
  131. }
  132. return pb.PoolControl_Normal, 0
  133. }
  134. // 修改库存时,修改水池数值
  135. func (pm *bacWaterPoolMgr) updatePool(gameId, waterpoolValue int, poolName string) {
  136. for _, v := range pm.Pools {
  137. if v.GameId == gameId && poolName == v.PoolName {
  138. v.PoolValue = waterpoolValue
  139. break
  140. }
  141. }
  142. }
  143. func (pm *bacWaterPoolMgr) getWaterPoolValue(gameId int, poolName string) int {
  144. for _, v := range pm.Pools {
  145. if v.GameId == gameId && poolName == v.PoolName {
  146. return v.PoolValue
  147. }
  148. }
  149. return 0
  150. }