[ Web Proxy ]
URL:
Viewing: https://raw.githubusercontent.com/masterai-top/Snake-Game-JavaScript-Python-Unity/main/carstable.py [Back]  [Original]

#! -*- coding:utf-8 -*-
# Author:   qianyong
# Created:  2016.06.17 14.09

from freetime.util import log as ftlog
from poker.entity.dao import onlinedata
from poker.entity.game.rooms.room import TYRoom
from poker.entity.game.tables.table import TYTable

from cars.entity import const
from cars.entity import carschip
from cars.entity import carsconf
from cars.entity import carsled
from cars.entity.util import UtilFunc
from cars.gameplays.bet import BetSystem
from cars.gameplays.chat import Chat
from cars.gameplays.debug import Debug
from cars.gameplays.fire import Fire
from cars.gameplays.kingweek import KingWeek
from cars.gameplays.lottery import Lottery
from cars.gameplays.pool import Pool
from cars.gametable.carsplayer import CarsPlayer
from cars.gametable.carssender import Sender

import time
from poker.util import strutil


class CarsTable(TYTable):
    ''''''

    CHECK_KING_LED_PERIOD = 60  # LED, 60

    def __init__(self, room, tableId):
        ''''''

        super(CarsTable, self).__init__(room, tableId)

        self._sender = Sender(self)  # 
        self._fire = Fire(self)  # 
        self._chat = Chat(self)  # 
        self._bet = BetSystem(self)  # 

        self._users = {}  # 

        # 60,king
        UtilFunc.callLater(self.CHECK_KING_LED_PERIOD, self._loopLedYesterdayKing)

    @property
    def users(self):
        return self._users

    @property
    def chat(self):
        return self._chat

    @property
    def fire(self):
        return self._fire

    def _doSit(self, msg, userId, seatId, clientId):
        ''', '''

        # ,,. ,
        rejoin = False
        betsInfo = None  # 
        if userId in self._bet.bettingUsers:
            user = self._bet.bettingUsers[userId]
            user.clientId = clientId  # clientId, , clientId

            betsInfo = user.bets  # 
            rejoin = True  # 
        else:
            vipLevel = UtilFunc.getUserVipLevel(userId)
            name, purl = UtilFunc.getUserNameAndPurl(userId)
            user = CarsPlayer(self, userId, name, vipLevel, clientId)

        now = int(time.time())

        # ,7
        fruitsOpenTimeLeft = strutil.cloneData(Lottery.getFruitsLastOpenTime())
        for fruitId in fruitsOpenTimeLeft:
            if fruitsOpenTimeLeft[fruitId] == 0:
                fruitsOpenTimeLeft[fruitId] = -1  # -1
            else:
                fruitsOpenTimeLeft[fruitId] = now - fruitsOpenTimeLeft[fruitId]

        # 
        lotteryTimeLeft = max(0, self._bet.nextLotteryAt - now)

        # , 
        uchip = UtilFunc.getUserChip(userId)
        poolChip = Pool.getPoolChip()

        # onlineLoc, , GR, GRGT
        onlinedata.addOnlineLoc(userId, self.roomId, self.tableId, const.FAKE_SEAT_ID)

        self._sender.sendQuickStartRes(userId, clientId, {"isOK": True, 'reason': TYRoom.ENTER_ROOM_REASON_OK})
        historyMaxLen = carsconf.getHistoryConf().get('simple_num', 0)
        self._sender.sendInfoMsg(user, clientId,
                                 Lottery.getOpenFruitsHistory(const.FAKE_TABLE_ID)[:historyMaxLen],
                                 fruitsOpenTimeLeft,
                                 lotteryTimeLeft,
                                 uchip,
                                 poolChip,
                                 rejoin,
                                 betsInfo,
                                 self._bet.issueNum,
                                 now)

        # info, "", infofruit_lottery
        self._users[userId] = user

        # BI
        ftlog.info('BI.Info userId=', userId, 'vipLevel=', user.vipLevel)

    def _doLeave(self, msg, userId, clientId):
        '''
        , 
         _doLeave 
        '''
        ftlog.debug('_doLeave, userId=', userId)
        self._doLeaveCars(userId, TYRoom.LEAVE_ROOM_REASON_ACTIVE)

    def _doStandUp(self, msg, userId, seatId, reason, clientId):
        '''
        , 
        userIdseatId
        '''
        ftlog.debug('_doStandUp, userId=', userId)
        self._doLeaveCars(userId, TYRoom.LEAVE_ROOM_REASON_ACTIVE)

    def _doTableManage(self, msg, action):
        '''table_manage'''

        result = {'action': action, 'isOK': True}
        if action == 'leave':
            userId = msg.getParam('userId')
            reason = msg.getParam('reason')
            self._doLeaveCars(userId, reason)
            ftlog.debug('_doTableManage user', userId, 'leave table, total users count', len(self._users), 'reason=', reason)

        return result

    def _doLeaveCars(self, userId, reason):
        ''''''

        # 
        if userId in self._users:
            user = self._users[userId]
            timeval = time.time() - user.enterGameAt
            UtilFunc.incrPlayerGameTime(userId, timeval)

            # ; , 
            del self._users[userId]
            self._sender.sendLeaveMsg(userId)

            # onlineLoc
            onlinedata.removeOnlineLoc(userId, self.roomId, self.tableId)

        ftlog.info('_doLeaveCars user', userId, 'leave table, total users count', len(self._users), 'reason=', reason)

    def getUser(self, userId):
        '''userIduser'''

        if userId in self._users:
            return self._users[userId]
        return None

    def _doTableCall(self, msg, userId, seatId, action, clientId):
        '''
        
        table_call
         _doTableCall 
        userIdseatId
        '''

        if ftlog.is_debug():
            ftlog.debug('self._doTableCall action=', action, 'userId=', userId, 'msg=', msg)

        # table_call
        if action == 'sys_fruit_fire':  # 
            return self.doSysFire()

        elif action == 'sys_chat_define_msg':  # 
            text = msg.getParam('text')
            return self.doSysChatDefineMsg(text)

        elif action == 'sys_set_bet_status_ready':
            return self.doSetBetStatusReady()

        elif action == 'sys_set_bet_status_seal':  # 
            return self.doSetBetStatusSeal()

        elif action == 'sys_set_bet_status_lottery':  # 
            return self.doSetBetStatusLottery()

        elif action == 'sys_broadcast_fruit_betting':  # 
            return self.doBroadcastFruitBetting()

        # table_call
        # table_callquick_start, self._users
        if userId not in self._users:
            if action == 'leave' or 'cars_leave':  # leave
                self._sender.sendLeaveMsg(userId)
            ftlog.warn('tablecall logic error', userId, 'not in self._users')
            return self._sender.sendUserErrorMsg(userId, action, u',!')

        user = self._users[userId]

        if action == 'cars_bet':
            bets = msg.getParam('bets')
            issueNum = msg.getParam('issueNum')
            return self.doBet(userId, issueNum, bets)

        elif action == 'cars_leave':
            return self._doLeaveCars(userId, TYRoom.LEAVE_ROOM_REASON_ACTIVE)

        elif action == 'cars_claim_king_reward':
            return self.doClaimKingReward(userId)

        elif action == 'cars_fire_buy':
            index = msg.getParam('index')
            return self.doFireBuy(userId, index)

        elif action == 'cars_claim_firework_prize':
            fireId = msg.getParam('fireId', 0)
            fireId = int(fireId)
            return self._fire.claimFireReward(user, fireId)

        elif action == 'new_table_chat':
            chatType = msg.getParam('type')
            chatMsg = msg.getParam('msg')
            return self.doChat(userId, chatType, chatMsg)

        elif action == 'cars_pool_list':
            return self.doGetPoolList(userId)

        elif action == 'cars_history_detail':
            return self.doGetHistoryDetail(user)

        elif action == 'click_more_game':
            UtilFunc.reportGameEvent(const.EVENT_OPEN_MORE_GAMES, userId, user.clientId, self.roomId, self.tableId)
            return Sender.sendClickMoreGameMsg(userId)

        elif action == 'switch_game':
            switchGameId = msg.getParam('switchGameId')
            UtilFunc.reportGameEvent(const.EVENT_SWITCH_GAME, userId, user.clientId, self.roomId, self.tableId,
                                     deltaChip=switchGameId)
            return Sender.sendSwitchGameMsg(userId)

    def doBet(self, userId, issueNum, bets):
        ''''''

        self._bet.doBet(userId, issueNum, bets)

    def doClaimKingReward(self, userId):
        ''''''

        status = KingWeek.getUserClaimStatus(userId)
        if not status['canClaim']:
            return Sender.sendUserErrorMsg(userId, 'cars_claim_king_reward', 'can not claim')

        KingWeek.setUserClaimedStatus(userId, True)

        reward = carsconf.getKingConf().get('reward', 0)
        user = self._users[userId]

        # , 
        uchip = carschip.dnChipUpdate(userId, const.EVENT_KING_REWARD, reward, user.clientId)

        self._sender.sendClaimKingRewardMsg(userId, uchip)

    def doFireBuy(self, userId, index):
        ''''''

        user = self._users[userId]
        self._fire.buyFire(user, index, user.clientId)

    def doChat(self, userId, chatType, msg):
        ''''''

        self._chat.userChat(userId, chatType, msg)

    def doGetPoolList(self, userId):
        ''''''

        poolList = Pool.getPoolList()
        Sender.sendPoolListMsg(userId, poolList)

    def doGetHistoryDetail(self, user):
        ''''''

        history = Lottery.getOpenFruitsHistory(const.FAKE_TABLE_ID)
        history = history[:]
        for item in history:
            issueNum = item['issueNum']
            if issueNum in user.winHistory:
                item['winChip'] = user.winHistory[issueNum]
            else:
                item['winChip'] = 0
        Sender.sendHistoryDetail(user.userId, history)

    def doSysFire(self):
        ''''''

        self._fire.sysFire()

    def doSysChatDefineMsg(self, text):
        ''''''

        self._chat.broadcastSysChat(text, const.CHAT_LABLE_NOMAL_TYPE)

    def doSetBetStatusReady(self):
        ''''''

        return self._bet.setTableReadyState()

    def doSetBetStatusSeal(self):
        ''''''

        return self._bet.setTableSealState()

    def doSetBetStatusLottery(self):
        ''''''

        return self._bet.setTableLotteryState()

    def doBroadcastFruitBetting(self):
        ''''''

        return self._bet.doBroadCastFruitBetting()

    def _loopLedYesterdayKing(self):
        '''LED'''

        # ,LED
        now = time.time()
        st = time.localtime(now)
        if st.tm_min == carsconf.getLedKingAtMinute():
            user = KingWeek.getSpecificDayKing(now - const.ONE_DAY_SEC)  # 
            if user is not None:
                ftlog.debug('sendKingLed', user)
                carsled.sendKingLed(user['userId'], user['name'], carsconf.getKingConf().get('reward', 0))

        # 
        UtilFunc.callLater(self.CHECK_KING_LED_PERIOD, self._loopLedYesterdayKing)

    def doDebug(self, msg):
        '''debug'''

        Debug.doDebug(msg)

Web Proxy Viewer  |  New URL  |  Original Page