main.go 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  1. package frame
  2. import (
  3. "fmt"
  4. "os"
  5. "strconv"
  6. "time"
  7. "bet24.com/log"
  8. "bet24.com/redis"
  9. "bet24.com/servers/insecureframe"
  10. "bet24.com/servers/insecureframe/gate"
  11. "bet24.com/servers/insecureframe/robot"
  12. micro_common "bet24.com/servers/micros/common"
  13. ladderservice "bet24.com/servers/micros/ladderservice/proto"
  14. privateroom_server "bet24.com/servers/micros/privateroom/game/server"
  15. privateroom "bet24.com/servers/micros/privateroom/proto"
  16. )
  17. var gameFrame *GameFrame
  18. var stopping bool
  19. func RunFrame(gameSink GameSink, redisUrl, redisPsw string, redisDb int) *GameFrame {
  20. return run(gameSink, redisUrl, redisPsw, redisDb, "")
  21. }
  22. func RunFrameWithLogServer(gameSink GameSink, redisUrl, redisPsw string, redisDb int, logPath string) *GameFrame {
  23. return run(gameSink, redisUrl, redisPsw, redisDb, logPath)
  24. }
  25. func run(gameSink GameSink, redisUrl, redisPsw string, redisDb int, logPath string) *GameFrame {
  26. gameFrame = NewGameFrame(gameSink)
  27. insecureframe.Run(gameFrame, redisUrl, redisPsw, redisDb, logPath)
  28. stopping = false
  29. log.Release("frame running")
  30. if gameSink.IsPrivateRoom() {
  31. log.Release("frame running is private room")
  32. go privateroom_server.Run(gameSink.GetGameName(), os.Getpid(), 5500, gameFrame)
  33. privateRoomPing()
  34. }
  35. //go gameFrame.CreateBacTable()
  36. return gameFrame
  37. }
  38. func privateRoomPing() {
  39. if stopping {
  40. return
  41. }
  42. privateroom.UpdateServerOnline(privateroom_server.GetAddr(), gate.GetUserCount())
  43. //privateroom.UpdateServerOnline(privateroom_server.GetAddr(), gate.GetUserCount())
  44. time.AfterFunc(30*time.Second, privateRoomPing)
  45. }
  46. func StopServer() {
  47. stopping = true
  48. gate.StopServer()
  49. if gameFrame.gameSink.IsPrivateRoom() {
  50. privateroom.UnregisterServer(privateroom_server.GetAddr())
  51. }
  52. if gameFrame.IsLadderRoom() {
  53. ladderservice.DeregisterLadderRoom(gameFrame.gameSink.GetServerAddr())
  54. }
  55. }
  56. func GetUserCount(privateData string) int {
  57. return gameFrame.getUserCount(privateData)
  58. }
  59. func GetVirtualUserCount(userCount int, roomType int) int {
  60. return gameFrame.GetVirtualUserCount(userCount, roomType)
  61. }
  62. func UpdateRoomList(roomName, ruleDesc string, gameRule string, roomType int) {
  63. skipRedisInfo := false
  64. if gameFrame.gameSink.IsPrivateRoom() {
  65. privateroom.RegisterGameRule(privateroom_server.GetAddr(),
  66. gameFrame.gameSink.GetGameID(),
  67. gameFrame.gameSink.GetGameName(), roomName, ruleDesc, gameRule)
  68. skipRedisInfo = true
  69. }
  70. gameSink_LadderRoom, ok := gameFrame.gameSink.(GameSink_LadderRoom)
  71. if ok && gameSink_LadderRoom.IsLadderRoom() {
  72. ladderservice.RegisterLadderRoom(gameFrame.gameSink.GetGameID(), roomName, gameRule,
  73. gameSink_LadderRoom.GetBaseScore(roomName),
  74. gameSink_LadderRoom.GetMinGold(roomName),
  75. gameSink_LadderRoom.GetMaxGold(roomName),
  76. gameSink_LadderRoom.GetAdditionalPercent(roomName),
  77. gameFrame.gameSink.GetServerAddr())
  78. skipRedisInfo = true
  79. }
  80. if skipRedisInfo {
  81. return
  82. }
  83. id := gameFrame.gameSink.GetVersionID()
  84. addrKey := fmt.Sprintf("Addr%d", id)
  85. onlineKey := fmt.Sprintf("Online%d", id)
  86. if gameFrame.gameSink.IsChipRoom() {
  87. addrKey = "ChipAddr"
  88. onlineKey = "ChipOnline"
  89. }
  90. gameName := gameFrame.gameSink.GetGameName()
  91. redis.String_SetEx(fmt.Sprintf("%s:%s:%v", gameName, addrKey, roomName), gameRule, 70)
  92. online := fmt.Sprintf("%d", GetVirtualUserCount(GetUserCount(roomName), roomType))
  93. redis.String_SetEx(fmt.Sprintf("%s:%s:%v", gameName, onlineKey, roomName), online, 70)
  94. }
  95. func UpdateRoomOnline(roomName string, roomType int) {
  96. //log.Release("UpdateRoomOnline %s,%d", roomName, roomType)
  97. if gameFrame.gameSink.IsPrivateRoom() {
  98. privateroom.UpdateServerOnline(privateroom_server.GetAddr(), gate.GetUserCount())
  99. //privateroom.UpdateServerOnline(privateroom_server.GetAddr(), gate.GetUserCount())
  100. return
  101. }
  102. onlineKey := "Online"
  103. if gameFrame.gameSink.IsChipRoom() {
  104. onlineKey = "ChipOnline"
  105. }
  106. gameName := gameFrame.gameSink.GetGameName()
  107. online := fmt.Sprintf("%d", GetVirtualUserCount(GetUserCount(roomName), roomType))
  108. redis.String_SetEx(fmt.Sprintf("%s:%s:%v", gameName, onlineKey, roomName), online, 70)
  109. }
  110. func Dump(cmd, param1, param2 string) bool {
  111. switch cmd {
  112. case "frame":
  113. gameFrame.dump()
  114. case "table":
  115. tableId, _ := strconv.Atoi(param1)
  116. gameFrame.dumpTable(tableId)
  117. case "scene":
  118. tableId, _ := strconv.Atoi(param1)
  119. gameFrame.dumpScene(tableId)
  120. case "dismiss":
  121. tableId, _ := strconv.Atoi(param1)
  122. gameFrame.dismissTable(tableId)
  123. case "offline":
  124. gameFrame.dumpOffline()
  125. case "timer":
  126. tableId, _ := strconv.Atoi(param1)
  127. gameFrame.dumpTimers(tableId)
  128. case "user":
  129. log.Debug("----------frame.Dump user ----------")
  130. userId, _ := strconv.Atoi(param1)
  131. usr := gate.GetUserByUserId(userId)
  132. if usr == nil {
  133. log.Debug(" userId %d not exist", userId)
  134. } else {
  135. log.Debug(" %s", usr.DumpUserInfo())
  136. }
  137. log.Debug("++++++++++frame.Dump user ++++++++++")
  138. case "robot":
  139. robot.Dump()
  140. case "messagerecord":
  141. userId, err := strconv.Atoi(param1)
  142. if err != nil {
  143. userId = 0
  144. }
  145. gate.DumpMessageRecord(userId)
  146. case "clearrecord":
  147. userId, err := strconv.Atoi(param1)
  148. if err != nil {
  149. userId = 0
  150. }
  151. gate.ClearMessageRecord(userId)
  152. case "clientpool":
  153. micro_common.DumpClientPools()
  154. default:
  155. return false
  156. }
  157. return true
  158. }