Example #1
0
    def sendMsgTableInfo(self, msg, userId, seatId, isReconnect, isHost=False):
        """用户坐下后给用户发送table_info"""
        if msg and msg.getParam('itemParams', None):
            self.__init_params = msg.getParam('itemParams', None)
            self.__params_desc = self.get_select_create_config_items()
            self.__params_play_desc = self.get_select_create_config_items(True)
            ftlog.debug('MajiangFriendTable.sendMsgTableInfo userId:', userId,
                        ' seatId:', seatId, ' message:', msg, ' itemParams:',
                        self.__init_params)
            ftId = msg.getParam('ftId', None)
            if ftId:
                self.processCreateTableSetting()
                self.__ftId = ftId
                # 保存自建桌对应关系
                CreateTableData.addCreateTableNo(self.tableId, self.roomId,
                                                 gdata.serverId(), self.ftId)

                self.__table_owner = userId
                self.__table_owner_seatId = seatId
                self.logic_table.tableConfig[MFTDefine.FTID] = self.__ftId
                self.logic_table.tableConfig[MFTDefine.FTOWNER] = userId
                self.logic_table.tableConfig[
                    MFTDefine.ITEMPARAMS] = self.__init_params
                self.logic_table.tableConfig[
                    MFTDefine.CREATE_TABLE_DESCS] = self.__params_desc
                self.logic_table.tableConfig[
                    MFTDefine.
                    CREATE_TABLE_PLAY_DESCS] = self.__params_play_desc
                # 返回房主建房成功消息,准备状态
                self.logic_table.playerReady(self.getSeatIdByUserId(userId),
                                             True)
                self.logic_table.msgProcessor.create_table_succ_response(
                    userId, self.getSeatIdByUserId(userId), 'ready', 1,
                    self.logic_table.getBroadCastUIDs())

                # 房主启动准备定时器,超时解散牌桌
                message = self.logic_table.msgProcessor.getMsgReadyTimeOut()
                readyTimeOut = self.getTableConfig(MFTDefine.READY_TIMEOUT,
                                                   3600)
                ftlog.debug(
                    'MajiangFriendTable.sendMsgTableInfo begin to check ready timeout, message:',
                    message, ' readyTimeOut:', readyTimeOut,
                    ' tableOwnerSeatId:', self.tableOwnerSeatId)
                self.tableTimer.setupTimer(self.tableOwnerSeatId, readyTimeOut,
                                           message)
                self.__ready_time_out_timer = True
        # 发送table_info
        super(MajiangFriendTable,
              self).sendMsgTableInfo(msg, userId, seatId, isReconnect,
                                     userId == self.__table_owner)
        # 如果正在投票解散,给用户补发投票解散的消息
        if self.logic_table.isFriendTablePlaying(
        ) and self.voteHost != MTDefine.INVALID_SEAT:
            # 补发投票解散信息
            self.logic_table.msgProcessor.create_table_dissolve_vote(
                self.players[self.voteHost].userId, self.voteHost,
                self.maxSeatN, self.get_leave_vote_info(),
                self.get_leave_vote_info_detail(),
                self.logic_table.player[self.voteHost].name,
                self.__vote_time_out, self.logic_table.getBroadCastUIDs())
Example #2
0
    def sendMsgTableInfo(self, msg, userId, seatId, isReconnect, isHost=False):
        """用户坐下后给用户发送table_info"""
        if msg and msg.getParam('itemParams', None):
            self.__init_params = msg.getParam('itemParams', None)
            self.__params_desc = self.get_select_create_config_items()
            self.__params_play_desc = self.get_select_create_config_items(True)
            ftlog.debug('MajiangFriendTable.sendMsgTableInfo userId:', userId
                        , ' seatId:', seatId
                        , ' message:', msg
                        , ' itemParams:', self.__init_params
                        )
            ftId = msg.getParam('ftId', None)
            if ftId:
                self.processCreateTableSetting()
                self.__ftId = ftId
                # 保存自建桌对应关系
                CreateTableData.addCreateTableNo(self.tableId, self.roomId, gdata.serverId(), self.ftId)

                self.__table_owner = userId
                self.__table_owner_seatId = seatId
                self.logic_table.tableConfig[MFTDefine.FTID] = self.__ftId
                self.logic_table.tableConfig[MFTDefine.FTOWNER] = userId
                self.logic_table.tableConfig[MFTDefine.ITEMPARAMS] = self.__init_params
                self.logic_table.tableConfig[MFTDefine.CREATE_TABLE_DESCS] = self.__params_desc
                self.logic_table.tableConfig[MFTDefine.CREATE_TABLE_PLAY_DESCS] = self.__params_play_desc
                # 返回房主建房成功消息,准备状态
                self.logic_table.playerReady(self.getSeatIdByUserId(userId), True)
                self.logic_table.msgProcessor.create_table_succ_response(userId
                                                                         , self.getSeatIdByUserId(userId)
                                                                         , 'ready'
                                                                         , 1
                                                                         , self.logic_table.getBroadCastUIDs())

                # 房主启动准备定时器,超时解散牌桌
                message = self.logic_table.msgProcessor.getMsgReadyTimeOut()
                readyTimeOut = self.getTableConfig(MFTDefine.READY_TIMEOUT, 3600)
                ftlog.debug('MajiangFriendTable.sendMsgTableInfo begin to check ready timeout, message:', message
                            , ' readyTimeOut:', readyTimeOut
                            , ' tableOwnerSeatId:', self.tableOwnerSeatId)
                self.tableTimer.setupTimer(self.tableOwnerSeatId, readyTimeOut, message)
                self.__ready_time_out_timer = True
        # 发送table_info
        super(MajiangFriendTable, self).sendMsgTableInfo(msg, userId, seatId, isReconnect, userId == self.__table_owner)
        # 如果正在投票解散,给用户补发投票解散的消息
        if self.logic_table.isFriendTablePlaying() and self.voteHost != MTDefine.INVALID_SEAT:
            # 补发投票解散信息
            self.logic_table.msgProcessor.create_table_dissolve_vote(self.players[self.voteHost].userId
                                                                     , self.voteHost
                                                                     , self.maxSeatN
                                                                     , self.get_leave_vote_info()
                                                                     , self.get_leave_vote_info_detail()
                                                                     , self.logic_table.player[self.voteHost].name
                                                                     , self.__vote_time_out
                                                                     , self.logic_table.getBroadCastUIDs())
Example #3
0
    def initGame(self):
        from difang.majiang2.entity import majiang_account
        self._account = majiang_account
        serverType = gdata.serverType()

        if serverType == gdata.SRV_TYPE_ROBOT:
            self._robotmgr = MajiangRobotManager()
            globalEventBus.subscribe(EventHeartBeat, self._robotmgr.onHeartBeat)

        elif (serverType == gdata.SRV_TYPE_TABLE) or (serverType == gdata.SRV_TYPE_ROOM):
            CreateTableData.initialize(gdata.serverId())  # 初始化创建牌桌数据模块
            MJCreateTableRecord.initialize()  # 初始化自建桌战绩模块
        elif serverType == gdata.SRV_TYPE_CENTER:
            pass
Example #4
0
    def enterFriendTable(self, userId, gameId, clientId, ftId):
        """进入自建桌,插件实现具体功能"""
        if ftlog.is_debug():
            ftlog.debug('MAJIANG enterFriendTable userId:', userId
                        , ' gameId:', gameId
                        , ' clientId:', clientId
                        , ' ftId:', ftId)

        tableId0, roomId0 = CreateTableData.getTableIdByCreateTableNo(ftId)
        if ftlog.is_debug():
            ftlog.debug('MAJIANG enterFriendTable ftId:', ftId
                        , ' roomId:', roomId0
                        , ' tableId:', tableId0)

        if not tableId0 or not roomId0:
            from difang.majiang2.entity.util import sendPopTipMsg
            sendPopTipMsg(userId, '您要进入的朋友场房间不存在,请核对房间号')
            return

        config = {
            "type": "game",
            "pluginParams": {
                "gameType": 11,
                "ftId": ftId
            }
        }

        todotask = TodoTaskEnterGameNew(GAMEID, config)
        mo = MsgPack()
        mo.setCmd('todo_tasks')
        mo.setResult('gameId', gameId)
        mo.setResult('pluginId', GAMEID)
        mo.setResult('userId', userId)
        mo.setResult('tasks', TodoTaskHelper.encodeTodoTasks(todotask))
        router.sendToUser(mo, userId)
Example #5
0
    def initGame(self):
        from difang.majiang2.entity import majiang_account
        self._account = majiang_account
        serverType = gdata.serverType()

        if serverType == gdata.SRV_TYPE_ROBOT:
            self._robotmgr = MajiangRobotManager()
            globalEventBus.subscribe(EventHeartBeat,
                                     self._robotmgr.onHeartBeat)

        elif (serverType == gdata.SRV_TYPE_TABLE) or (serverType
                                                      == gdata.SRV_TYPE_ROOM):
            CreateTableData.initialize(gdata.serverId())  # 初始化创建牌桌数据模块
            MJCreateTableRecord.initialize()  # 初始化自建桌战绩模块
        elif serverType == gdata.SRV_TYPE_CENTER:
            pass
Example #6
0
    def enterFriendTable(self, userId, gameId, clientId, ftId):
        """进入自建桌,插件实现具体功能"""
        if ftlog.is_debug():
            ftlog.debug('MAJIANG enterFriendTable userId:', userId, ' gameId:',
                        gameId, ' clientId:', clientId, ' ftId:', ftId)

        tableId0, roomId0 = CreateTableData.getTableIdByCreateTableNo(ftId)
        if ftlog.is_debug():
            ftlog.debug('MAJIANG enterFriendTable ftId:', ftId, ' roomId:',
                        roomId0, ' tableId:', tableId0)

        if not tableId0 or not roomId0:
            from difang.majiang2.entity.util import sendPopTipMsg
            sendPopTipMsg(userId, '您要进入的朋友场房间不存在,请核对房间号')
            return

        config = {
            "type": "game",
            "pluginParams": {
                "gameType": 11,
                "ftId": ftId
            }
        }

        todotask = TodoTaskEnterGameNew(GAMEID, config)
        mo = MsgPack()
        mo.setCmd('todo_tasks')
        mo.setResult('gameId', gameId)
        mo.setResult('pluginId', GAMEID)
        mo.setResult('userId', userId)
        mo.setResult('tasks', TodoTaskHelper.encodeTodoTasks(todotask))
        router.sendToUser(mo, userId)
Example #7
0
    def clearTable(self, sendLeave):
        # 纪录最后一局日志和结束日志
        seats = self.logic_table.getSeats()
        if self.logic_table.tableConfig[
                MFTDefine.CUR_ROUND_COUNT] == self.logic_table.tableConfig[
                    MFTDefine.ROUND_COUNT]:
            if len(self.logic_table.tableResult.results) > 0:
                roundResult = self.logic_table.tableResult.results[-1]
                deltaScore = roundResult.score
                totalScore = self.logic_table.tableResult.score
                curRound = self.logic_table.tableConfig[
                    MFTDefine.CUR_ROUND_COUNT]
                totalRound = self.logic_table.tableConfig[
                    MFTDefine.ROUND_COUNT]
                ftlog.debug('MajiangFriendTable.cleraTable stat tableNo',
                            self.ftId, 'seats', seats, 'deltaScore:',
                            deltaScore, 'totalScore:', totalScore, 'gameId:',
                            self.gameId, 'roomId:', self.roomId, 'tableId',
                            self.tableId)
                hall_friend_table.addOneResult(self.ftId, seats, deltaScore,
                                               totalScore, curRound,
                                               totalRound, self.gameId,
                                               self.roomId, self.tableId)
            else:
                ftlog.debug(
                    'MajiangFriendTable.cleraTable CUR_ROUND_COUNT',
                    self.logic_table.tableConfig[MFTDefine.CUR_ROUND_COUNT],
                    'ROUND_COUNT',
                    self.logic_table.tableConfig[MFTDefine.ROUND_COUNT])

        # def gameEnd(tableNo, seats, totalScore, totalRound, gameId, roomId, tableId)
        if self.logic_table.tableConfig[MFTDefine.CUR_ROUND_COUNT] > 0:
            totalScore = self.logic_table.tableResult.score
            if not totalScore:
                totalScore = [0 for _ in range(self.logic_table.playerCount)]
            totalRound = self.logic_table.tableConfig[MFTDefine.ROUND_COUNT]
            ftlog.debug('MajiangFriendTable.cleraTable stat gameEnd tableNo:',
                        self.ftId, 'seats:', seats, 'totalScore:', totalScore,
                        'totalRound:', totalRound, 'gameId:', self.gameId,
                        'roomId:', self.roomId, 'tableId:', self.tableId)
            hall_friend_table.gameEnd(self.ftId, seats, totalScore, totalRound,
                                      self.gameId, self.roomId, self.tableId)
        """清理桌子"""
        super(MajiangFriendTable, self).clearTable(sendLeave)
        # 释放大厅房间ID
        hall_friend_table.releaseFriendTable(self.gameId, self.ftId)
        CreateTableData.removeCreateTableNo(gdata.serverId(), self.ftId)
Example #8
0
 def get_create_table_from_table_list(cls, table_list):
     """ 根据room得到合适的table返回
     """
     for i in xrange(len(table_list)):
         count, table = table_list[i]
         if count == 0:  # 桌子上没人
             ftlog.debug('===========get_create_table_by_room==', table.tableId, caller=cls)
             if table.tableId not in CreateTableData.getAllCreatedTableIdList():
                 # 桌子没被创建
                 return table.tableId
     ftlog.debug('===========rpc success==', caller=cls)
     return 0
Example #9
0
    def clearTable(self, sendLeave):
        # 纪录最后一局日志和结束日志
        seats = self.logic_table.getSeats()
        if self.logic_table.tableConfig[MFTDefine.CUR_ROUND_COUNT] == self.logic_table.tableConfig[
            MFTDefine.ROUND_COUNT]:
            if len(self.logic_table.tableResult.results) > 0:
                roundResult = self.logic_table.tableResult.results[-1]
                deltaScore = roundResult.score
                totalScore = self.logic_table.tableResult.score
                curRound = self.logic_table.tableConfig[MFTDefine.CUR_ROUND_COUNT]
                totalRound = self.logic_table.tableConfig[MFTDefine.ROUND_COUNT]
                ftlog.debug('MajiangFriendTable.cleraTable stat tableNo', self.ftId, 'seats', seats, 'deltaScore:',
                            deltaScore, 'totalScore:', totalScore, 'gameId:', self.gameId, 'roomId:', self.roomId,
                            'tableId', self.tableId)
                hall_friend_table.addOneResult(self.ftId, seats, deltaScore, totalScore, curRound, totalRound,
                                               self.gameId, self.roomId, self.tableId)
            else:
                ftlog.debug('MajiangFriendTable.cleraTable CUR_ROUND_COUNT',
                            self.logic_table.tableConfig[MFTDefine.CUR_ROUND_COUNT],
                            'ROUND_COUNT',
                            self.logic_table.tableConfig[MFTDefine.ROUND_COUNT])

        # def gameEnd(tableNo, seats, totalScore, totalRound, gameId, roomId, tableId)
        if self.logic_table.tableConfig[MFTDefine.CUR_ROUND_COUNT] > 0:
            totalScore = self.logic_table.tableResult.score
            if not totalScore:
                totalScore = [0 for _ in range(self.logic_table.playerCount)]
            totalRound = self.logic_table.tableConfig[MFTDefine.ROUND_COUNT]
            ftlog.debug('MajiangFriendTable.cleraTable stat gameEnd tableNo:', self.ftId, 'seats:', seats,
                        'totalScore:', totalScore, 'totalRound:', totalRound,
                        'gameId:', self.gameId, 'roomId:', self.roomId,
                        'tableId:', self.tableId)
            hall_friend_table.gameEnd(self.ftId, seats, totalScore, totalRound, self.gameId, self.roomId, self.tableId)

        """清理桌子"""
        super(MajiangFriendTable, self).clearTable(sendLeave)
        # 释放大厅房间ID
        hall_friend_table.releaseFriendTable(self.gameId, self.ftId)
        CreateTableData.removeCreateTableNo(gdata.serverId(), self.ftId)
Example #10
0
 def get_create_table_from_table_list(cls, table_list):
     """ 根据room得到合适的table返回
     """
     for i in xrange(len(table_list)):
         count, table = table_list[i]
         if count == 0:  # 桌子上没人
             ftlog.debug('===========get_create_table_by_room==',
                         table.tableId,
                         caller=cls)
             if table.tableId not in CreateTableData.getAllCreatedTableIdList(
             ):
                 # 桌子没被创建
                 return table.tableId
     ftlog.debug('===========rpc success==', caller=cls)
     return 0
Example #11
0
    def checkFriendTable(self, ftId):
        '''
        检测自建桌ID是否继续使用,如果不使用,将回收次ftId
        0 - 有效
        1 - 无效
        
        返回值:
        False - 无用
        True - 有用
        '''
        tableId0, roomId0 = CreateTableData.getTableIdByCreateTableNo(ftId)
        if not tableId0 or not roomId0:
            # 房间无用,大厅可释放房间了
            return False

        return True
Example #12
0
    def checkFriendTable(self, ftId):
        '''
        检测自建桌ID是否继续使用,如果不使用,将回收次ftId
        0 - 有效
        1 - 无效
        
        返回值:
        False - 无用
        True - 有用
        '''
        tableId0, roomId0 = CreateTableData.getTableIdByCreateTableNo(ftId)
        if not tableId0 or not roomId0:
            # 房间无用,大厅可释放房间了
            return False

        return True
Example #13
0
    def doJoinCreateTable(self, userId, gameId, clientId, roomId0, tableId0, playMode):
        """用户加入自建牌桌
        """
        loc = onlinedata.checkUserLoc(userId, clientId, gameId)
        lgameId, lroomId, ltableId, lseatId = loc.split('.')
        lgameId, lroomId, ltableId, lseatId = strutil.parseInts(lgameId, lroomId, ltableId, lseatId)
        if lgameId > 0 and lroomId > 0 and ltableId > 0 and lseatId >= 0:
            ftlog.warn('create_table error, user in table')
            sendPopTipMsg(userId, "请稍候,正在进桌...")
            config = {
                "type": "quickstart",
                "pluginParams": {
                    "roomId": lroomId,
                    "tableId": ltableId,
                    "seatId": lseatId
                }
            }
            todotask = TodoTaskEnterGameNew(lgameId, config)
            mo = MsgPack()
            mo.setCmd('todo_tasks')
            mo.setResult('gameId', gameId)
            mo.setResult('pluginId', lgameId)
            mo.setResult('userId', userId)
            mo.setResult('tasks', TodoTaskHelper.encodeTodoTasks(todotask))
            router.sendToUser(mo, userId)
        else:
            msg = runcmd.getMsgPack()
            createTableNo = msg.getParam('createTableNo', 0)
            if not createTableNo:
                return
            tableId0, roomId0 = CreateTableData.getTableIdByCreateTableNo(createTableNo)
            if not tableId0 or not roomId0:
                sendPopTipMsg(userId, "找不到您输入的房间号")
                return
            msg = runcmd.getMsgPack()
            msg.setParam("shadowRoomId", roomId0)
            msg.setParam("roomId", roomId0)
            msg.setParam("tableId", tableId0)
            msg.setCmdAction("room", "join_create_table")
            router.sendRoomServer(msg, roomId0)

            if router.isQuery():
                mo = runcmd.newOkMsgPack(1)
                router.responseQurery(mo, '', str(userId))