예제 #1
0
    def doQuickStart(self, msg):
        """
        Note:
            1> 由于不同游戏评分机制不同,例如德州会根据游戏阶段评分,所以把桌子评分存到redis里,方便各游戏服务器自由刷新。
            2> 为了防止同一张桌子同时被选出来分配座位,选桌时会把tableScore里选出的桌子删除,玩家坐下成功后再添加回去,添回去之前无需刷新该桌子的评分。
            3> 玩家自选桌时,可能选中一张正在分配座位的桌子,此时需要休眠后重试,只到该桌子完成分配或者等待超时。
        """
        assert self.roomId == msg.getParam("roomId")

        userId = msg.getParam("userId")
        shadowRoomId = msg.getParam("shadowRoomId")
        tableId = msg.getParam("tableId")
        clientId = msg.getParam("clientId")
        extParams = msg.getKey("params")
        ftlog.hinfo("doQuickStart->", "userId =", userId, "clientId =",
                    clientId, "roomId =", self.roomId, "shadowRoomId =",
                    shadowRoomId, "tableId =", tableId, "extParams =",
                    extParams)

        if self.runStatus != self.ROOM_STATUS_RUN:
            FishQuickStart.onQuickStartFailed(
                FishQuickStart.ENTER_ROOM_REASON_MAINTENANCE, userId, clientId,
                self.roomId)
            return
        self.quickStartInGR(shadowRoomId, tableId, userId, clientId, extParams)
예제 #2
0
 def quickStartInGT(self, shadowRoomId, tableId, userId, clientId,
                    extParams):
     isSitDown = self._trySitDown(shadowRoomId, tableId, userId, clientId,
                                  extParams)
     if not isSitDown:
         FishQuickStart.onQuickStartFailed(
             FishQuickStart.ENTER_ROOM_REASON_INNER_ERROR, userId, clientId,
             self.roomId)
예제 #3
0
 def quickStartInGR(self, shadowRoomId, tableId, userId, clientId, extParams):
     """快速进入GR"""
     try:
         if shadowRoomId is None:
             shadowRoomId = self._choiceTableRoom(userId)
         table_remote.quickStart(shadowRoomId, tableId, userId, clientId, extParams)
     except Exception, e:
         ftlog.error("quickStartInGR error", userId, extParams, traceback.format_exc())
         FishQuickStart.onQuickStartFailed(FishQuickStart.ENTER_ROOM_REASON_INNER_ERROR, userId, clientId, self.roomId)
예제 #4
0
 def quickStartInGR(self, shadowRoomId, tableId, userId, clientId, extParams):
     """
     快速进入房间进程
     :param shadowRoomId: 影子房间Id
     :param tableId: 桌子Id
     :param userId: 玩家Id
     :param clientId: 客户端
     :param extParams: 扩展参数
     """
     try:
         if shadowRoomId is None:
             shadowRoomId = self._choiceTableRoom(userId)
         table_remote.quickStart(shadowRoomId, tableId, userId, clientId, extParams)             # 访问桌子进程
     except Exception, e:
         ftlog.error("quickStartInGR error", userId, extParams, traceback.format_exc())
         FishQuickStart.onQuickStartFailed(FishQuickStart.ENTER_ROOM_REASON_INNER_ERROR, userId, clientId, self.roomId)
예제 #5
0
    def _fetchAllRoomInfos(self, userId, gameId):
        """
        获取所有房间信息
        """
        lang = util.getLanguage(userId)
        testMode = util.getNewbieABCTestMode(userId)
        recommendRoomId, reason = FishQuickStart._chooseRoom(userId, gameId)
        if reason != FishQuickStart.ENTER_ROOM_REASON_OK:
            recommendRoomId = 0
        re_roomConf = None
        if recommendRoomId != 0:
            re_roomConf = gdata.roomIdDefineMap()[recommendRoomId]
            if re_roomConf:
                re_roomConf = re_roomConf.configure

        ctrlRoomIds = [bigRoomId * 10000 + 1000 for bigRoomId in gdata.gameIdBigRoomidsMap()[gameId]]
        ctrlRoomIds.sort()
        ftlog.debug("_fetchAllRoomInfos", userId, gameId, ctrlRoomIds, recommendRoomId, re_roomConf)
        normalRoomInfos = []
        friendRoomInfos = []
        matchRoomInfos = []
        pointMatchRoomInfos = []
        robberyRoomInfos = []
        grandPrixRoomInfos = []
        poseidonRoomInfos = []

        isLimitedVer = util.isVersionLimit(userId)
        newbieRoomListMode = gamedata.getGameAttr(userId, FISH_GAMEID, ABTestData.newbieRoomListMode)   # 新手房间列表模式
        isFinishAllRedTask = util.isFinishAllRedTask(userId)
        clientVersion = gamedata.getGameAttr(userId, FISH_GAMEID, GameData.clientVersion)
        fpMultipleTestMode = config.getPublic("fpMultipleTestMode") or gamedata.getGameAttr(userId, FISH_GAMEID,
                                                                                            ABTestData.fpMultipleTestMode)  # 渔场倍率AB测试
        for ctlRoomId in ctrlRoomIds:
            pass


        return normalRoomInfos, friendRoomInfos, matchRoomInfos, robberyRoomInfos, \
               pointMatchRoomInfos, grandPrixRoomInfos, poseidonRoomInfos
예제 #6
0
    def doGetQuickEnterRoom(self, userId, gameId, roomId0, tableId0, kindId):
        """
        获取快速进入房间信息
        """
        from newfish.entity.quick_start import FishQuickStart
        reason = FishQuickStart.ENTER_ROOM_REASON_OK
        info = u""
        if not util.isUsableClientVersion(userId):
            reason = FishQuickStart.ENTER_ROOM_REASON_VERSION_DISABLE
        elif game.isShutDown():
            reason = FishQuickStart.ENTER_ROOM_REASON_MAINTENANCE
        if reason != FishQuickStart.ENTER_ROOM_REASON_OK:
            info = FishQuickStart.getFailedInfo(reason, userId, roomId0)
            self.sendQuickEnterInfo(gameId, userId, roomId0, tableId0, kindId, reason, info)
            return
        isIn, roomId, tableId, _ = util.isInFishTable(userId)
        if not isIn:
            if roomId0:             # 用户选择了房间,先判断用户自己选的房间能否进入
                try:
                    reason = FishQuickStart.canQuickEnterRoom(userId, gameId, roomId0, kindId)
                    if reason == FishQuickStart.ENTER_ROOM_REASON_OK:
                        roomId = roomId0
                        tableId = tableId0
                    else:           # 用户选择的房间无法进入
                        roomConf = gdata.getRoomConfigure(roomId0)
                        if roomConf and roomConf.get("typeName") in config.QUICK_START_ROOM_TYPE:   # 系统自动分配
                            roomId, reason = FishQuickStart._chooseRoom(userId, gameId)
                        else:       # 非普通房间无法进入
                            roomId = roomId0
                            tableId = tableId0
                            info = FishQuickStart.getFailedInfo(reason, userId, roomId)
                except Exception as e:
                    roomId, reason = FishQuickStart._chooseRoom(userId, gameId)
                    ftlog.error("doGetQuickEnterRoom error", userId, gameId, roomId0, tableId0, e)
            else:                   # 用户不选择房间,点击快速开始,系统自动分配
                roomId, reason = FishQuickStart._chooseRoom(userId, gameId)

        self.sendQuickEnterInfo(gameId, userId, roomId, tableId, kindId, reason, info)
예제 #7
0
    def doQuickStart(self, msg):
        """
        Note:
            1> 由于不同游戏评分机制不同,例如德州会根据游戏阶段评分,所以把桌子评分存到redis里,方便各游戏服务器自由刷新。
            2> 为了防止同一张桌子同时被选出来分配座位,选桌时会把tableScore里选出的桌子删除,玩家坐下成功后再添加回去,添回去之前无需刷新该桌子的评分。
            3> 玩家自选桌时,可能选中一张正在分配座位的桌子,此时需要休眠后重试,只到该桌子完成分配或者等待超时。
        """
        assert self.roomId == msg.getParam("roomId")

        userId = msg.getParam("userId")
        shadowRoomId = msg.getParam("shadowRoomId")
        tableId = msg.getParam("tableId")
        clientId = msg.getParam("clientId")
        ftlog.hinfo(getMethodName(),
                    "->|userId, clientId, roomId, shadowRoomId, tableId:",
                    userId, clientId, self.roomId, shadowRoomId, tableId)

        if self.runStatus != self.ROOM_STATUS_RUN:
            FishQuickStart.onQuickStartFailed(
                FishQuickStart.ENTER_ROOM_REASON_MAINTENANCE, userId, clientId,
                self.roomId)
            return
        if tableId == 0:  # 服务器为玩家选择桌子并坐下
            _, _, details = bireport.getRoomOnLineUserCount(FISH_GAMEID, True)
            complete = False
            roomIds = self.roomDefine.shadowRoomIds
            # 按VIP等级分桌
            vipRoomConf = OrderedDict({6: -3, 3: -6, 1: -8, 0: -10})
            vipLevel = hallvip.userVipSystem.getVipInfo(userId).get("level", 0)
            index = 0
            for level in vipRoomConf:
                if vipLevel >= level:
                    index = vipRoomConf[level]
                    break
            for roomId in roomIds[index:]:
                tableCount = self.roomDefine.configure["gameTableCount"]
                maxSeatN = self.tableConf["maxSeatN"]
                if details.get(str(roomId)) < int(tableCount * maxSeatN * 0.9):
                    shadowRoomId = roomId
                    complete = True
                    break
            if not complete:
                shadowRoomId = choice(self.roomDefine.shadowRoomIds)
            tableId = self.getBestTableId(userId, shadowRoomId)
        else:  # 玩家自选桌子坐下
            assert isinstance(shadowRoomId, int) and gdata.roomIdDefineMap(
            )[shadowRoomId].bigRoomId == self.roomDefine.bigRoomId
            tableId = self.enterOneTable(userId, shadowRoomId, tableId)

        if not tableId:
            ftlog.error(getMethodName(), "getFreeTableId timeout",
                        "|userId, roomId, tableId:", userId, self.roomId,
                        tableId)
            return

        if ftlog.is_debug():
            ftlog.info(getMethodName(), "after choose table",
                       "|userId, shadowRoomId, tableId:", userId, shadowRoomId,
                       tableId)
        extParams = msg.getKey("params")
        self.querySitReq(userId, shadowRoomId, tableId, clientId, extParams)