roomconfig.go 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223
  1. package config
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "os"
  6. "bet24.com/log"
  7. coreservice "bet24.com/servers/coreservice/client"
  8. )
  9. const config_key = "baloot_rooms"
  10. const config_key_chip = "baloot_chip_rooms"
  11. const config_key_private = "baloot_private_rooms"
  12. const config_key_ladder = "baloot_ladder_rooms"
  13. const config_key_ladder_private = "baloot_ladder_private_rooms"
  14. const config_key_newuser = "baloot_newuser_room"
  15. type RobotConfig struct {
  16. MinRobotGold int
  17. MaxRobotGold int
  18. RobotOnlineSec int
  19. RobotCount int
  20. MinRoom int
  21. MinRobotNotFirstOutMS int // 非首出最小时间(毫秒)
  22. MaxRobotNotFirstOutMS int // 非首出最大时间(毫秒)
  23. DiminishingNotFirstOutMS int // 非首出递减时间(毫秒)
  24. MinRobotFirstOutMS int // 首出最小时间(毫秒)
  25. MaxRobotFirstOutMS int // 首出最大时间(毫秒)
  26. DiminishingFirstOutMS int // 首出递减时间(毫秒)
  27. RobotEnterRoomTime int
  28. }
  29. type TimerConfig struct {
  30. SecBuy int // 买公牌时间
  31. SecChooseTrump int // 选择花色时间
  32. SecPlay int // 出牌时间
  33. SecCloseOpen int // 开关时间
  34. SecDouble int // 加倍时间
  35. }
  36. type PrivateRoomConfig struct {
  37. TargetOptions []int `json:",omitempty"`
  38. UserCountOptions []int `json:",omitempty"`
  39. EnrollFeeOptions []int `json:",omitempty"`
  40. PlayTimeOptions []int `json:",omitempty"`
  41. IsCorrectionMode bool `json:",omitempty"` // 是否是纠错模式
  42. }
  43. type LadderRoomConfig struct {
  44. AdditionalPercent int `json:",omitempty"`
  45. }
  46. type RoomInfoBase struct {
  47. RoomID int //场次ID, 唯一
  48. RoomName string
  49. RoomDesc string
  50. MinGold int
  51. MaxGold int
  52. BaseScore int
  53. TaxRate int // 税收
  54. ScoreToWin int // 达到多少分才赢
  55. ServerIP string
  56. ServerPort int
  57. IsDual int
  58. ValueDoubling []int
  59. IsDoublingMode bool // 翻倍模式
  60. IsOpenCardLibrary bool // 牌库是否启动,测试用
  61. LevelParam int // 经验加成百分比
  62. MaxSurrenderCount int // 最大解散次数
  63. RoomType int // 房间类型,1.比赛和私人房 2.金币场 3.快速场
  64. LockLevel int // 解锁等级
  65. TimerConfig
  66. PrivateRoomConfig
  67. LadderRoomConfig
  68. }
  69. type RoomInfo struct {
  70. RoomInfoBase
  71. RobotConfig
  72. Test bool
  73. DifferInSun int // Sun或者Ashkal模式下,两队最终得分相差值
  74. DifferInHokum int // Hokum模式下,两队最终得分相差值
  75. MinWinPercent int // 赢牌一方其中一个玩家的最小占比
  76. }
  77. var Rooms struct {
  78. Rooms []RoomInfo
  79. }
  80. var NewUserRoom struct {
  81. RoomInfo
  82. }
  83. func getConfigKey() string {
  84. if Server.IsChipRoom > 0 {
  85. return config_key_chip
  86. }
  87. if Server.IsPrivateRoom > 0 && Server.IsLadderRoom > 0 {
  88. return config_key_ladder_private
  89. }
  90. if Server.IsPrivateRoom > 0 {
  91. return config_key_private
  92. }
  93. if Server.IsLadderRoom > 0 {
  94. return config_key_ladder
  95. }
  96. return config_key
  97. }
  98. func loadRedisConfig() bool {
  99. data := coreservice.GetPlatformConfig(getConfigKey())
  100. if data == "" {
  101. log.Release(" config msg is null")
  102. return false
  103. }
  104. log.Release("%v", data)
  105. return marshalData([]byte(data))
  106. }
  107. func loadRedisNewUserRoomConfig() bool {
  108. data := coreservice.GetPlatformConfig(config_key_newuser)
  109. if data == "" {
  110. log.Release(" config msg is null")
  111. return false
  112. }
  113. log.Release("%v", data)
  114. return marshalNewUserData([]byte(data))
  115. }
  116. func loadNewUserRoomConfig() {
  117. // if loadRedisNewUserRoomConfig() {
  118. // log.Release("using remote config ignored newuserroom.json !!!")
  119. // return
  120. // }
  121. data, err := os.ReadFile("baloot/newuserroom.json")
  122. fmt.Println(string(data))
  123. if err != nil {
  124. log.Release("read rooms failed baloot/newuserroom.json")
  125. return
  126. }
  127. if marshalNewUserData(data) {
  128. // 写入redis
  129. coreservice.SetPlatformConfig(config_key_newuser, string(data))
  130. }
  131. }
  132. func loadRoomConfig() {
  133. // if loadRedisConfig() {
  134. // log.Release("using remote config ignored rooms.json !!!")
  135. // return
  136. // }
  137. // 保存
  138. // 加载房间配置表
  139. data, err := os.ReadFile("baloot/rooms.json")
  140. fmt.Println(string(data))
  141. if err != nil {
  142. log.Release("read rooms failed baloot/rooms.json")
  143. return
  144. }
  145. if marshalData(data) {
  146. // 写入redis
  147. coreservice.SetPlatformConfig(getConfigKey(), string(data))
  148. }
  149. }
  150. func marshalData(data []byte) bool {
  151. err := json.Unmarshal(data, &Rooms)
  152. if err != nil {
  153. log.Release("Unmarshal rooms failed err:%v", err)
  154. return false
  155. }
  156. if len(Rooms.Rooms) <= 0 {
  157. log.Release("Rooms.Rooms == 0")
  158. return false
  159. }
  160. if len(Server.ServerIP) > 0 {
  161. ws := "ws"
  162. if len(Server.CertFile) > 0 {
  163. ws = "wss"
  164. }
  165. for i := 0; i < len(Rooms.Rooms); i++ {
  166. Rooms.Rooms[i].ServerIP = fmt.Sprintf("%s://%s:%d", ws, Server.ServerIP, Server.ServerPort)
  167. }
  168. }
  169. return true
  170. }
  171. func marshalNewUserData(data []byte) bool {
  172. err := json.Unmarshal(data, &NewUserRoom)
  173. if err != nil {
  174. log.Release("Unmarshal rooms failed err:%v", err)
  175. return false
  176. }
  177. if len(Server.ServerIP) > 0 {
  178. ws := "ws"
  179. if len(Server.CertFile) > 0 {
  180. ws = "wss"
  181. }
  182. NewUserRoom.ServerIP = fmt.Sprintf("%s://%s:%d", ws, Server.ServerIP, Server.ServerPort)
  183. }
  184. return true
  185. }
  186. func OnConfigChanged(key string) {
  187. if key != getConfigKey() {
  188. return
  189. }
  190. log.Release("正在刷新配置信息")
  191. loadRedisConfig()
  192. if getConfigKey() == config_key {
  193. loadRedisNewUserRoomConfig()
  194. }
  195. }