#!/usr/bin/python # -*- coding: GBK -*- #--------------------------------------------------------------------- # #--------------------------------------------------------------------- ##@package GMT_AddNewGuyCard.py # GMÃüÁîGM¹¤¾ßÉú³ÉÐÂÊÖ¿¨ # # @author wdb # @date 2012-06-21 # @version 1.3 # # @note # @change: "2012-06-27 12:00" wdb È¥³ýÐÂÊÖ¿¨ÀàÐÍ×î´ó29ÏÞÖÆ£¬¸ÄÓÿªÊ¼Ë÷ÒýÈ¡´úÊýÁ¿ # @change: "2012-07-13 10:00" wdb Ð޸ĻñµÃÍæ¼Òid´íÎó # @change: "2012-07-30 11:30" wdb GM»Ø¸´Ï¸»¯£¬´úÂëÓÅ»¯ #--------------------------------------------------------------------- """Version = 2012-07-30 11:30""" #--------------------------------------------------------------------- #µ¼Èë from MangoDBCommon import fix_incomingText from Collections import DataServerPlayerData from Collections.CollectionDefine import * from Common import mylog import GMCommon import md5 import binascii import ctypes import traceback #--------------------------------------------------------------------- #È«¾Ö±äÁ¿ Def_MaxFailCount = 10 # ²åÈëʧ°Ü´óÓÚµÈÓÚ10´Î£¬ÔòÖÕÖ¹²Ù×÷ # µ¥´Î²åÈë×î´óÊýÁ¿ MaxMakeCount = 500 # GM¹¤¾ßÉú³ÉµÄÐÂÊÖ¿¨±êÖ¾ StoreInDBCardFlag = 'n' #--------------------------------------------------------------------- ## ÊÕµ½gmÃüÁîÖ´ÐÐ # @param gmCmdDict:gmÃüÁî×Öµä # @return None def OnExec(gmCmdDict): return GMCommon.Def_DoQueryUserDB, '' ## ²éѯlogdb·µ»Ø # @param logdb:logdb # @param data:´«ÈëµÄÐÅÏ¢ # @param gmCmdDict:gmÃüÁî×Öµä # @return None def LogDBResponse(logdb, data, gmCmdDict): return GMCommon.Def_ParamErr, '' ## ²éѯuserdb·µ»Ø # @param userdb:userdb # @param data:´«ÈëµÄÐÅÏ¢ # @param gmCmdDict:gmÃüÁî×Öµä # @return None def UserDBResponse(userdb, data, gmCmdDict): serverMark = gmCmdDict.get('serverMark', '') codeKey = gmCmdDict.get('codeKey', '') cardType = GMCommon.ToIntDef(gmCmdDict.get('cardType', '')) endIndex = GMCommon.ToIntDef(gmCmdDict.get('endIndex', '')) startIndex = GMCommon.ToIntDef(gmCmdDict.get('startIndex', '')) valiDayStr = gmCmdDict.get('validDay', '') # ²ÎÊý´íÎó if serverMark == '' or codeKey == '' or cardType <= 0 or (endIndex < startIndex): return GMCommon.Def_ParamErr, '' if (endIndex - startIndex + 1) > MaxMakeCount: return GMCommon.Def_MaxLimit, '' # »ñµÃÓÐЧʱ¼ä validTime = '' if valiDayStr != '': validDay = GMCommon.ToIntDef(valiDayStr) # ÉèÖôíÎó if validDay <= 0: return GMCommon.Def_InvalidTime, '' curDateTime = GMCommon.GetDatetimeByPlusDays(validDay) validTime = str(curDateTime).split(".")[0] # ²åÈëʧ°ÜµÄ¿¨Êý¾Ý failCardList = [] failCount = 0 collection = userdb[UCN_DBNewGuyCardState] for index in xrange(startIndex, endIndex + 1): # Éú³Éп¨ cardID = MakeNewCardID(serverMark, codeKey, cardType, index) if cardID == '': return GMCommon.Def_MakeNewCardFail, '' # Éú³É¿¨ºÅ²»Öظ´£¬¿ÉÒÔ²åÈë if collection.find({'CardID':fix_incomingText(cardID)}).count() <= 0: cardObj = DataServerPlayerData.tagDBNewGuyCardState() cardObj.CardIDLen = len(cardID) cardObj.CardID = cardID cardObj.IsUsed = 0 cardObj.UserDataLen = 0 cardObj.UserData = '' cardObj.CardType = cardType cardObj.ValidTime = validTime # ²åÈë³É¹¦£¬¼ÌÐø²åÈë if cardObj.adoInsert(collection): continue failCardList.append(cardID) failCount += 1 #ʧ°Ü´ÎÊýδµ½ÉÏÏÞ if failCount >= Def_MaxFailCount: break # ²Ù×÷½á¹ûÐÅÏ¢£¬·µ»Ø¸ögm¹¤¾ß gmCmdDict['lastIndex'] = index gmCmdDict['failCount'] = failCount gmCmdDict['failCard'] = failCardList # ¼Ç¼Á÷Ïò dataDic = {"PlayerID":0, 'AccID':''} GMCommon.SendEventPack(gmCmdDict.get(GMCommon.Def_GMKey_Type, ''), dataDic, str(gmCmdDict)) if failCount >= Def_MaxFailCount: return GMCommon.Def_InsertFail, gmCmdDict return GMCommon.Def_Success, gmCmdDict ## Éú³É¿¨ºÅº¯Êý # @param serverMark:·þÎñÆ÷±êÖ¾ # @param codeKey:Éú³ÉÃÜÂë # @param cardType:¿¨µÄÀàÐÍ # @param index:¿¨µÄË÷Òý # @return ¿¨ºÅ def MakeNewCardID(serverMark, codeKey, cardType, index): try: markMD5 = md5.md5('wyOu' + serverMark + str(cardType)).hexdigest() realStr = str(index)*2 + markMD5 + codeKey result = md5.md5(realStr).hexdigest() #crcÉú³É crc = binascii.crc32(result) crc = ctypes.c_uint32(crc).value # GM¹¤¾ßÉú³ÉµÄÐÂÊÖ¿¨±êÖ¾ result = StoreInDBCardFlag + hex(crc).replace('0x', '', 1) except BaseException: mylog.warning('GM ->MakeNewCardID error -> %s'%(traceback.format_exc())) return '' return result