コード例 #1
0
ファイル: dumplings.py プロジェクト: luningcowboy/tuyoo
    def onChargeNotify(cls, event):
        '''
        充值监听,监听并更新排行和redis记录的RMB,过期不会监听
        '''
        userId = event.userId

        ftlog.debug("DumplingHandler.onChargeNotify: "
                    "userId=", userId, "isOutdate=", DumplingsUtil.isOutdate())

        if DumplingsUtil.isOutdate():
            return

        clientGameId = strutil.getGameIdFromHallClientId(event.clientId)
        if clientGameId not in [6, 7]:
            return

        DumplingsUtil.updateRankingStatus(userId)  # 若排行榜重置,则重置积分记录

        rediskey = DumplingsUtil.getRedisKey()
        jsondict = Redis.readJson(userId, rediskey)

        rmb_count = 0
        if jsondict:
            rmb_count = jsondict.get("rmb", 0)
        rmb_count = rmb_count + (event.rmbs or 0)

        jsondict['rmb'] = rmb_count
        Redis.writeJson(userId, rediskey, jsondict)

        DumplingsUtil.updateRankScore(userId, event.timestamp)
        ftlog.debug("DumplingHandler.onChargeNotify: userId=", userId,
                    "event=", event, "jsondict=", jsondict)
コード例 #2
0
ファイル: dumplings.py プロジェクト: luningcowboy/tuyoo
    def onSkillScoreIncrease(cls, event):
        '''
        大师分增加监听,监听并更新排行,过期不会监听
        '''
        userId = event.userId

        ftlog.debug("DumplingHandler.onSkillScoreIncrease: "
                    "userId=", userId, "isOutdate=", DumplingsUtil.isOutdate())
        if DumplingsUtil.isOutdate():
            return
        DumplingsUtil.updateRankingStatus(userId)  # 若排行榜重置,则重置积分记录

        incr = event.newScore - event.oldScore
        rediskey = DumplingsUtil.getRedisKey()
        jsondict = Redis.readJson(userId, rediskey)

        dashifen_count = 0
        if jsondict:
            dashifen_count = jsondict.get("dashifen", 0)
        dashifen_count = dashifen_count + (incr or 0)

        jsondict['dashifen'] = dashifen_count
        Redis.writeJson(userId, rediskey, jsondict)

        DumplingsUtil.updateRankScore(userId, event.timestamp)
        ftlog.debug("DumplingHandler.onSkillScoreIncrease: "
                    "userId=", userId, "event=", event)
コード例 #3
0
 def setUserActivityData(cls, bankId, userId, data):
     '''
     存储玩家活动记录数据,存储在db7/db8中的gamedata:6:userId中
     '''
     conf = ConfigDatabase.getServerConfig(bankId)
     activity_start = conf.get('start')
     key = cls.getGamedataKey(bankId,
                              Tool.datetimeFromString(activity_start))
     Redis.writeJson(userId, key, data)
コード例 #4
0
ファイル: dumplings.py プロジェクト: luningcowboy/tuyoo
    def updateRankingStatus(cls, userId):
        '''
        查看是否
        [redis gametable]
        {
            'rankissue' : '20160125',
            'dashifen':10,
            'rmb':11
        }
        '''
        key = cls.getRedisKey()
        user_props = Redis.readJson(userId, key)

        rankingId = cls.getRankingId()
        ftlog.debug("DumplingsUtil.updateRankingStatus", "userId=", userId,
                    "rankingId=", rankingId)
        if not rankingId:
            return

        rankingIssueNumber = user_props.get('rankissue')
        currentRankingIssueNumber = cls.getCurrentRankingIssueNumber()
        ftlog.debug("DumplingsUtil.updateRankingStatus", "userId=", userId,
                    "currentRankingIssueNumber=", currentRankingIssueNumber,
                    "rankingIssueNumber=", rankingIssueNumber, "equal=",
                    currentRankingIssueNumber == rankingIssueNumber)
        if not currentRankingIssueNumber or currentRankingIssueNumber == rankingIssueNumber:
            return

        user_props['rankissue'] = currentRankingIssueNumber
        userRankingInfo = hallranking.rankingSystem._rankingDao.getUserRankWithScore(
            rankingId, currentRankingIssueNumber, userId)
        rankNumber = -1
        if userRankingInfo and userRankingInfo[0] != None:
            rankNumber = userRankingInfo[0] + 1
        # history_dict = user_props.get('history', {})
        # history_dict[currentRankingIssueNumber] = {
        #     'dashifen':user_props.get('dashifen', 0),
        #     'rmb': user_props.get('rmb', 0),
        #     'rankNumber': rankNumber
        # }

        ## online logging
        ftlog.info("DdzDumplings.Ranking.Number,", "userId ", userId,
                   "issueNumber ", str(currentRankingIssueNumber),
                   "rankNumber " + str(rankNumber),
                   "dashifen " + str(user_props.get('dashifen', 0)),
                   "rmb " + str(user_props.get('rmb', 0)))
        ## 重置数据
        user_props['dashifen'] = 0
        user_props['rmb'] = 0
        Redis.writeJson(userId, key, user_props)
        ftlog.debug("DumplingsUtil.updateRankingStatus: "
                    "userId=", userId, "user_props=", user_props)
コード例 #5
0
ファイル: ddz_redenvelope.py プロジェクト: luningcowboy/tuyoo
 def markGet(self, userId, datetime, assets):
     '''
     记录领取红包
     :param datetime: 标记的领取红包的时间点
     '''
     rediskey = self.getRedisKey()
     dictobj = Redis.readJson(userId, rediskey)
     key = "get.%s" % str(datetime)
     Tool.dictSet(dictobj, key, assets)
     Redis.writeJson(userId, rediskey, dictobj)
     ftlog.debug("DataWrapper.makeGet: userId=", userId, "key=", key,
                 "datetime=", str(datetime), "dictobj=", dictobj)
コード例 #6
0
ファイル: skilllevel_gift.py プロジェクト: huazhengyang/tuyoo
    def onUserLogin(cls, event):
        ftlog.debug("SkillLevelGift.onUserLogin: event=", event)

        # gameId = 6
        userId = event.userId
        clientId = sessiondata.getClientId(userId)
        gameId = strutil.getGameIdFromHallClientId(clientId)
        ddzconf = cls.getDdzActivityConf()
        mapkey = "SkillLevelGift" + ddzconf.get("start", "")

        if gameId != DIZHU_GAMEID:
            return

        toggle = ddzconf.get("toggle", False)
        ftlog.debug("SkillLevelGift.onUserLogin: userId=", userId, "open_toggle=", toggle)
        if not toggle:
            return

        isFirst = Redis.isFirst(userId, mapkey)
        ftlog.debug("SkillLevelGift.onUserLogin: userId=", userId, "isFirst=", isFirst)
        if not isFirst:
            return

        # 发放道具
        mail = ddzconf.get("mail", "")
        assets = ddzconf.get("assets")
        UserBag.sendAssetsToUser(gameId, userId, assets, 'DDZ_ATC_SKILLLEVEL_GIFT', mail)
        ftlog.debug("SkillLevelGift.onUserLogin: userId=", userId, "send assets=", assets, "mail=", mail)
コード例 #7
0
 def getUserActivityData(cls, bankId, userId):
     '''
     获取玩家活动记录数据,存储在db7/db8中的gamedata:6:userId中
     :return: dict
     '''
     conf = ConfigDatabase.getServerConfig(bankId)
     activity_start = conf.get('start')
     key = cls.getGamedataKey(bankId,
                              Tool.datetimeFromString(activity_start))
     return Redis.readJson(userId, key)
コード例 #8
0
 def getCountingSeconds(cls, userId):
     '''
     获得计时的秒数
     '''
     data = Redis.readJson(userId, cls.countingTimerUniqueKey)
     laststamp = data.get('timestamp')
     if not laststamp:
         cls.resetCounting(userId)
         return -1
     return Tool.datetimeToTimestamp(datetime.now()) - laststamp
コード例 #9
0
def sendUserVipBenefits(userId, roomId, minRoomLevel, sendCount, chip):
    if minRoomLevel < 1 or sendCount <= 0:
        return False

    ## room level limit
    bigroomId = gdata.getBigRoomId(roomId)
    roomconf = gdata.getRoomConfigure(bigroomId)
    if not roomconf:
        return False
    roomlevel = roomconf.get('roomLevel', 1)
    if roomlevel < minRoomLevel:
        ftlog.debug('sendUserVipBenefits: roomlevel', 'userId=', userId,
                    'roomlevel=', roomlevel, 'minRoomLevel=', minRoomLevel)
        return False

    ## send number limit
    rediskey = 'vip.benefits'
    data = Redis.readJson(userId, rediskey)
    timestamp = data.get('timestamp', 0)
    counter = data.get('counter', 0)

    now = datetime.datetime.now()
    last = datetime.datetime.fromtimestamp(timestamp)
    if last.year != now.year or last.month != now.month or last.day != now.day:
        counter = 0

    if counter >= sendCount:
        ftlog.debug('sendUserVipBenefits: sendCount', 'userId=', userId,
                    'sendCount=', sendCount, 'counter=', counter)
        return False

    data['counter'] = counter + 1
    data['timestamp'] = Tool.datetimeToTimestamp(now)

    Redis.writeJson(userId, rediskey, data)
    UserInfo.incrChip(userId, 6, chip, 'BENEFITS_VIP_SEND')

    ftlog.debug('sendUserVipBenefits:', 'userId=', userId, 'counter=',
                data['counter'], 'chip=', chip)
    return True
コード例 #10
0
ファイル: dumplings.py プロジェクト: luningcowboy/tuyoo
    def getScoreNum(cls, userId):
        '''
        获得分数(饺子数目)
        '''
        rediskey = cls.getRedisKey()
        jsondict = Redis.readJson(userId, rediskey)

        rmb_count = 0
        dashifen_count = 0
        if jsondict:
            dashifen_count = jsondict.get("dashifen", 0)
            rmb_count = jsondict.get("rmb", 0)
        return cls.calculateScore(rmb_count, dashifen_count)
コード例 #11
0
ファイル: dumplings.py プロジェクト: luningcowboy/tuyoo
    def _creditTypeSendRewardsIfNeed(cls, userId):
        '''
        积分发奖类型,当积分达到发奖值后,自动发奖(仅供积分发奖类型使用:"rewardsType": "credit")
        '''
        actconf = DumplingsUtil.getActivityConf()
        isRanking = Tool.dictGet(actconf, 'config.activate.rewardsType',
                                 'credit') == 'ranking'
        if isRanking:
            return
        rediskey = cls.getRedisKey()
        mail = Tool.dictGet(actconf, 'config.activate.mail')
        reward = Tool.dictGet(actconf, 'config.activate.credit.rewards')
        jsondict = Redis.readJson(userId, rediskey)

        helper = CreditRewardHelper(userId, reward)
        reachedlist = helper.getReachedConfList()  # 达到发奖条件的所有奖励配置的list
        getlist = jsondict.get('getlist',
                               [])  # 已经领取的奖励list,使用score字段记录,score字段值不可重复

        for item in reachedlist:
            for assets in item.get('items'):
                if item['score'] not in getlist:
                    getlist.append(item['score'])
                    ranking_num = cls.getRankingWithUserId(userId)
                    mailstr = strutil.replaceParams(mail, {
                        'assets': item.get('desc'),
                        'ranking_num': ranking_num
                    })
                    UserBag.sendAssetsToUser(6, userId, assets,
                                             'DDZ_ACT_DUMPLINGS', mailstr)

        # 记录奖励已经领取
        jsondict['getlist'] = getlist
        Redis.writeJson(userId, rediskey, jsondict)
        ftlog.debug("DumplingsUtil.creditTypeSendRewardsIfNeed: userId=",
                    userId, "jsondict=", jsondict)
コード例 #12
0
ファイル: ddz_redenvelope.py プロジェクト: luningcowboy/tuyoo
 def hasGet(self, userId, datetime):
     '''
     是否已经领取
     :param datetime: 判断这个时间点是否有领取红包
     '''
     rediskey = self.getRedisKey()
     dictobj = Redis.readJson(userId, rediskey)
     key = "get.%s" % str(datetime)
     value = Tool.dictGet(dictobj, key)
     ftlog.debug("DataWrapper.hasGet: userId=", userId, "key=", key,
                 "datetime=", str(datetime), "dictobj=", dictobj, "value=",
                 value)
     if value:
         return True
     return False
コード例 #13
0
ファイル: ddz_redenvelope.py プロジェクト: luningcowboy/tuyoo
    def reset(self, datetime_point):
        '''
        重新生成红包,清空上次的领取剩余,重新满池
        :param datetime_point 红包领取时间点
        '''
        r = Redis.readMixHash("dizhu:hongbaorecord", str(datetime_point))
        if r:
            return False

        general_listmap = {}  # {"user:coupon":[...], "item:1007":[...], ...}
        for item in self._general:
            itemtype = item.get("type")
            num = item.get("num")
            if itemtype == "random.split":
                total = item.get("total")
                minv = item.get("min")
                general_listmap[item.get(
                    "itemId")] = Random.getNormalDistributionRandomSequence(
                        total, minv, num)
            elif itemtype == "random.fixed":
                count = item.get("count")
                general_listmap[item.get("itemId")] = [
                    count for _ in xrange(num)
                ]

        vip_listmap = {}  # {"user:coupon":[...], "item:1007":[...], ...}
        for item in self._vip:
            itemtype = item.get("type")
            num = item.get("num")
            if itemtype == "random.split":
                total = item.get("total")
                minv = item.get("min")
                vip_listmap[item.get(
                    "itemId")] = Random.getNormalDistributionRandomSequence(
                        total, minv, num)
            elif itemtype == "random.fixed":
                count = item.get("count")
                vip_listmap[item.get("itemId")] = [count for _ in xrange(num)]

        normaljsonstr = json.dumps(general_listmap)
        vipjsonstr = json.dumps(vip_listmap)
        result = daobase.executeMixLua(_REDIS_LUA_PUSHLIST_NAME, 3,
                                       normaljsonstr, vipjsonstr,
                                       str(datetime_point))
        ftlog.debug("RedEnvelopeWrapper.reset: result=", result)

        return result
コード例 #14
0
ファイル: ddz_redenvelope.py プロジェクト: luningcowboy/tuyoo
 def getLastGetItem(self, userId):
     '''
     获得用户上次领取的道具,若没有则返回false
     :return { "itemId": "user:coupon", "count": 2, "itemDesc": "奖券" }
     '''
     rediskey = self.getRedisKey()
     dictobj = Redis.readJson(userId, rediskey)
     records = dictobj.get("get", {})
     keys = records.keys()
     if len(keys) <= 0:
         return False
     keys.sort()
     lastkey = keys.pop()
     key = "get.%s" % str(lastkey)
     value = Tool.dictGet(dictobj, key)
     ftlog.debug("DataWrapper.getLastGetItem: userId=", userId, "key=", key,
                 "datetime=", str(datetime), "dictobj=", dictobj, "value=",
                 value)
     if value:
         return value
     return False
コード例 #15
0
    def onUserLogin(cls, event):
        ftlog.debug("ItemSender.onUserLogin: event=", event)

        userId = event.userId
        dizhuconf = cls.getDdzActivityConf()

        if not Tool.isGameDdz(userId):
            return

        if cls.isOutdate():
            ftlog.debug("ItemSender.onUserLogin: userId=", userId,
                        "isOutdate=", True)
            return

        # 若clientId不支持,则返回
        isSupport = cls.isClientIdSupport(
            userId, dizhuconf.get('supportContainClientIdOr', []))
        ftlog.debug("ItemSender.onUserLogin: userId=", userId, "isSupport=",
                    isSupport)
        if not isSupport:
            return

        isFirst = Redis.isFirst(userId, cls.getUniqueKey())
        ftlog.debug("ItemSender.onUserLogin: userId=", userId, "isFirst=",
                    isFirst)
        if not isFirst:
            return

        # 发放道具
        ftlog.debug("ItemSender.onUserLogin: userId=", userId, "ddzconf=",
                    dizhuconf)
        mail = dizhuconf.get("mail")
        assets = dizhuconf.get("assets")
        if not assets:
            return

        UserBag.sendAssetsToUser(DIZHU_GAMEID, userId, assets,
                                 'DDZ_ATC_ITEM_SENDER', mail)
        ftlog.debug("ItemSender.onUserLogin: userId=", userId, "send assets=",
                    assets, "mail=", mail)
コード例 #16
0
    def sendingRewardOnceIfNeed(cls, userId):
        ftlog.debug('BindingPhoneHandler.sendingRewardOnceIfNeed:start',
                    'userId=', userId, 'isOutdate=', cls.isOutdate())
        if cls.isOutdate():
            return None

        ## 是否在clientId集合中
        dizhuconf = cls.getActivityConfig()
        clientIdList = dizhuconf.get('clientIdList', [])
        clientId = sessiondata.getClientId(userId)
        ftlog.debug('BindingPhoneHandler.sendingRewardOnceIfNeed:clientId',
                    'userId=', userId, 'clientId=', clientId, 'ok=', clientId
                    in clientIdList)
        if clientId not in clientIdList:
            return None

        ## 是否是第一次领取
        isFirst = Redis.isFirst(userId, cls.getFieldKey())
        ftlog.debug('BindingPhoneHandler.sendingRewardOnceIfNeed:isFirst',
                    'userId=', userId, 'isFirst=', isFirst)
        if not isFirst:
            return None

        ## 发放奖励
        mail = dizhuconf.get('mail')
        assetsList = dizhuconf.get('assets')

        ftlog.debug('BindingPhoneHandler.sendingRewardOnceIfNeed:send',
                    'userId=', userId, 'dizhuconf=', dizhuconf)
        if not assetsList:
            return None

        UserBag.sendAssetsListToUser(DIZHU_GAMEID, userId, assetsList,
                                     cls.EVENT_ID, mail, cls.ACTIVITY_ID)
        ftlog.debug('BindingPhoneHandler.sendingRewardOnceIfNeed:end',
                    'userId=', userId, 'assetsList=', assetsList, 'mail=',
                    mail)

        return None
コード例 #17
0
 def resetCounting(cls, userId):
     '''
     重置计时器到当前时间
     '''
     data = {'timestamp': Tool.datetimeToTimestamp(datetime.now())}
     Redis.writeJson(userId, cls.countingTimerUniqueKey, data)