| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178 |
- package frame
- import (
- "fmt"
- "os"
- "strconv"
- "time"
- "bet24.com/log"
- "bet24.com/redis"
- "bet24.com/servers/insecureframe"
- "bet24.com/servers/insecureframe/gate"
- "bet24.com/servers/insecureframe/robot"
- micro_common "bet24.com/servers/micros/common"
- ladderservice "bet24.com/servers/micros/ladderservice/proto"
- privateroom_server "bet24.com/servers/micros/privateroom/game/server"
- privateroom "bet24.com/servers/micros/privateroom/proto"
- )
- var gameFrame *GameFrame
- var stopping bool
- func RunFrame(gameSink GameSink, redisUrl, redisPsw string, redisDb int) *GameFrame {
- return run(gameSink, redisUrl, redisPsw, redisDb, "")
- }
- func RunFrameWithLogServer(gameSink GameSink, redisUrl, redisPsw string, redisDb int, logPath string) *GameFrame {
- return run(gameSink, redisUrl, redisPsw, redisDb, logPath)
- }
- func run(gameSink GameSink, redisUrl, redisPsw string, redisDb int, logPath string) *GameFrame {
- gameFrame = NewGameFrame(gameSink)
- insecureframe.Run(gameFrame, redisUrl, redisPsw, redisDb, logPath)
- stopping = false
- log.Release("frame running")
- if gameSink.IsPrivateRoom() {
- log.Release("frame running is private room")
- go privateroom_server.Run(gameSink.GetGameName(), os.Getpid(), 5500, gameFrame)
- privateRoomPing()
- }
- //go gameFrame.CreateBacTable()
- return gameFrame
- }
- func privateRoomPing() {
- if stopping {
- return
- }
- privateroom.UpdateServerOnline(privateroom_server.GetAddr(), gate.GetUserCount())
- //privateroom.UpdateServerOnline(privateroom_server.GetAddr(), gate.GetUserCount())
- time.AfterFunc(30*time.Second, privateRoomPing)
- }
- func StopServer() {
- stopping = true
- gate.StopServer()
- if gameFrame.gameSink.IsPrivateRoom() {
- privateroom.UnregisterServer(privateroom_server.GetAddr())
- }
- if gameFrame.IsLadderRoom() {
- ladderservice.DeregisterLadderRoom(gameFrame.gameSink.GetServerAddr())
- }
- }
- func GetUserCount(privateData string) int {
- return gameFrame.getUserCount(privateData)
- }
- func GetVirtualUserCount(userCount int, roomType int) int {
- return gameFrame.GetVirtualUserCount(userCount, roomType)
- }
- func UpdateRoomList(roomName, ruleDesc string, gameRule string, roomType int) {
- skipRedisInfo := false
- if gameFrame.gameSink.IsPrivateRoom() {
- privateroom.RegisterGameRule(privateroom_server.GetAddr(),
- gameFrame.gameSink.GetGameID(),
- gameFrame.gameSink.GetGameName(), roomName, ruleDesc, gameRule)
- skipRedisInfo = true
- }
- gameSink_LadderRoom, ok := gameFrame.gameSink.(GameSink_LadderRoom)
- if ok && gameSink_LadderRoom.IsLadderRoom() {
- ladderservice.RegisterLadderRoom(gameFrame.gameSink.GetGameID(), roomName, gameRule,
- gameSink_LadderRoom.GetBaseScore(roomName),
- gameSink_LadderRoom.GetMinGold(roomName),
- gameSink_LadderRoom.GetMaxGold(roomName),
- gameSink_LadderRoom.GetAdditionalPercent(roomName),
- gameFrame.gameSink.GetServerAddr())
- skipRedisInfo = true
- }
- if skipRedisInfo {
- return
- }
- id := gameFrame.gameSink.GetVersionID()
- addrKey := fmt.Sprintf("Addr%d", id)
- onlineKey := fmt.Sprintf("Online%d", id)
- if gameFrame.gameSink.IsChipRoom() {
- addrKey = "ChipAddr"
- onlineKey = "ChipOnline"
- }
- gameName := gameFrame.gameSink.GetGameName()
- redis.String_SetEx(fmt.Sprintf("%s:%s:%v", gameName, addrKey, roomName), gameRule, 70)
- online := fmt.Sprintf("%d", GetVirtualUserCount(GetUserCount(roomName), roomType))
- redis.String_SetEx(fmt.Sprintf("%s:%s:%v", gameName, onlineKey, roomName), online, 70)
- }
- func UpdateRoomOnline(roomName string, roomType int) {
- //log.Release("UpdateRoomOnline %s,%d", roomName, roomType)
- if gameFrame.gameSink.IsPrivateRoom() {
- privateroom.UpdateServerOnline(privateroom_server.GetAddr(), gate.GetUserCount())
- //privateroom.UpdateServerOnline(privateroom_server.GetAddr(), gate.GetUserCount())
- return
- }
- onlineKey := "Online"
- if gameFrame.gameSink.IsChipRoom() {
- onlineKey = "ChipOnline"
- }
- gameName := gameFrame.gameSink.GetGameName()
- online := fmt.Sprintf("%d", GetVirtualUserCount(GetUserCount(roomName), roomType))
- redis.String_SetEx(fmt.Sprintf("%s:%s:%v", gameName, onlineKey, roomName), online, 70)
- }
- func Dump(cmd, param1, param2 string) bool {
- switch cmd {
- case "frame":
- gameFrame.dump()
- case "table":
- tableId, _ := strconv.Atoi(param1)
- gameFrame.dumpTable(tableId)
- case "scene":
- tableId, _ := strconv.Atoi(param1)
- gameFrame.dumpScene(tableId)
- case "dismiss":
- tableId, _ := strconv.Atoi(param1)
- gameFrame.dismissTable(tableId)
- case "offline":
- gameFrame.dumpOffline()
- case "timer":
- tableId, _ := strconv.Atoi(param1)
- gameFrame.dumpTimers(tableId)
- case "user":
- log.Debug("----------frame.Dump user ----------")
- userId, _ := strconv.Atoi(param1)
- usr := gate.GetUserByUserId(userId)
- if usr == nil {
- log.Debug(" userId %d not exist", userId)
- } else {
- log.Debug(" %s", usr.DumpUserInfo())
- }
- log.Debug("++++++++++frame.Dump user ++++++++++")
- case "robot":
- robot.Dump()
- case "messagerecord":
- userId, err := strconv.Atoi(param1)
- if err != nil {
- userId = 0
- }
- gate.DumpMessageRecord(userId)
- case "clearrecord":
- userId, err := strconv.Atoi(param1)
- if err != nil {
- userId = 0
- }
- gate.ClearMessageRecord(userId)
- case "clientpool":
- micro_common.DumpClientPools()
- default:
- return false
- }
- return true
- }
|