#!/usr/bin/python # -*- coding: GBK -*- #------------------------------------------------------------------------------- # #------------------------------------------------------------------------------- # #------------------------------------------------------------------------------- #Íæ¼ÒÊý¾Ý´æÈ¡ #ʹÓÃProtocolStudio CodeMaker MongoDBUserData.py»òMongoDBUserDataSID.pyÉú³É #ÐÞ¸ÄÓÐSIDµÄ±íʱ£¬ÐèҪͬ²½ÐÞ¸Ä CollectionVesionNOÖеÄSID±í°æ±¾ºÅ #------------------------------------------------------------------------------- import pymongo import binascii import CollectionVesionNO from Common import (CommFunc, mylog) import ctypes from ctypes import (c_ushort, c_int, c_ubyte, c_char, c_ulong, Structure, memset, memmove, sizeof, addressof, create_string_buffer, string_at) from MangoDBCommon import( fix_outgoingText, fix_incomingText, fix_incoming, fix_outgoing, addSIDErrorCnt, getSIDErrorCnt, makeSID, checkSID, addADOExceptionCount ) from DBCommon import error import inspect DBConfig = __import__('Config.DBConfig') #------------------------------------------------------ #Íæ¼ÒÏêϸÐÅÏ¢#tagDBPlayer class tagDBPlayer(Structure): _pack_ = 1 _fields_ = [ ('PlayerID', ctypes.c_ulong), ('AccID', ctypes.c_char * 65), ('PlayerName', ctypes.c_char * 33), ('AccState', ctypes.c_ubyte), ('IsDeleted', ctypes.c_ubyte), ('GMLevel', ctypes.c_ubyte), ('Sex', ctypes.c_int), ('Hair', ctypes.c_int), ('HairColor', ctypes.c_int), ('Face', ctypes.c_int), ('FacePic', ctypes.c_int), ('Job', ctypes.c_int), ('RoleType', ctypes.c_ulong), ('ReincarnationLv', ctypes.c_ushort), ('LV', ctypes.c_int), ('TotalExp', ctypes.c_ulong), ('FamilyID', ctypes.c_ulong), ('FamilyName', ctypes.c_char * 33), ('Country', ctypes.c_int), ('TeamHornor', ctypes.c_ulong), ('FamilyHornor', ctypes.c_ulong), ('FamilyActiveValue', ctypes.c_ulong), ('LastWeekFamilyActiveValue', ctypes.c_ulong), ('CountryHornor', ctypes.c_ulong), ('CountryLastWeekHornor', ctypes.c_ulong), ('Mate', ctypes.c_ulong), ('Gold', ctypes.c_ulong), ('GoldPaper', ctypes.c_ulong), ('Silver', ctypes.c_ulong), ('SilverPaper', ctypes.c_ulong), ('FightPoint', ctypes.c_ulong), ('HappyPoint', ctypes.c_ulong), ('MapID', ctypes.c_ulong), ('DataMapID', ctypes.c_ulong), ('CopyMapID', ctypes.c_ulong), ('PosX', ctypes.c_ushort), ('PosY', ctypes.c_ushort), ('FromMapID', ctypes.c_ulong), ('FromCopyMapID', ctypes.c_ulong), ('FromPosX', ctypes.c_ushort), ('FromPosY', ctypes.c_ushort), ('State', ctypes.c_int), ('HP', ctypes.c_ulong), ('MP', ctypes.c_ulong), ('XP', ctypes.c_ulong), ('HPRestoreSetting', ctypes.c_ushort), ('MPRestoreSetting', ctypes.c_ushort), ('FreePoint', ctypes.c_ulong), ('FreeSkillPoint', ctypes.c_ulong), ('STR', ctypes.c_int), ('PNE', ctypes.c_int), ('PHY', ctypes.c_int), ('CON', ctypes.c_int), ('TotalSTR', ctypes.c_int), ('TotalPNE', ctypes.c_int), ('TotalPHY', ctypes.c_int), ('TotalCON', ctypes.c_int), ('Setting', ctypes.c_char * 100), ('PKValue', ctypes.c_ushort), ('FightPower', ctypes.c_ulong), ('ActiveValue', ctypes.c_ushort), ('PlayerType', ctypes.c_ubyte), ('BackpackLV', ctypes.c_ubyte), ('WarehouseLV', ctypes.c_ubyte), ('HaveWarehousePsw', ctypes.c_ubyte), ('WarehousePsw', ctypes.c_char * 15), ('WarehouseLocked', ctypes.c_ubyte), ('WarehouseGold', ctypes.c_ulong), ('WarehouseSilver', ctypes.c_ulong), ('TeamID', ctypes.c_ulong), ('UseGoldType', ctypes.c_ubyte), ('UseSilverType', ctypes.c_ubyte), ('AttackMode', ctypes.c_ubyte), ('RebornMapID', ctypes.c_ushort), ('RebornPosX', ctypes.c_ushort), ('RebornPosY', ctypes.c_ushort), ('WeekOnlineTime', ctypes.c_ulong), ('LastWeekOnlineTime', ctypes.c_ulong), ('LogoffTime', ctypes.c_char * 30), ('IsHideMask', ctypes.c_ubyte), ('DayProcessGameEventCount', ctypes.c_ulong), ('LoginIP', ctypes.c_char * 20), ('LoginTime', ctypes.c_char * 30), ('OnlineTime', ctypes.c_ulong), ('FriendFavor', ctypes.c_ulong), ('TeamPrivity', ctypes.c_ulong), ('OfflineMinutes', ctypes.c_ulong), ('Energy', ctypes.c_ulong), ('ReceivedSalary', ctypes.c_ulong), ('EquipShowSwitch', ctypes.c_ulong), ('LuckValue', ctypes.c_ushort), ('ExAttr1', ctypes.c_ulong), ('ExAttr2', ctypes.c_ulong), ('ExAttr3', ctypes.c_ulong), ('ExAttr4', ctypes.c_ulong), ('ExAttr5', ctypes.c_ulong), ('Faction', ctypes.c_int), ('InfamyValue', ctypes.c_ulong), ('OfficialRank', ctypes.c_ubyte), ('IsFindByLabel', ctypes.c_ubyte), ('IsCloseFriendLabel', ctypes.c_ubyte), ('ChangeCoinPointTotal', ctypes.c_ulong), ('VIPLv', ctypes.c_ubyte), ('VIPLvForPhone', ctypes.c_ubyte), ('PhoneVIPStartTime', ctypes.c_double), ('PhoneVIPEndTime', ctypes.c_double), ('VsRoomId', ctypes.c_ulong), ('ExAttr6', ctypes.c_ulong), ('ExAttr7', ctypes.c_ulong), ('ExAttr8', ctypes.c_ulong), ('ExAttr9', ctypes.c_ulong), ('ExAttr10', ctypes.c_ulong), ('ModelMark', ctypes.c_ulong), ('FromDataMapID', ctypes.c_ulong), ('LastOrderId', ctypes.c_char * 40), ('PrizeCoin', ctypes.c_ulong), ('ExAttr11', ctypes.c_ulong), ('ExAttr12', ctypes.c_ulong), ('ExAttr13', ctypes.c_ulong), ('ExAttr14', ctypes.c_ulong), ('CreateRoleTime', ctypes.c_char * 30), ('LVEx', ctypes.c_ushort), ('LV2', ctypes.c_ushort), ('ExpPoint', ctypes.c_ulong), ('OperateInfo', ctypes.c_ulong), ('Operate', ctypes.c_char * 15), ('ServerID', ctypes.c_ulong), ('ExAttr15', ctypes.c_ulong), ('ExAttr16', ctypes.c_ulong), ('ExAttr17', ctypes.c_ulong), ('ExAttr18', ctypes.c_ulong), ('ExAttr19', ctypes.c_ulong), ('ExAttr20', ctypes.c_ulong), ('HPEx', ctypes.c_ulong), ('FightPowerEx', ctypes.c_ulong), ('ADOResult', ctypes.c_ulong), ('SID', ctypes.c_int), #ÓÃÓÚУÑé ('VerNO', ctypes.c_ulong) #ÓÃÓÚSIDУÑéʱ±È½Ï°æ±¾ºÅ ] def __init__(self): Structure.__init__(self) self.clear() def clear(self): memset(addressof(self), 0, self.getLength()) def readData(self, buf, pos = 0, length = 0): if not pos <= length: msg = error.formatMsg('error', error.ERROR_NO_148, '(pos = %s) > (length = %s)'%(pos, length)) mylog.error(msg) return -1 if len(buf) < pos + self.getLength(): msg = error.formatMsg('error', error.ERROR_NO_149, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength())) mylog.error(msg) self.clear() self.PlayerID, pos = CommFunc.ReadDWORD(buf, pos) self.AccID, pos = CommFunc.ReadString(buf, pos, 65) self.PlayerName, pos = CommFunc.ReadString(buf, pos, 33) self.AccState, pos = CommFunc.ReadBYTE(buf, pos) self.IsDeleted, pos = CommFunc.ReadBYTE(buf, pos) self.GMLevel, pos = CommFunc.ReadBYTE(buf, pos) self.Sex, pos = CommFunc.ReadDWORD(buf, pos) self.Hair, pos = CommFunc.ReadDWORD(buf, pos) self.HairColor, pos = CommFunc.ReadDWORD(buf, pos) self.Face, pos = CommFunc.ReadDWORD(buf, pos) self.FacePic, pos = CommFunc.ReadDWORD(buf, pos) self.Job, pos = CommFunc.ReadDWORD(buf, pos) self.RoleType, pos = CommFunc.ReadDWORD(buf, pos) self.ReincarnationLv, pos = CommFunc.ReadWORD(buf, pos) self.LV, pos = CommFunc.ReadDWORD(buf, pos) self.TotalExp, pos = CommFunc.ReadDWORD(buf, pos) self.FamilyID, pos = CommFunc.ReadDWORD(buf, pos) self.FamilyName, pos = CommFunc.ReadString(buf, pos, 33) self.Country, pos = CommFunc.ReadDWORD(buf, pos) self.TeamHornor, pos = CommFunc.ReadDWORD(buf, pos) self.FamilyHornor, pos = CommFunc.ReadDWORD(buf, pos) self.FamilyActiveValue, pos = CommFunc.ReadDWORD(buf, pos) self.LastWeekFamilyActiveValue, pos = CommFunc.ReadDWORD(buf, pos) self.CountryHornor, pos = CommFunc.ReadDWORD(buf, pos) self.CountryLastWeekHornor, pos = CommFunc.ReadDWORD(buf, pos) self.Mate, pos = CommFunc.ReadDWORD(buf, pos) self.Gold, pos = CommFunc.ReadDWORD(buf, pos) self.GoldPaper, pos = CommFunc.ReadDWORD(buf, pos) self.Silver, pos = CommFunc.ReadDWORD(buf, pos) self.SilverPaper, pos = CommFunc.ReadDWORD(buf, pos) self.FightPoint, pos = CommFunc.ReadDWORD(buf, pos) self.HappyPoint, pos = CommFunc.ReadDWORD(buf, pos) self.MapID, pos = CommFunc.ReadDWORD(buf, pos) self.DataMapID, pos = CommFunc.ReadDWORD(buf, pos) self.CopyMapID, pos = CommFunc.ReadDWORD(buf, pos) self.PosX, pos = CommFunc.ReadWORD(buf, pos) self.PosY, pos = CommFunc.ReadWORD(buf, pos) self.FromMapID, pos = CommFunc.ReadDWORD(buf, pos) self.FromCopyMapID, pos = CommFunc.ReadDWORD(buf, pos) self.FromPosX, pos = CommFunc.ReadWORD(buf, pos) self.FromPosY, pos = CommFunc.ReadWORD(buf, pos) self.State, pos = CommFunc.ReadDWORD(buf, pos) self.HP, pos = CommFunc.ReadDWORD(buf, pos) self.MP, pos = CommFunc.ReadDWORD(buf, pos) self.XP, pos = CommFunc.ReadDWORD(buf, pos) self.HPRestoreSetting, pos = CommFunc.ReadWORD(buf, pos) self.MPRestoreSetting, pos = CommFunc.ReadWORD(buf, pos) self.FreePoint, pos = CommFunc.ReadDWORD(buf, pos) self.FreeSkillPoint, pos = CommFunc.ReadDWORD(buf, pos) self.STR, pos = CommFunc.ReadDWORD(buf, pos) self.PNE, pos = CommFunc.ReadDWORD(buf, pos) self.PHY, pos = CommFunc.ReadDWORD(buf, pos) self.CON, pos = CommFunc.ReadDWORD(buf, pos) self.TotalSTR, pos = CommFunc.ReadDWORD(buf, pos) self.TotalPNE, pos = CommFunc.ReadDWORD(buf, pos) self.TotalPHY, pos = CommFunc.ReadDWORD(buf, pos) self.TotalCON, pos = CommFunc.ReadDWORD(buf, pos) self.Setting, pos = CommFunc.ReadString(buf, pos, 100) self.PKValue, pos = CommFunc.ReadWORD(buf, pos) self.FightPower, pos = CommFunc.ReadDWORD(buf, pos) self.ActiveValue, pos = CommFunc.ReadWORD(buf, pos) self.PlayerType, pos = CommFunc.ReadBYTE(buf, pos) self.BackpackLV, pos = CommFunc.ReadBYTE(buf, pos) self.WarehouseLV, pos = CommFunc.ReadBYTE(buf, pos) self.HaveWarehousePsw, pos = CommFunc.ReadBYTE(buf, pos) self.WarehousePsw, pos = CommFunc.ReadString(buf, pos, 15) self.WarehouseLocked, pos = CommFunc.ReadBYTE(buf, pos) self.WarehouseGold, pos = CommFunc.ReadDWORD(buf, pos) self.WarehouseSilver, pos = CommFunc.ReadDWORD(buf, pos) self.TeamID, pos = CommFunc.ReadDWORD(buf, pos) self.UseGoldType, pos = CommFunc.ReadBYTE(buf, pos) self.UseSilverType, pos = CommFunc.ReadBYTE(buf, pos) self.AttackMode, pos = CommFunc.ReadBYTE(buf, pos) self.RebornMapID, pos = CommFunc.ReadWORD(buf, pos) self.RebornPosX, pos = CommFunc.ReadWORD(buf, pos) self.RebornPosY, pos = CommFunc.ReadWORD(buf, pos) self.WeekOnlineTime, pos = CommFunc.ReadDWORD(buf, pos) self.LastWeekOnlineTime, pos = CommFunc.ReadDWORD(buf, pos) self.LogoffTime, pos = CommFunc.ReadString(buf, pos, 30) self.IsHideMask, pos = CommFunc.ReadBYTE(buf, pos) self.DayProcessGameEventCount, pos = CommFunc.ReadDWORD(buf, pos) self.LoginIP, pos = CommFunc.ReadString(buf, pos, 20) self.LoginTime, pos = CommFunc.ReadString(buf, pos, 30) self.OnlineTime, pos = CommFunc.ReadDWORD(buf, pos) self.FriendFavor, pos = CommFunc.ReadDWORD(buf, pos) self.TeamPrivity, pos = CommFunc.ReadDWORD(buf, pos) self.OfflineMinutes, pos = CommFunc.ReadDWORD(buf, pos) self.Energy, pos = CommFunc.ReadDWORD(buf, pos) self.ReceivedSalary, pos = CommFunc.ReadDWORD(buf, pos) self.EquipShowSwitch, pos = CommFunc.ReadDWORD(buf, pos) self.LuckValue, pos = CommFunc.ReadWORD(buf, pos) self.ExAttr1, pos = CommFunc.ReadDWORD(buf, pos) self.ExAttr2, pos = CommFunc.ReadDWORD(buf, pos) self.ExAttr3, pos = CommFunc.ReadDWORD(buf, pos) self.ExAttr4, pos = CommFunc.ReadDWORD(buf, pos) self.ExAttr5, pos = CommFunc.ReadDWORD(buf, pos) self.Faction, pos = CommFunc.ReadDWORD(buf, pos) self.InfamyValue, pos = CommFunc.ReadDWORD(buf, pos) self.OfficialRank, pos = CommFunc.ReadBYTE(buf, pos) self.IsFindByLabel, pos = CommFunc.ReadBYTE(buf, pos) self.IsCloseFriendLabel, pos = CommFunc.ReadBYTE(buf, pos) self.ChangeCoinPointTotal, pos = CommFunc.ReadDWORD(buf, pos) self.VIPLv, pos = CommFunc.ReadBYTE(buf, pos) self.VIPLvForPhone, pos = CommFunc.ReadBYTE(buf, pos) self.PhoneVIPStartTime, pos = CommFunc.ReadDouble(buf, pos) self.PhoneVIPEndTime, pos = CommFunc.ReadDouble(buf, pos) self.VsRoomId, pos = CommFunc.ReadDWORD(buf, pos) self.ExAttr6, pos = CommFunc.ReadDWORD(buf, pos) self.ExAttr7, pos = CommFunc.ReadDWORD(buf, pos) self.ExAttr8, pos = CommFunc.ReadDWORD(buf, pos) self.ExAttr9, pos = CommFunc.ReadDWORD(buf, pos) self.ExAttr10, pos = CommFunc.ReadDWORD(buf, pos) self.ModelMark, pos = CommFunc.ReadDWORD(buf, pos) self.FromDataMapID, pos = CommFunc.ReadDWORD(buf, pos) self.LastOrderId, pos = CommFunc.ReadString(buf, pos, 40) self.PrizeCoin, pos = CommFunc.ReadDWORD(buf, pos) self.ExAttr11, pos = CommFunc.ReadDWORD(buf, pos) self.ExAttr12, pos = CommFunc.ReadDWORD(buf, pos) self.ExAttr13, pos = CommFunc.ReadDWORD(buf, pos) self.ExAttr14, pos = CommFunc.ReadDWORD(buf, pos) self.CreateRoleTime, pos = CommFunc.ReadString(buf, pos, 30) self.LVEx, pos = CommFunc.ReadWORD(buf, pos) self.LV2, pos = CommFunc.ReadWORD(buf, pos) self.ExpPoint, pos = CommFunc.ReadDWORD(buf, pos) self.OperateInfo, pos = CommFunc.ReadDWORD(buf, pos) self.Operate, pos = CommFunc.ReadString(buf, pos, 15) self.ServerID, pos = CommFunc.ReadDWORD(buf, pos) self.ExAttr15, pos = CommFunc.ReadDWORD(buf, pos) self.ExAttr16, pos = CommFunc.ReadDWORD(buf, pos) self.ExAttr17, pos = CommFunc.ReadDWORD(buf, pos) self.ExAttr18, pos = CommFunc.ReadDWORD(buf, pos) self.ExAttr19, pos = CommFunc.ReadDWORD(buf, pos) self.ExAttr20, pos = CommFunc.ReadDWORD(buf, pos) self.HPEx, pos = CommFunc.ReadDWORD(buf, pos) self.FightPowerEx, pos = CommFunc.ReadDWORD(buf, pos) return self.getLength() def getBuffer(self): buf = create_string_buffer(self.getLength()) memmove(addressof(buf), addressof(self), self.getLength()) return string_at(addressof(buf), self.getLength()) def getLength(self): return sizeof(tagDBPlayer) def getSID(self): return self.SID def getRecord(self): '''×éÖ¯´æ´¢¼Ç¼''' rec = {} rec[u'PlayerID'] = self.PlayerID rec[u'AccID'] = fix_incomingText(self.AccID) rec[u'PlayerName'] = fix_incomingText(self.PlayerName) rec[u'AccState'] = self.AccState rec[u'IsDeleted'] = self.IsDeleted rec[u'GMLevel'] = self.GMLevel rec[u'Sex'] = self.Sex rec[u'Hair'] = self.Hair rec[u'HairColor'] = self.HairColor rec[u'Face'] = self.Face rec[u'FacePic'] = self.FacePic rec[u'Job'] = self.Job rec[u'RoleType'] = self.RoleType rec[u'ReincarnationLv'] = self.ReincarnationLv rec[u'LV'] = self.LV rec[u'TotalExp'] = self.TotalExp rec[u'FamilyID'] = self.FamilyID rec[u'FamilyName'] = fix_incomingText(self.FamilyName) rec[u'Country'] = self.Country rec[u'TeamHornor'] = self.TeamHornor rec[u'FamilyHornor'] = self.FamilyHornor rec[u'FamilyActiveValue'] = self.FamilyActiveValue rec[u'LastWeekFamilyActiveValue'] = self.LastWeekFamilyActiveValue rec[u'CountryHornor'] = self.CountryHornor rec[u'CountryLastWeekHornor'] = self.CountryLastWeekHornor rec[u'Mate'] = self.Mate rec[u'Gold'] = self.Gold rec[u'GoldPaper'] = self.GoldPaper rec[u'Silver'] = self.Silver rec[u'SilverPaper'] = self.SilverPaper rec[u'FightPoint'] = self.FightPoint rec[u'HappyPoint'] = self.HappyPoint rec[u'MapID'] = self.MapID rec[u'DataMapID'] = self.DataMapID rec[u'CopyMapID'] = self.CopyMapID rec[u'PosX'] = self.PosX rec[u'PosY'] = self.PosY rec[u'FromMapID'] = self.FromMapID rec[u'FromCopyMapID'] = self.FromCopyMapID rec[u'FromPosX'] = self.FromPosX rec[u'FromPosY'] = self.FromPosY rec[u'State'] = self.State rec[u'HP'] = self.HP rec[u'MP'] = self.MP rec[u'XP'] = self.XP rec[u'HPRestoreSetting'] = self.HPRestoreSetting rec[u'MPRestoreSetting'] = self.MPRestoreSetting rec[u'FreePoint'] = self.FreePoint rec[u'FreeSkillPoint'] = self.FreeSkillPoint rec[u'STR'] = self.STR rec[u'PNE'] = self.PNE rec[u'PHY'] = self.PHY rec[u'CON'] = self.CON rec[u'TotalSTR'] = self.TotalSTR rec[u'TotalPNE'] = self.TotalPNE rec[u'TotalPHY'] = self.TotalPHY rec[u'TotalCON'] = self.TotalCON rec[u'Setting'] = fix_incomingText(self.Setting) rec[u'PKValue'] = self.PKValue rec[u'FightPower'] = self.FightPower rec[u'ActiveValue'] = self.ActiveValue rec[u'PlayerType'] = self.PlayerType rec[u'BackpackLV'] = self.BackpackLV rec[u'WarehouseLV'] = self.WarehouseLV rec[u'HaveWarehousePsw'] = self.HaveWarehousePsw rec[u'WarehousePsw'] = fix_incomingText(self.WarehousePsw) rec[u'WarehouseLocked'] = self.WarehouseLocked rec[u'WarehouseGold'] = self.WarehouseGold rec[u'WarehouseSilver'] = self.WarehouseSilver rec[u'TeamID'] = self.TeamID rec[u'UseGoldType'] = self.UseGoldType rec[u'UseSilverType'] = self.UseSilverType rec[u'AttackMode'] = self.AttackMode rec[u'RebornMapID'] = self.RebornMapID rec[u'RebornPosX'] = self.RebornPosX rec[u'RebornPosY'] = self.RebornPosY rec[u'WeekOnlineTime'] = self.WeekOnlineTime rec[u'LastWeekOnlineTime'] = self.LastWeekOnlineTime rec[u'LogoffTime'] = fix_incomingText(self.LogoffTime) rec[u'IsHideMask'] = self.IsHideMask rec[u'DayProcessGameEventCount'] = self.DayProcessGameEventCount rec[u'LoginIP'] = fix_incomingText(self.LoginIP) rec[u'LoginTime'] = fix_incomingText(self.LoginTime) rec[u'OnlineTime'] = self.OnlineTime rec[u'FriendFavor'] = self.FriendFavor rec[u'TeamPrivity'] = self.TeamPrivity rec[u'OfflineMinutes'] = self.OfflineMinutes rec[u'Energy'] = self.Energy rec[u'ReceivedSalary'] = self.ReceivedSalary rec[u'EquipShowSwitch'] = self.EquipShowSwitch rec[u'LuckValue'] = self.LuckValue rec[u'ExAttr1'] = self.ExAttr1 rec[u'ExAttr2'] = self.ExAttr2 rec[u'ExAttr3'] = self.ExAttr3 rec[u'ExAttr4'] = self.ExAttr4 rec[u'ExAttr5'] = self.ExAttr5 rec[u'Faction'] = self.Faction rec[u'InfamyValue'] = self.InfamyValue rec[u'OfficialRank'] = self.OfficialRank rec[u'IsFindByLabel'] = self.IsFindByLabel rec[u'IsCloseFriendLabel'] = self.IsCloseFriendLabel rec[u'ChangeCoinPointTotal'] = self.ChangeCoinPointTotal rec[u'VIPLv'] = self.VIPLv rec[u'VIPLvForPhone'] = self.VIPLvForPhone rec[u'PhoneVIPStartTime'] = self.PhoneVIPStartTime rec[u'PhoneVIPEndTime'] = self.PhoneVIPEndTime rec[u'VsRoomId'] = self.VsRoomId rec[u'ExAttr6'] = self.ExAttr6 rec[u'ExAttr7'] = self.ExAttr7 rec[u'ExAttr8'] = self.ExAttr8 rec[u'ExAttr9'] = self.ExAttr9 rec[u'ExAttr10'] = self.ExAttr10 rec[u'ModelMark'] = self.ModelMark rec[u'FromDataMapID'] = self.FromDataMapID rec[u'LastOrderId'] = fix_incomingText(self.LastOrderId) rec[u'PrizeCoin'] = self.PrizeCoin rec[u'ExAttr11'] = self.ExAttr11 rec[u'ExAttr12'] = self.ExAttr12 rec[u'ExAttr13'] = self.ExAttr13 rec[u'ExAttr14'] = self.ExAttr14 rec[u'CreateRoleTime'] = fix_incomingText(self.CreateRoleTime) rec[u'LVEx'] = self.LVEx rec[u'LV2'] = self.LV2 rec[u'ExpPoint'] = self.ExpPoint rec[u'OperateInfo'] = self.OperateInfo rec[u'Operate'] = fix_incomingText(self.Operate) rec[u'ServerID'] = self.ServerID rec[u'ExAttr15'] = self.ExAttr15 rec[u'ExAttr16'] = self.ExAttr16 rec[u'ExAttr17'] = self.ExAttr17 rec[u'ExAttr18'] = self.ExAttr18 rec[u'ExAttr19'] = self.ExAttr19 rec[u'ExAttr20'] = self.ExAttr20 rec[u'HPEx'] = self.HPEx rec[u'FightPowerEx'] = self.FightPowerEx rec[u'SID'] = self.SID rec[u'VerNO'] = self.VerNO return rec def readRecord(self, rec): '''ÓÉÓÚMongoDB¶Á³öÀ´ÊÇunicode,ËùÓÐ×Ö·û´®ÐèÒª½øÐÐת»»''' self.PlayerID = rec.get(u'PlayerID', 0) self.AccID = fix_outgoingText(rec.get(u'AccID', u'')) self.PlayerName = fix_outgoingText(rec.get(u'PlayerName', u'')) self.AccState = rec.get(u'AccState', 0) self.IsDeleted = rec.get(u'IsDeleted', 0) self.GMLevel = rec.get(u'GMLevel', 0) self.Sex = rec.get(u'Sex', 0) self.Hair = rec.get(u'Hair', 0) self.HairColor = rec.get(u'HairColor', 0) self.Face = rec.get(u'Face', 0) self.FacePic = rec.get(u'FacePic', 0) self.Job = rec.get(u'Job', 0) self.RoleType = rec.get(u'RoleType', 0) self.ReincarnationLv = rec.get(u'ReincarnationLv', 0) self.LV = rec.get(u'LV', 0) self.TotalExp = rec.get(u'TotalExp', 0) self.FamilyID = rec.get(u'FamilyID', 0) self.FamilyName = fix_outgoingText(rec.get(u'FamilyName', u'')) self.Country = rec.get(u'Country', 0) self.TeamHornor = rec.get(u'TeamHornor', 0) self.FamilyHornor = rec.get(u'FamilyHornor', 0) self.FamilyActiveValue = rec.get(u'FamilyActiveValue', 0) self.LastWeekFamilyActiveValue = rec.get(u'LastWeekFamilyActiveValue', 0) self.CountryHornor = rec.get(u'CountryHornor', 0) self.CountryLastWeekHornor = rec.get(u'CountryLastWeekHornor', 0) self.Mate = rec.get(u'Mate', 0) self.Gold = rec.get(u'Gold', 0) self.GoldPaper = rec.get(u'GoldPaper', 0) self.Silver = rec.get(u'Silver', 0) self.SilverPaper = rec.get(u'SilverPaper', 0) self.FightPoint = rec.get(u'FightPoint', 0) self.HappyPoint = rec.get(u'HappyPoint', 0) self.MapID = rec.get(u'MapID', 0) self.DataMapID = rec.get(u'DataMapID', 0) self.CopyMapID = rec.get(u'CopyMapID', 0) self.PosX = rec.get(u'PosX', 0) self.PosY = rec.get(u'PosY', 0) self.FromMapID = rec.get(u'FromMapID', 0) self.FromCopyMapID = rec.get(u'FromCopyMapID', 0) self.FromPosX = rec.get(u'FromPosX', 0) self.FromPosY = rec.get(u'FromPosY', 0) self.State = rec.get(u'State', 0) self.HP = rec.get(u'HP', 0) self.MP = rec.get(u'MP', 0) self.XP = rec.get(u'XP', 0) self.HPRestoreSetting = rec.get(u'HPRestoreSetting', 0) self.MPRestoreSetting = rec.get(u'MPRestoreSetting', 0) self.FreePoint = rec.get(u'FreePoint', 0) self.FreeSkillPoint = rec.get(u'FreeSkillPoint', 0) self.STR = rec.get(u'STR', 0) self.PNE = rec.get(u'PNE', 0) self.PHY = rec.get(u'PHY', 0) self.CON = rec.get(u'CON', 0) self.TotalSTR = rec.get(u'TotalSTR', 0) self.TotalPNE = rec.get(u'TotalPNE', 0) self.TotalPHY = rec.get(u'TotalPHY', 0) self.TotalCON = rec.get(u'TotalCON', 0) self.Setting = fix_outgoingText(rec.get(u'Setting', u'')) self.PKValue = rec.get(u'PKValue', 0) self.FightPower = rec.get(u'FightPower', 0) self.ActiveValue = rec.get(u'ActiveValue', 0) self.PlayerType = rec.get(u'PlayerType', 0) self.BackpackLV = rec.get(u'BackpackLV', 0) self.WarehouseLV = rec.get(u'WarehouseLV', 0) self.HaveWarehousePsw = rec.get(u'HaveWarehousePsw', 0) self.WarehousePsw = fix_outgoingText(rec.get(u'WarehousePsw', u'')) self.WarehouseLocked = rec.get(u'WarehouseLocked', 0) self.WarehouseGold = rec.get(u'WarehouseGold', 0) self.WarehouseSilver = rec.get(u'WarehouseSilver', 0) self.TeamID = rec.get(u'TeamID', 0) self.UseGoldType = rec.get(u'UseGoldType', 0) self.UseSilverType = rec.get(u'UseSilverType', 0) self.AttackMode = rec.get(u'AttackMode', 0) self.RebornMapID = rec.get(u'RebornMapID', 0) self.RebornPosX = rec.get(u'RebornPosX', 0) self.RebornPosY = rec.get(u'RebornPosY', 0) self.WeekOnlineTime = rec.get(u'WeekOnlineTime', 0) self.LastWeekOnlineTime = rec.get(u'LastWeekOnlineTime', 0) self.LogoffTime = fix_outgoingText(rec.get(u'LogoffTime', u'')) self.IsHideMask = rec.get(u'IsHideMask', 0) self.DayProcessGameEventCount = rec.get(u'DayProcessGameEventCount', 0) self.LoginIP = fix_outgoingText(rec.get(u'LoginIP', u'')) self.LoginTime = fix_outgoingText(rec.get(u'LoginTime', u'')) self.OnlineTime = rec.get(u'OnlineTime', 0) self.FriendFavor = rec.get(u'FriendFavor', 0) self.TeamPrivity = rec.get(u'TeamPrivity', 0) self.OfflineMinutes = rec.get(u'OfflineMinutes', 0) self.Energy = rec.get(u'Energy', 0) self.ReceivedSalary = rec.get(u'ReceivedSalary', 0) self.EquipShowSwitch = rec.get(u'EquipShowSwitch', 0) self.LuckValue = rec.get(u'LuckValue', 0) self.ExAttr1 = rec.get(u'ExAttr1', 0) self.ExAttr2 = rec.get(u'ExAttr2', 0) self.ExAttr3 = rec.get(u'ExAttr3', 0) self.ExAttr4 = rec.get(u'ExAttr4', 0) self.ExAttr5 = rec.get(u'ExAttr5', 0) self.Faction = rec.get(u'Faction', 0) self.InfamyValue = rec.get(u'InfamyValue', 0) self.OfficialRank = rec.get(u'OfficialRank', 0) self.IsFindByLabel = rec.get(u'IsFindByLabel', 0) self.IsCloseFriendLabel = rec.get(u'IsCloseFriendLabel', 0) self.ChangeCoinPointTotal = rec.get(u'ChangeCoinPointTotal', 0) self.VIPLv = rec.get(u'VIPLv', 0) self.VIPLvForPhone = rec.get(u'VIPLvForPhone', 0) self.PhoneVIPStartTime = rec.get(u'PhoneVIPStartTime', 0) self.PhoneVIPEndTime = rec.get(u'PhoneVIPEndTime', 0) self.VsRoomId = rec.get(u'VsRoomId', 0) self.ExAttr6 = rec.get(u'ExAttr6', 0) self.ExAttr7 = rec.get(u'ExAttr7', 0) self.ExAttr8 = rec.get(u'ExAttr8', 0) self.ExAttr9 = rec.get(u'ExAttr9', 0) self.ExAttr10 = rec.get(u'ExAttr10', 0) self.ModelMark = rec.get(u'ModelMark', 0) self.FromDataMapID = rec.get(u'FromDataMapID', 0) self.LastOrderId = fix_outgoingText(rec.get(u'LastOrderId', u'')) self.PrizeCoin = rec.get(u'PrizeCoin', 0) self.ExAttr11 = rec.get(u'ExAttr11', 0) self.ExAttr12 = rec.get(u'ExAttr12', 0) self.ExAttr13 = rec.get(u'ExAttr13', 0) self.ExAttr14 = rec.get(u'ExAttr14', 0) self.CreateRoleTime = fix_outgoingText(rec.get(u'CreateRoleTime', u'')) self.LVEx = rec.get(u'LVEx', 0) self.LV2 = rec.get(u'LV2', 0) self.ExpPoint = rec.get(u'ExpPoint', 0) self.OperateInfo = rec.get(u'OperateInfo', 0) self.Operate = fix_outgoingText(rec.get(u'Operate', u'')) self.ServerID = rec.get(u'ServerID', 0) self.ExAttr15 = rec.get(u'ExAttr15', 0) self.ExAttr16 = rec.get(u'ExAttr16', 0) self.ExAttr17 = rec.get(u'ExAttr17', 0) self.ExAttr18 = rec.get(u'ExAttr18', 0) self.ExAttr19 = rec.get(u'ExAttr19', 0) self.ExAttr20 = rec.get(u'ExAttr20', 0) self.HPEx = rec.get(u'HPEx', 0) self.FightPowerEx = rec.get(u'FightPowerEx', 0) self.SID = rec['SID'] self.VerNO = rec.get(u'VerNO', 0) def makeSID(self): self.SID = 0 self.VerNO = CollectionVesionNO.tagDBPlayer_VersionNO self.SID = makeSID(self.getBuffer()) def adoLoad(self, collection): '''ʹÓÃKEY²éÕÒ²¢¶ÁÈ¡''' resultCollection = collection.find({'PlayerID':self.PlayerID}) if resultCollection.count() <= 0: return False #ÓÉÓÚÊÇKEY²éÕÒ£¬ËùÓÐÈç¹û´æÔÚ¾ÍÖ»ÓÐÒ»Ìõ¼Ç¼ rec = resultCollection[0] #¶ÁÈ¡Êý¾Ý self.readRecord(rec) return True def adoLoadC(self, collection): '''ʹÓÃKEY²éÕÒ,½øÐÐУÑ飬²¢¶ÁÈ¡''' resultCollection = collection.find({'PlayerID':self.PlayerID}) if resultCollection.count() <= 0: return False #ÓÉÓÚÊÇKEY²éÕÒ£¬ËùÓÐÈç¹û´æÔÚ¾ÍÖ»ÓÐÒ»Ìõ¼Ç¼ rec = resultCollection[0] #¶ÁÈ¡Êý¾Ý self.readRecord(rec) saveSID = self.SID self.SID = 0 if self.VerNO == CollectionVesionNO.tagDBPlayer_VersionNO: if not checkSID(self.getBuffer(), saveSID): addSIDErrorCnt() mylog.warning('SID checksum error!AccID = %s'%rec['AccID']) return False #УÑéͨ¹ý return True def adoLoadCEx(self, collection, query): resultCollection = collection.find(query) if resultCollection.count() <= 0: return False rec = resultCollection[0] #¶ÁÈ¡Êý¾Ý self.readRecord(rec) saveSID = self.SID self.SID = 0 if self.VerNO == CollectionVesionNO.tagDBPlayer_VersionNO: if not checkSID(self.getBuffer(), saveSID): addSIDErrorCnt() mylog.warning('SID checksum error!query = %s'%query) return False #УÑéͨ¹ý return True def adoInsert(self, collection): '''Ö´ÐвåÈë''' trycnt = 0 rec = self.getRecord() while(True): try: collection.insert(rec, False, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_152, 'Insert failed!AccID = %s, error = %s, trycnt = %d'%(self.AccID, err, trycnt)) mylog.error(msg) return False return True def adoInsertC(self, collection): self.makeSID() return self.adoInsert(collection) def adoUpdate(self, collection): '''Ö´ÐиüÐÂ''' trycnt = 0 rec = self.getRecord() while(True): try: collection.update({'PlayerID':self.PlayerID}, {'$set':rec}, False, False, True, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_153, 'Update failed!AccID = %s, error = %s, trycnt = %d'%(self.AccID, err, trycnt)) mylog.error(msg) return False return True def adoUpdateEx(self, collection, spec): '''Ö´ÐиüÐÂ''' trycnt = 0 rec = self.getRecord() while(True): try: collection.update(spec, {'$set':rec}, False, False, True, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_154, 'Update failed!AccID = %s, error = %s, trycnt = %d'%(self.AccID, err, trycnt)) mylog.error(msg) return False return True def adoUpdateC(self, collection): self.makeSID() return self.adoUpdate(collection) def adoUpdateExC(self, collection, spec): self.makeSID() return self.adoUpdateEx(collection, spec) def adoCheckUpdateC(self, collection): '''¸ù¾ÝÇé¿öÖ´ÐвåÈë»ò¸üÐÂ''' resultCollection = collection.find({'PlayerID':self.PlayerID}) if resultCollection.count() <= 0: return self.adoInsertC(collection) return self.adoUpdateC(collection) def adoCheckUpdateCEx(self, collection, spec): '''¸ù¾ÝÇé¿öÖ´ÐвåÈë»ò¸üÐÂ''' resultCollection = collection.find(spec) if resultCollection.count() <= 0: return self.adoInsertC(collection, spec) return self.adoUpdateExC(collection, spec) def getAdoRecordsC(self, resultCollection): result = '' result = CommFunc.WriteDWORD(result, resultCollection.count()) for rec in resultCollection: #УÑéSID self.readRecord(rec) saveSID = self.SID self.SID = 0 if self.VerNO == CollectionVesionNO.tagDBPlayer_VersionNO: if not checkSID(self.getBuffer(), saveSID): addSIDErrorCnt() mylog.warning('SID error AccID = %s'%self.AccID) result += self.getBuffer() return result def adoQueryIndexC(self, collection): '''ÓÃË÷Òý×ֶβéÕÒ''' resultCollection = collection.find({'AccID':fix_incomingText(self.AccID)}) return self.getAdoRecordsC(resultCollection) def adoQueryCustomC(self, collection, queryDict): '''×Ô¶¨Òå²éÕÒ''' resultCollection = collection.find(queryDict) return self.getAdoRecordsC(resultCollection) def adoQueryAllC(self, collection): '''²éѯËùÓÐ''' resultCollection = collection.find() return self.getAdoRecordsC(resultCollection) def adoDeleteByIndex(self, collection): '''¸ù¾ÝË÷Òýɾ³ý''' trycnt = 0 while(True): try: collection.remove({'AccID':fix_incomingText(self.AccID)}) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:AccID = %s"%(self.__class__.__name__, inspect.stack()[0][3], self.AccID)) msg = error.formatMsg('error', error.ERROR_NO_155, 'delete failure!self.AccID = %s, error = %s, trycnt = %d'%(self.AccID, err, trycnt)) mylog.error(msg) return False return True def outputString(self): output = '''//Íæ¼ÒÏêϸÐÅÏ¢#tagDBPlayer: PlayerID = %s, AccID = %s, PlayerName = %s, AccState = %s, IsDeleted = %s, GMLevel = %s, Sex = %s, Hair = %s, HairColor = %s, Face = %s, FacePic = %s, Job = %s, RoleType = %s, ReincarnationLv = %s, LV = %s, TotalExp = %s, FamilyID = %s, FamilyName = %s, Country = %s, TeamHornor = %s, FamilyHornor = %s, FamilyActiveValue = %s, LastWeekFamilyActiveValue = %s, CountryHornor = %s, CountryLastWeekHornor = %s, Mate = %s, Gold = %s, GoldPaper = %s, Silver = %s, SilverPaper = %s, FightPoint = %s, HappyPoint = %s, MapID = %s, DataMapID = %s, CopyMapID = %s, PosX = %s, PosY = %s, FromMapID = %s, FromCopyMapID = %s, FromPosX = %s, FromPosY = %s, State = %s, HP = %s, MP = %s, XP = %s, HPRestoreSetting = %s, MPRestoreSetting = %s, FreePoint = %s, FreeSkillPoint = %s, STR = %s, PNE = %s, PHY = %s, CON = %s, TotalSTR = %s, TotalPNE = %s, TotalPHY = %s, TotalCON = %s, Setting = %s, PKValue = %s, FightPower = %s, ActiveValue = %s, PlayerType = %s, BackpackLV = %s, WarehouseLV = %s, HaveWarehousePsw = %s, WarehousePsw = %s, WarehouseLocked = %s, WarehouseGold = %s, WarehouseSilver = %s, TeamID = %s, UseGoldType = %s, UseSilverType = %s, AttackMode = %s, RebornMapID = %s, RebornPosX = %s, RebornPosY = %s, WeekOnlineTime = %s, LastWeekOnlineTime = %s, LogoffTime = %s, IsHideMask = %s, DayProcessGameEventCount = %s, LoginIP = %s, LoginTime = %s, OnlineTime = %s, FriendFavor = %s, TeamPrivity = %s, OfflineMinutes = %s, Energy = %s, ReceivedSalary = %s, EquipShowSwitch = %s, LuckValue = %s, ExAttr1 = %s, ExAttr2 = %s, ExAttr3 = %s, ExAttr4 = %s, ExAttr5 = %s, Faction = %s, InfamyValue = %s, OfficialRank = %s, IsFindByLabel = %s, IsCloseFriendLabel = %s, ChangeCoinPointTotal = %s, VIPLv = %s, VIPLvForPhone = %s, PhoneVIPStartTime = %s, PhoneVIPEndTime = %s, VsRoomId = %s, ExAttr6 = %s, ExAttr7 = %s, ExAttr8 = %s, ExAttr9 = %s, ExAttr10 = %s, ModelMark = %s, FromDataMapID = %s, LastOrderId = %s, PrizeCoin = %s, ExAttr11 = %s, ExAttr12 = %s, ExAttr13 = %s, ExAttr14 = %s, CreateRoleTime = %s, LVEx = %s, LV2 = %s, ExpPoint = %s, OperateInfo = %s, Operate = %s, ServerID = %s, ExAttr15 = %s, ExAttr16 = %s, ExAttr17 = %s, ExAttr18 = %s, ExAttr19 = %s, ExAttr20 = %s, HPEx = %s, FightPowerEx = %s, ADOResult = %s, SID = %s, VerNO = %s, '''%( self.PlayerID, self.AccID, self.PlayerName, self.AccState, self.IsDeleted, self.GMLevel, self.Sex, self.Hair, self.HairColor, self.Face, self.FacePic, self.Job, self.RoleType, self.ReincarnationLv, self.LV, self.TotalExp, self.FamilyID, self.FamilyName, self.Country, self.TeamHornor, self.FamilyHornor, self.FamilyActiveValue, self.LastWeekFamilyActiveValue, self.CountryHornor, self.CountryLastWeekHornor, self.Mate, self.Gold, self.GoldPaper, self.Silver, self.SilverPaper, self.FightPoint, self.HappyPoint, self.MapID, self.DataMapID, self.CopyMapID, self.PosX, self.PosY, self.FromMapID, self.FromCopyMapID, self.FromPosX, self.FromPosY, self.State, self.HP, self.MP, self.XP, self.HPRestoreSetting, self.MPRestoreSetting, self.FreePoint, self.FreeSkillPoint, self.STR, self.PNE, self.PHY, self.CON, self.TotalSTR, self.TotalPNE, self.TotalPHY, self.TotalCON, self.Setting, self.PKValue, self.FightPower, self.ActiveValue, self.PlayerType, self.BackpackLV, self.WarehouseLV, self.HaveWarehousePsw, self.WarehousePsw, self.WarehouseLocked, self.WarehouseGold, self.WarehouseSilver, self.TeamID, self.UseGoldType, self.UseSilverType, self.AttackMode, self.RebornMapID, self.RebornPosX, self.RebornPosY, self.WeekOnlineTime, self.LastWeekOnlineTime, self.LogoffTime, self.IsHideMask, self.DayProcessGameEventCount, self.LoginIP, self.LoginTime, self.OnlineTime, self.FriendFavor, self.TeamPrivity, self.OfflineMinutes, self.Energy, self.ReceivedSalary, self.EquipShowSwitch, self.LuckValue, self.ExAttr1, self.ExAttr2, self.ExAttr3, self.ExAttr4, self.ExAttr5, self.Faction, self.InfamyValue, self.OfficialRank, self.IsFindByLabel, self.IsCloseFriendLabel, self.ChangeCoinPointTotal, self.VIPLv, self.VIPLvForPhone, self.PhoneVIPStartTime, self.PhoneVIPEndTime, self.VsRoomId, self.ExAttr6, self.ExAttr7, self.ExAttr8, self.ExAttr9, self.ExAttr10, self.ModelMark, self.FromDataMapID, self.LastOrderId, self.PrizeCoin, self.ExAttr11, self.ExAttr12, self.ExAttr13, self.ExAttr14, self.CreateRoleTime, self.LVEx, self.LV2, self.ExpPoint, self.OperateInfo, self.Operate, self.ServerID, self.ExAttr15, self.ExAttr16, self.ExAttr17, self.ExAttr18, self.ExAttr19, self.ExAttr20, self.HPEx, self.FightPowerEx, self.ADOResult, self.SID, self.VerNO ) return output def dumpString(self): output = '''%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s'''%( self.PlayerID, self.AccID, self.PlayerName, self.AccState, self.IsDeleted, self.GMLevel, self.Sex, self.Hair, self.HairColor, self.Face, self.FacePic, self.Job, self.RoleType, self.ReincarnationLv, self.LV, self.TotalExp, self.FamilyID, self.FamilyName, self.Country, self.TeamHornor, self.FamilyHornor, self.FamilyActiveValue, self.LastWeekFamilyActiveValue, self.CountryHornor, self.CountryLastWeekHornor, self.Mate, self.Gold, self.GoldPaper, self.Silver, self.SilverPaper, self.FightPoint, self.HappyPoint, self.MapID, self.DataMapID, self.CopyMapID, self.PosX, self.PosY, self.FromMapID, self.FromCopyMapID, self.FromPosX, self.FromPosY, self.State, self.HP, self.MP, self.XP, self.HPRestoreSetting, self.MPRestoreSetting, self.FreePoint, self.FreeSkillPoint, self.STR, self.PNE, self.PHY, self.CON, self.TotalSTR, self.TotalPNE, self.TotalPHY, self.TotalCON, self.Setting, self.PKValue, self.FightPower, self.ActiveValue, self.PlayerType, self.BackpackLV, self.WarehouseLV, self.HaveWarehousePsw, self.WarehousePsw, self.WarehouseLocked, self.WarehouseGold, self.WarehouseSilver, self.TeamID, self.UseGoldType, self.UseSilverType, self.AttackMode, self.RebornMapID, self.RebornPosX, self.RebornPosY, self.WeekOnlineTime, self.LastWeekOnlineTime, self.LogoffTime, self.IsHideMask, self.DayProcessGameEventCount, self.LoginIP, self.LoginTime, self.OnlineTime, self.FriendFavor, self.TeamPrivity, self.OfflineMinutes, self.Energy, self.ReceivedSalary, self.EquipShowSwitch, self.LuckValue, self.ExAttr1, self.ExAttr2, self.ExAttr3, self.ExAttr4, self.ExAttr5, self.Faction, self.InfamyValue, self.OfficialRank, self.IsFindByLabel, self.IsCloseFriendLabel, self.ChangeCoinPointTotal, self.VIPLv, self.VIPLvForPhone, self.PhoneVIPStartTime, self.PhoneVIPEndTime, self.VsRoomId, self.ExAttr6, self.ExAttr7, self.ExAttr8, self.ExAttr9, self.ExAttr10, self.ModelMark, self.FromDataMapID, self.LastOrderId, self.PrizeCoin, self.ExAttr11, self.ExAttr12, self.ExAttr13, self.ExAttr14, self.CreateRoleTime, self.LVEx, self.LV2, self.ExpPoint, self.OperateInfo, self.Operate, self.ServerID, self.ExAttr15, self.ExAttr16, self.ExAttr17, self.ExAttr18, self.ExAttr19, self.ExAttr20, self.HPEx, self.FightPowerEx, ) return output #CharÊý×éÀàÐÍSet½Ó¿Ú,ʹÓøýӿڶԴËÀàÐÍÊý¾Ý¸³Öµ£¬·ÀÖ¹¸³ÖµµÄÊý¾Ý¹ý³¤±¨´í def SetAccID(self,Str): if len(Str)<=65: self.AccID = Str else: self.AccID = Str[:65] def SetPlayerName(self,Str): if len(Str)<=33: self.PlayerName = Str else: self.PlayerName = Str[:33] def SetFamilyName(self,Str): if len(Str)<=33: self.FamilyName = Str else: self.FamilyName = Str[:33] def SetSetting(self,Str): if len(Str)<=100: self.Setting = Str else: self.Setting = Str[:100] def SetWarehousePsw(self,Str): if len(Str)<=15: self.WarehousePsw = Str else: self.WarehousePsw = Str[:15] def SetLogoffTime(self,Str): if len(Str)<=30: self.LogoffTime = Str else: self.LogoffTime = Str[:30] def SetLoginIP(self,Str): if len(Str)<=20: self.LoginIP = Str else: self.LoginIP = Str[:20] def SetLoginTime(self,Str): if len(Str)<=30: self.LoginTime = Str else: self.LoginTime = Str[:30] def SetLastOrderId(self,Str): if len(Str)<=40: self.LastOrderId = Str else: self.LastOrderId = Str[:40] def SetCreateRoleTime(self,Str): if len(Str)<=30: self.CreateRoleTime = Str else: self.CreateRoleTime = Str[:30] def SetOperate(self,Str): if len(Str)<=15: self.Operate = Str else: self.Operate = Str[:15] #---------------------------------------------------------------------- #Íæ¼ÒÕË»§ÐÅÏ¢#tagDSAccount class tagDSAccount(Structure): _pack_ = 1 _fields_ = [ ('ACCID', ctypes.c_char * 65), ('Psw', ctypes.c_char * 33), ('PswLV2', ctypes.c_char * 33), ('LogNum', ctypes.c_ulong), ('Adult', ctypes.c_ubyte), ('RegIP', ctypes.c_char * 20), ('Presentee', ctypes.c_ubyte), ('TelLockState', ctypes.c_ubyte), ('GeTuiClientID', ctypes.c_char * 33), ('TotalSavePoint', ctypes.c_ulong), ('BalanceInfo', ctypes.c_ulong), ('AppID', ctypes.c_char * 20), ('AreaID', ctypes.c_ulong), ('fobbiddenAccount', ctypes.c_ubyte), ('ApplyingAdult', ctypes.c_ubyte), ('SpreadedUser', ctypes.c_ubyte), ('Spreader', ctypes.c_ubyte), ('onlineSMSNotice', ctypes.c_ubyte), ('EkeyType', ctypes.c_ubyte), ('EkeyBindFlag', ctypes.c_ubyte), ('IPBan', ctypes.c_ubyte), ('RegisterTime', ctypes.c_char * 20), ('LastLoginTime', ctypes.c_char * 20), ('Operator', ctypes.c_char * 15), ('AccountID', ctypes.c_ulong), ('TokenExpire', ctypes.c_char * 20), ('Phone', ctypes.c_ubyte), ('DeviceFlag', ctypes.c_char * 33), ('ClientVersion', ctypes.c_char * 25), ('ADOResult', ctypes.c_ulong), ('SID', ctypes.c_int), #ÓÃÓÚУÑé ('VerNO', ctypes.c_ulong) #ÓÃÓÚSIDУÑéʱ±È½Ï°æ±¾ºÅ ] def __init__(self): Structure.__init__(self) self.clear() def clear(self): memset(addressof(self), 0, self.getLength()) def readData(self, buf, pos = 0, length = 0): if not pos <= length: msg = error.formatMsg('error', error.ERROR_NO_148, '(pos = %s) > (length = %s)'%(pos, length)) mylog.error(msg) return -1 if len(buf) < pos + self.getLength(): msg = error.formatMsg('error', error.ERROR_NO_149, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength())) mylog.error(msg) self.clear() self.ACCID, pos = CommFunc.ReadString(buf, pos, 65) self.Psw, pos = CommFunc.ReadString(buf, pos, 33) self.PswLV2, pos = CommFunc.ReadString(buf, pos, 33) self.LogNum, pos = CommFunc.ReadDWORD(buf, pos) self.Adult, pos = CommFunc.ReadBYTE(buf, pos) self.RegIP, pos = CommFunc.ReadString(buf, pos, 20) self.Presentee, pos = CommFunc.ReadBYTE(buf, pos) self.TelLockState, pos = CommFunc.ReadBYTE(buf, pos) self.GeTuiClientID, pos = CommFunc.ReadString(buf, pos, 33) self.TotalSavePoint, pos = CommFunc.ReadDWORD(buf, pos) self.BalanceInfo, pos = CommFunc.ReadDWORD(buf, pos) self.AppID, pos = CommFunc.ReadString(buf, pos, 20) self.AreaID, pos = CommFunc.ReadDWORD(buf, pos) self.fobbiddenAccount, pos = CommFunc.ReadBYTE(buf, pos) self.ApplyingAdult, pos = CommFunc.ReadBYTE(buf, pos) self.SpreadedUser, pos = CommFunc.ReadBYTE(buf, pos) self.Spreader, pos = CommFunc.ReadBYTE(buf, pos) self.onlineSMSNotice, pos = CommFunc.ReadBYTE(buf, pos) self.EkeyType, pos = CommFunc.ReadBYTE(buf, pos) self.EkeyBindFlag, pos = CommFunc.ReadBYTE(buf, pos) self.IPBan, pos = CommFunc.ReadBYTE(buf, pos) self.RegisterTime, pos = CommFunc.ReadString(buf, pos, 20) self.LastLoginTime, pos = CommFunc.ReadString(buf, pos, 20) self.Operator, pos = CommFunc.ReadString(buf, pos, 15) self.AccountID, pos = CommFunc.ReadDWORD(buf, pos) self.TokenExpire, pos = CommFunc.ReadString(buf, pos, 20) self.Phone, pos = CommFunc.ReadBYTE(buf, pos) self.DeviceFlag, pos = CommFunc.ReadString(buf, pos, 33) self.ClientVersion, pos = CommFunc.ReadString(buf, pos, 25) return self.getLength() def getBuffer(self): buf = create_string_buffer(self.getLength()) memmove(addressof(buf), addressof(self), self.getLength()) return string_at(addressof(buf), self.getLength()) def getLength(self): return sizeof(tagDSAccount) def getSID(self): return self.SID def getRecord(self): '''×éÖ¯´æ´¢¼Ç¼''' rec = {} rec[u'ACCID'] = fix_incomingText(self.ACCID) rec[u'Psw'] = fix_incomingText(self.Psw) rec[u'PswLV2'] = fix_incomingText(self.PswLV2) rec[u'LogNum'] = self.LogNum rec[u'Adult'] = self.Adult rec[u'RegIP'] = fix_incomingText(self.RegIP) rec[u'Presentee'] = self.Presentee rec[u'TelLockState'] = self.TelLockState rec[u'GeTuiClientID'] = fix_incomingText(self.GeTuiClientID) rec[u'TotalSavePoint'] = self.TotalSavePoint rec[u'BalanceInfo'] = self.BalanceInfo rec[u'AppID'] = fix_incomingText(self.AppID) rec[u'AreaID'] = self.AreaID rec[u'fobbiddenAccount'] = self.fobbiddenAccount rec[u'ApplyingAdult'] = self.ApplyingAdult rec[u'SpreadedUser'] = self.SpreadedUser rec[u'Spreader'] = self.Spreader rec[u'onlineSMSNotice'] = self.onlineSMSNotice rec[u'EkeyType'] = self.EkeyType rec[u'EkeyBindFlag'] = self.EkeyBindFlag rec[u'IPBan'] = self.IPBan rec[u'RegisterTime'] = fix_incomingText(self.RegisterTime) rec[u'LastLoginTime'] = fix_incomingText(self.LastLoginTime) rec[u'Operator'] = fix_incomingText(self.Operator) rec[u'AccountID'] = self.AccountID rec[u'TokenExpire'] = fix_incomingText(self.TokenExpire) rec[u'Phone'] = self.Phone rec[u'DeviceFlag'] = fix_incomingText(self.DeviceFlag) rec[u'ClientVersion'] = fix_incomingText(self.ClientVersion) rec[u'SID'] = self.SID rec[u'VerNO'] = self.VerNO return rec def readRecord(self, rec): '''ÓÉÓÚMongoDB¶Á³öÀ´ÊÇunicode,ËùÓÐ×Ö·û´®ÐèÒª½øÐÐת»»''' self.ACCID = fix_outgoingText(rec.get(u'ACCID', u'')) self.Psw = fix_outgoingText(rec.get(u'Psw', u'')) self.PswLV2 = fix_outgoingText(rec.get(u'PswLV2', u'')) self.LogNum = rec.get(u'LogNum', 0) self.Adult = rec.get(u'Adult', 0) self.RegIP = fix_outgoingText(rec.get(u'RegIP', u'')) self.Presentee = rec.get(u'Presentee', 0) self.TelLockState = rec.get(u'TelLockState', 0) self.GeTuiClientID = fix_outgoingText(rec.get(u'GeTuiClientID', u'')) self.TotalSavePoint = rec.get(u'TotalSavePoint', 0) self.BalanceInfo = rec.get(u'BalanceInfo', 0) self.AppID = fix_outgoingText(rec.get(u'AppID', u'')) self.AreaID = rec.get(u'AreaID', 0) self.fobbiddenAccount = rec.get(u'fobbiddenAccount', 0) self.ApplyingAdult = rec.get(u'ApplyingAdult', 0) self.SpreadedUser = rec.get(u'SpreadedUser', 0) self.Spreader = rec.get(u'Spreader', 0) self.onlineSMSNotice = rec.get(u'onlineSMSNotice', 0) self.EkeyType = rec.get(u'EkeyType', 0) self.EkeyBindFlag = rec.get(u'EkeyBindFlag', 0) self.IPBan = rec.get(u'IPBan', 0) self.RegisterTime = fix_outgoingText(rec.get(u'RegisterTime', u'')) self.LastLoginTime = fix_outgoingText(rec.get(u'LastLoginTime', u'')) self.Operator = fix_outgoingText(rec.get(u'Operator', u'')) self.AccountID = rec.get(u'AccountID', 0) self.TokenExpire = fix_outgoingText(rec.get(u'TokenExpire', u'')) self.Phone = rec.get(u'Phone', 0) self.DeviceFlag = fix_outgoingText(rec.get(u'DeviceFlag', u'')) self.ClientVersion = fix_outgoingText(rec.get(u'ClientVersion', u'')) self.SID = rec['SID'] self.VerNO = rec.get(u'VerNO', 0) def makeSID(self): self.SID = 0 self.VerNO = CollectionVesionNO.tagDSAccount_VersionNO self.SID = makeSID(self.getBuffer()) def adoLoad(self, collection): '''ʹÓÃKEY²éÕÒ²¢¶ÁÈ¡''' resultCollection = collection.find({'ACCID':fix_incomingText(self.ACCID)}) if resultCollection.count() <= 0: return False #ÓÉÓÚÊÇKEY²éÕÒ£¬ËùÓÐÈç¹û´æÔÚ¾ÍÖ»ÓÐÒ»Ìõ¼Ç¼ rec = resultCollection[0] #¶ÁÈ¡Êý¾Ý self.readRecord(rec) return True def adoLoadC(self, collection): '''ʹÓÃKEY²éÕÒ,½øÐÐУÑ飬²¢¶ÁÈ¡''' resultCollection = collection.find({'ACCID':fix_incomingText(self.ACCID)}) if resultCollection.count() <= 0: return False #ÓÉÓÚÊÇKEY²éÕÒ£¬ËùÓÐÈç¹û´æÔÚ¾ÍÖ»ÓÐÒ»Ìõ¼Ç¼ rec = resultCollection[0] #¶ÁÈ¡Êý¾Ý self.readRecord(rec) saveSID = self.SID self.SID = 0 if self.VerNO == CollectionVesionNO.tagDSAccount_VersionNO: if not checkSID(self.getBuffer(), saveSID): addSIDErrorCnt() mylog.warning('SID checksum error!ACCID = %s'%rec['ACCID']) return False #УÑéͨ¹ý return True def adoLoadCEx(self, collection, query): resultCollection = collection.find(query) if resultCollection.count() <= 0: return False rec = resultCollection[0] #¶ÁÈ¡Êý¾Ý self.readRecord(rec) saveSID = self.SID self.SID = 0 if self.VerNO == CollectionVesionNO.tagDSAccount_VersionNO: if not checkSID(self.getBuffer(), saveSID): addSIDErrorCnt() mylog.warning('SID checksum error!query = %s'%query) return False #УÑéͨ¹ý return True def adoInsert(self, collection): '''Ö´ÐвåÈë''' trycnt = 0 rec = self.getRecord() while(True): try: collection.insert(rec, False, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_152, 'Insert failed!ACCID = %s, error = %s, trycnt = %d'%(self.ACCID, err, trycnt)) mylog.error(msg) return False return True def adoInsertC(self, collection): self.makeSID() return self.adoInsert(collection) def adoUpdate(self, collection): '''Ö´ÐиüÐÂ''' trycnt = 0 rec = self.getRecord() while(True): try: collection.update({'ACCID':fix_incomingText(self.ACCID)}, {'$set':rec}, False, False, True, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_153, 'Update failed!ACCID = %s, error = %s, trycnt = %d'%(self.ACCID, err, trycnt)) mylog.error(msg) return False return True def adoUpdateEx(self, collection, spec): '''Ö´ÐиüÐÂ''' trycnt = 0 rec = self.getRecord() while(True): try: collection.update(spec, {'$set':rec}, False, False, True, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_154, 'Update failed!ACCID = %s, error = %s, trycnt = %d'%(self.ACCID, err, trycnt)) mylog.error(msg) return False return True def adoUpdateC(self, collection): self.makeSID() return self.adoUpdate(collection) def adoUpdateExC(self, collection, spec): self.makeSID() return self.adoUpdateEx(collection, spec) def adoCheckUpdateC(self, collection): '''¸ù¾ÝÇé¿öÖ´ÐвåÈë»ò¸üÐÂ''' resultCollection = collection.find({'ACCID':fix_incomingText(self.ACCID)}) if resultCollection.count() <= 0: return self.adoInsertC(collection) return self.adoUpdateC(collection) def adoCheckUpdateCEx(self, collection, spec): '''¸ù¾ÝÇé¿öÖ´ÐвåÈë»ò¸üÐÂ''' resultCollection = collection.find(spec) if resultCollection.count() <= 0: return self.adoInsertC(collection, spec) return self.adoUpdateExC(collection, spec) def getAdoRecordsC(self, resultCollection): result = '' result = CommFunc.WriteDWORD(result, resultCollection.count()) for rec in resultCollection: #УÑéSID self.readRecord(rec) saveSID = self.SID self.SID = 0 if self.VerNO == CollectionVesionNO.tagDSAccount_VersionNO: if not checkSID(self.getBuffer(), saveSID): addSIDErrorCnt() mylog.warning('SID error ACCID = %s'%self.ACCID) result += self.getBuffer() return result def adoQueryIndexC(self, collection): '''ÓÃË÷Òý×ֶβéÕÒ''' resultCollection = collection.find({'ACCID':fix_incomingText(self.ACCID)}) return self.getAdoRecordsC(resultCollection) def adoQueryCustomC(self, collection, queryDict): '''×Ô¶¨Òå²éÕÒ''' resultCollection = collection.find(queryDict) return self.getAdoRecordsC(resultCollection) def adoQueryAllC(self, collection): '''²éѯËùÓÐ''' resultCollection = collection.find() return self.getAdoRecordsC(resultCollection) def adoDeleteByIndex(self, collection): '''¸ù¾ÝË÷Òýɾ³ý''' trycnt = 0 while(True): try: collection.remove({'ACCID':fix_incomingText(self.ACCID)}) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:ACCID = %s"%(self.__class__.__name__, inspect.stack()[0][3], self.ACCID)) msg = error.formatMsg('error', error.ERROR_NO_155, 'delete failure!self.ACCID = %s, error = %s, trycnt = %d'%(self.ACCID, err, trycnt)) mylog.error(msg) return False return True def outputString(self): output = '''//Íæ¼ÒÕË»§ÐÅÏ¢#tagDSAccount: ACCID = %s, Psw = %s, PswLV2 = %s, LogNum = %s, Adult = %s, RegIP = %s, Presentee = %s, TelLockState = %s, GeTuiClientID = %s, TotalSavePoint = %s, BalanceInfo = %s, AppID = %s, AreaID = %s, fobbiddenAccount = %s, ApplyingAdult = %s, SpreadedUser = %s, Spreader = %s, onlineSMSNotice = %s, EkeyType = %s, EkeyBindFlag = %s, IPBan = %s, RegisterTime = %s, LastLoginTime = %s, Operator = %s, AccountID = %s, TokenExpire = %s, Phone = %s, DeviceFlag = %s, ClientVersion = %s, ADOResult = %s, SID = %s, VerNO = %s, '''%( self.ACCID, self.Psw, self.PswLV2, self.LogNum, self.Adult, self.RegIP, self.Presentee, self.TelLockState, self.GeTuiClientID, self.TotalSavePoint, self.BalanceInfo, self.AppID, self.AreaID, self.fobbiddenAccount, self.ApplyingAdult, self.SpreadedUser, self.Spreader, self.onlineSMSNotice, self.EkeyType, self.EkeyBindFlag, self.IPBan, self.RegisterTime, self.LastLoginTime, self.Operator, self.AccountID, self.TokenExpire, self.Phone, self.DeviceFlag, self.ClientVersion, self.ADOResult, self.SID, self.VerNO ) return output def dumpString(self): output = '''%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s'''%( self.ACCID, self.Psw, self.PswLV2, self.LogNum, self.Adult, self.RegIP, self.Presentee, self.TelLockState, self.GeTuiClientID, self.TotalSavePoint, self.BalanceInfo, self.AppID, self.AreaID, self.fobbiddenAccount, self.ApplyingAdult, self.SpreadedUser, self.Spreader, self.onlineSMSNotice, self.EkeyType, self.EkeyBindFlag, self.IPBan, self.RegisterTime, self.LastLoginTime, self.Operator, self.AccountID, self.TokenExpire, self.Phone, self.DeviceFlag, self.ClientVersion, ) return output #CharÊý×éÀàÐÍSet½Ó¿Ú,ʹÓøýӿڶԴËÀàÐÍÊý¾Ý¸³Öµ£¬·ÀÖ¹¸³ÖµµÄÊý¾Ý¹ý³¤±¨´í def SetACCID(self,Str): if len(Str)<=65: self.ACCID = Str else: self.ACCID = Str[:65] def SetPsw(self,Str): if len(Str)<=33: self.Psw = Str else: self.Psw = Str[:33] def SetPswLV2(self,Str): if len(Str)<=33: self.PswLV2 = Str else: self.PswLV2 = Str[:33] def SetRegIP(self,Str): if len(Str)<=20: self.RegIP = Str else: self.RegIP = Str[:20] def SetGeTuiClientID(self,Str): if len(Str)<=33: self.GeTuiClientID = Str else: self.GeTuiClientID = Str[:33] def SetAppID(self,Str): if len(Str)<=20: self.AppID = Str else: self.AppID = Str[:20] def SetRegisterTime(self,Str): if len(Str)<=20: self.RegisterTime = Str else: self.RegisterTime = Str[:20] def SetLastLoginTime(self,Str): if len(Str)<=20: self.LastLoginTime = Str else: self.LastLoginTime = Str[:20] def SetOperator(self,Str): if len(Str)<=15: self.Operator = Str else: self.Operator = Str[:15] def SetTokenExpire(self,Str): if len(Str)<=20: self.TokenExpire = Str else: self.TokenExpire = Str[:20] def SetDeviceFlag(self,Str): if len(Str)<=33: self.DeviceFlag = Str else: self.DeviceFlag = Str[:33] def SetClientVersion(self,Str): if len(Str)<=25: self.ClientVersion = Str else: self.ClientVersion = Str[:25] #------------------------------------------------------ #ÈËÎïÎïÆ·#tagRoleItem class tagRoleItem(Structure): _pack_ = 1 _fields_ = [ ('ItemGUID', ctypes.c_char * 40), ('PlayerID', ctypes.c_ulong), ('ItemTypeID', ctypes.c_ulong), ('Count', ctypes.c_ushort), ('IsLocked', ctypes.c_ubyte), ('ItemPlaceType', ctypes.c_ubyte), ('ItemPlaceIndex', ctypes.c_ushort), ('IsBind', ctypes.c_ubyte), ('GearScore', ctypes.c_ulong), ('RemainHour', ctypes.c_ushort), ('CreateTime', ctypes.c_char * 30), ('UserDataLen', ctypes.c_ulong), ('UserData', ctypes.c_char_p), ('IsSuite', ctypes.c_ubyte), ('ADOResult', ctypes.c_ulong), ('SID', ctypes.c_int), #ÓÃÓÚУÑé ('VerNO', ctypes.c_ulong) #ÓÃÓÚSIDУÑéʱ±È½Ï°æ±¾ºÅ ] def __init__(self): Structure.__init__(self) self.clear() def clear(self): self.ItemGUID = '' self.PlayerID = 0 self.ItemTypeID = 0 self.Count = 0 self.IsLocked = 0 self.ItemPlaceType = 0 self.ItemPlaceIndex = 0 self.IsBind = 0 self.GearScore = 0 self.RemainHour = 0 self.CreateTime = '' self.UserDataLen = 0 self.UserData = '' self.IsSuite = 0 def readData(self, buf, pos = 0, length = 0): if not pos <= length: msg = error.formatMsg('error', error.ERROR_NO_148, '(pos = %s) > (length = %s)'%(pos, length)) mylog.error(msg) return -1 if len(buf) < pos + self.getLength(): msg = error.formatMsg('error', error.ERROR_NO_149, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength())) mylog.error(msg) self.clear() self.ItemGUID, pos = CommFunc.ReadString(buf, pos, 40) self.PlayerID, pos = CommFunc.ReadDWORD(buf, pos) self.ItemTypeID, pos = CommFunc.ReadDWORD(buf, pos) self.Count, pos = CommFunc.ReadWORD(buf, pos) self.IsLocked, pos = CommFunc.ReadBYTE(buf, pos) self.ItemPlaceType, pos = CommFunc.ReadBYTE(buf, pos) self.ItemPlaceIndex, pos = CommFunc.ReadWORD(buf, pos) self.IsBind, pos = CommFunc.ReadBYTE(buf, pos) self.GearScore, pos = CommFunc.ReadDWORD(buf, pos) self.RemainHour, pos = CommFunc.ReadWORD(buf, pos) self.CreateTime, pos = CommFunc.ReadString(buf, pos, 30) self.UserDataLen, pos = CommFunc.ReadDWORD(buf, pos) tmp, pos = CommFunc.ReadString(buf, pos, self.UserDataLen) self.UserData = ctypes.c_char_p(tmp) self.IsSuite, pos = CommFunc.ReadBYTE(buf, pos) return self.getLength() def getBuffer(self): buf = '' buf = CommFunc.WriteString(buf, sizeof(ctypes.c_char) * 40, self.ItemGUID) buf = CommFunc.WriteDWORD(buf, self.PlayerID) buf = CommFunc.WriteDWORD(buf, self.ItemTypeID) buf = CommFunc.WriteWORD(buf, self.Count) buf = CommFunc.WriteBYTE(buf, self.IsLocked) buf = CommFunc.WriteBYTE(buf, self.ItemPlaceType) buf = CommFunc.WriteWORD(buf, self.ItemPlaceIndex) buf = CommFunc.WriteBYTE(buf, self.IsBind) buf = CommFunc.WriteDWORD(buf, self.GearScore) buf = CommFunc.WriteWORD(buf, self.RemainHour) buf = CommFunc.WriteString(buf, sizeof(ctypes.c_char) * 30, self.CreateTime) buf = CommFunc.WriteDWORD(buf, self.UserDataLen) buf = CommFunc.WriteString(buf, self.UserDataLen, self.UserData) buf = CommFunc.WriteBYTE(buf, self.IsSuite) return buf def getLength(self): length = 0 length += sizeof(ctypes.c_char) * 40 length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ushort) length += sizeof(ctypes.c_ubyte) length += sizeof(ctypes.c_ubyte) length += sizeof(ctypes.c_ushort) length += sizeof(ctypes.c_ubyte) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ushort) length += sizeof(ctypes.c_char) * 30 length += sizeof(ctypes.c_ulong) length += self.UserDataLen length += sizeof(ctypes.c_ubyte) return length def getSID(self): return self.SID def getRecord(self): '''×éÖ¯´æ´¢¼Ç¼''' rec = {} rec[u'ItemGUID'] = fix_incomingText(self.ItemGUID) rec[u'PlayerID'] = self.PlayerID rec[u'ItemTypeID'] = self.ItemTypeID rec[u'Count'] = self.Count rec[u'IsLocked'] = self.IsLocked rec[u'ItemPlaceType'] = self.ItemPlaceType rec[u'ItemPlaceIndex'] = self.ItemPlaceIndex rec[u'IsBind'] = self.IsBind rec[u'GearScore'] = self.GearScore rec[u'RemainHour'] = self.RemainHour rec[u'CreateTime'] = fix_incomingText(self.CreateTime) rec[u'UserDataLen'] = self.UserDataLen rec[u'UserData'] = fix_incomingText(self.UserData) rec[u'IsSuite'] = self.IsSuite rec[u'SID'] = self.SID rec[u'VerNO'] = self.VerNO return rec def readRecord(self, rec): '''ÓÉÓÚMongoDB¶Á³öÀ´ÊÇunicode,ËùÓÐ×Ö·û´®ÐèÒª½øÐÐת»»''' self.ItemGUID = fix_outgoingText(rec.get(u'ItemGUID', u'')) self.PlayerID = rec.get(u'PlayerID', 0) self.ItemTypeID = rec.get(u'ItemTypeID', 0) self.Count = rec.get(u'Count', 0) self.IsLocked = rec.get(u'IsLocked', 0) self.ItemPlaceType = rec.get(u'ItemPlaceType', 0) self.ItemPlaceIndex = rec.get(u'ItemPlaceIndex', 0) self.IsBind = rec.get(u'IsBind', 0) self.GearScore = rec.get(u'GearScore', 0) self.RemainHour = rec.get(u'RemainHour', 0) self.CreateTime = fix_outgoingText(rec.get(u'CreateTime', u'')) self.UserDataLen = rec.get(u'UserDataLen', 0) self.UserData = fix_outgoingText(rec.get(u'UserData', u'')) self.IsSuite = rec.get(u'IsSuite', 0) self.SID = rec['SID'] self.VerNO = rec.get(u'VerNO', 0) def makeSID(self): self.SID = 0 self.VerNO = CollectionVesionNO.tagRoleItem_VersionNO self.SID = makeSID(self.getBuffer()) #Can not implement adoLoadStr method:No key defined! #Can not implement adoLoadCStr method:No key defined! def adoLoadCEx(self, collection, query): resultCollection = collection.find(query) if resultCollection.count() <= 0: return False rec = resultCollection[0] #¶ÁÈ¡Êý¾Ý self.readRecord(rec) saveSID = self.SID self.SID = 0 if self.VerNO == CollectionVesionNO.tagRoleItem_VersionNO: if not checkSID(self.getBuffer(), saveSID): addSIDErrorCnt() mylog.warning('SID checksum error!query = %s'%query) return False #УÑéͨ¹ý return True def adoInsert(self, collection): '''Ö´ÐвåÈë''' trycnt = 0 rec = self.getRecord() while(True): try: collection.insert(rec, False, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_152, 'Insert failed!ItemGUID = %s, error = %s, trycnt = %d'%(self.ItemGUID, err, trycnt)) mylog.error(msg) return False return True def adoInsertC(self, collection): self.makeSID() return self.adoInsert(collection) #Can not implement adoUpdateStr method:No key defined! def adoUpdateEx(self, collection, spec): '''Ö´ÐиüÐÂ''' trycnt = 0 rec = self.getRecord() while(True): try: collection.update(spec, {'$set':rec}, False, False, True, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_154, 'Update failed!ItemGUID = %s, error = %s, trycnt = %d'%(self.ItemGUID, err, trycnt)) mylog.error(msg) return False return True def adoUpdateC(self, collection): self.makeSID() return self.adoUpdate(collection) def adoUpdateExC(self, collection, spec): self.makeSID() return self.adoUpdateEx(collection, spec) #Can not implement adoCheckUpdateCStr method:No key defined! #Can not implement adoCheckUpdateCExStr method:No key defined! def getAdoRecordsC(self, resultCollection): result = '' result = CommFunc.WriteDWORD(result, resultCollection.count()) for rec in resultCollection: #УÑéSID self.readRecord(rec) saveSID = self.SID self.SID = 0 if self.VerNO == CollectionVesionNO.tagRoleItem_VersionNO: if not checkSID(self.getBuffer(), saveSID): addSIDErrorCnt() mylog.warning('SID error ItemGUID = %s'%self.ItemGUID) result += self.getBuffer() return result def adoQueryIndexC(self, collection): '''ÓÃË÷Òý×ֶβéÕÒ''' resultCollection = collection.find({'ItemGUID':fix_incomingText(self.ItemGUID)}) return self.getAdoRecordsC(resultCollection) def adoQueryCustomC(self, collection, queryDict): '''×Ô¶¨Òå²éÕÒ''' resultCollection = collection.find(queryDict) return self.getAdoRecordsC(resultCollection) def adoQueryAllC(self, collection): '''²éѯËùÓÐ''' resultCollection = collection.find() return self.getAdoRecordsC(resultCollection) def adoDeleteByIndex(self, collection): '''¸ù¾ÝË÷Òýɾ³ý''' trycnt = 0 while(True): try: collection.remove({'ItemGUID':fix_incomingText(self.ItemGUID)}) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:ItemGUID = %s"%(self.__class__.__name__, inspect.stack()[0][3], self.ItemGUID)) msg = error.formatMsg('error', error.ERROR_NO_155, 'delete failure!self.ItemGUID = %s, error = %s, trycnt = %d'%(self.ItemGUID, err, trycnt)) mylog.error(msg) return False return True def outputString(self): output = '''//ÈËÎïÎïÆ·#tagRoleItem: ItemGUID = %s, PlayerID = %s, ItemTypeID = %s, Count = %s, IsLocked = %s, ItemPlaceType = %s, ItemPlaceIndex = %s, IsBind = %s, GearScore = %s, RemainHour = %s, CreateTime = %s, UserDataLen = %s, UserData = %s, IsSuite = %s, ADOResult = %s, SID = %s, VerNO = %s, '''%( self.ItemGUID, self.PlayerID, self.ItemTypeID, self.Count, self.IsLocked, self.ItemPlaceType, self.ItemPlaceIndex, self.IsBind, self.GearScore, self.RemainHour, self.CreateTime, self.UserDataLen, self.UserData, self.IsSuite, self.ADOResult, self.SID, self.VerNO ) return output def dumpString(self): output = '''%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s'''%( self.ItemGUID, self.PlayerID, self.ItemTypeID, self.Count, self.IsLocked, self.ItemPlaceType, self.ItemPlaceIndex, self.IsBind, self.GearScore, self.RemainHour, self.CreateTime, self.UserDataLen, self.UserData, self.IsSuite, ) return output #CharÊý×éÀàÐÍSet½Ó¿Ú,ʹÓøýӿڶԴËÀàÐÍÊý¾Ý¸³Öµ£¬·ÀÖ¹¸³ÖµµÄÊý¾Ý¹ý³¤±¨´í def SetItemGUID(self,Str): if len(Str)<=40: self.ItemGUID = Str else: self.ItemGUID = Str[:40] def SetCreateTime(self,Str): if len(Str)<=30: self.CreateTime = Str else: self.CreateTime = Str[:30] ############################################################################ ##################ÏÂÃæµÄ½Ó¿ÚÊÇ·ÇSIDµÄ########################################## ############################################################################ #------------------------------------------------------ #¼Ò×å½±Àø±í#tagDBFamilyReward class tagDBFamilyReward(Structure): _pack_ = 1 _fields_ = [ ('FamilyID', ctypes.c_ulong), ('ItemID', ctypes.c_ulong), ('Count', ctypes.c_ulong), ('ADOResult', ctypes.c_ulong), ] def __init__(self): Structure.__init__(self) self.clear() def clear(self): memset(addressof(self), 0, self.getLength()) def readData(self, buf, pos = 0, length = 0): if not pos <= length: msg = error.formatMsg('error', error.ERROR_NO_150, '(pos = %s)> (length = %s)'%(pos, length)) mylog.error(msg) return -1 if len(buf) < pos + self.getLength(): msg = error.formatMsg('error', error.ERROR_NO_151, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength())) mylog.error(msg) return -1 self.clear() memmove(addressof(self), buf[pos:], self.getLength()) return self.getLength() def getBuffer(self): buf = create_string_buffer(self.getLength()) memmove(addressof(buf), addressof(self), self.getLength()) return string_at(addressof(buf), self.getLength()) def getLength(self): return sizeof(tagDBFamilyReward) def getRecord(self): '''×éÖ¯´æ´¢¼Ç¼''' rec = {} rec[u'FamilyID'] = self.FamilyID rec[u'ItemID'] = self.ItemID rec[u'Count'] = self.Count return rec def readRecord(self, rec): '''ÓÉÓÚMongoDB¶Á³öÀ´ÊÇunicode,ËùÓÐ×Ö·û´®ÐèÒª½øÐÐת»»''' self.FamilyID = rec.get(u'FamilyID', 0) self.ItemID = rec.get(u'ItemID', 0) self.Count = rec.get(u'Count', 0) #Can not implement adoLoadStr method:No key defined! def adoInsert(self, collection): '''Ö´ÐвåÈë''' trycnt = 0 rec = self.getRecord() while(True): try: collection.insert(rec, False, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_152, 'Insert failed!FamilyID = %s, error = %s, trycnt = %d'%(self.FamilyID, err, trycnt)) mylog.error(msg) return False return True #Can not implement adoUpdateStr method:No key defined! def adoUpdateEx(self, collection, spec): '''Ö´ÐиüÐÂ''' trycnt = 0 rec = self.getRecord() while(True): try: collection.update(spec, {'$set':rec}, False, False, True, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_154, 'Update failed!FamilyID = %s, error = %s, trycnt = %d'%(self.FamilyID, err, trycnt)) mylog.error(msg) return False return True #Can not implement adoCheckUpdateStr method:No key defined! #Can not implement adoCheckUpdateExStr method:No key defined! def getAdoRecords(self, resultCollection): '''²éѯ½á¹û´ò°ü³É¶þ½øÖÆÁ÷''' result = '' result = CommFunc.WriteDWORD(result, resultCollection.count()) for rec in resultCollection: self.readRecord(rec) result += self.getBuffer() return result def adoQueryIndex(self, collection): '''ÓÃË÷Òý×ֶβéÕÒ''' resultCollection = collection.find({'FamilyID':self.FamilyID}) return self.getAdoRecords(resultCollection) def adoQueryCustom(self, collection, queryDict): '''×Ô¶¨Òå²éѯ''' resultCollection = collection.find(queryDict) return self.getAdoRecords(resultCollection) def adoQueryAll(self, collection): '''²éѯËùÓÐ''' resultCollection = collection.find() return self.getAdoRecords(resultCollection) def adoDeleteByIndex(self, collection): '''¸ù¾ÝË÷Òýɾ³ý''' trycnt = 0 while(True): try: collection.remove({'FamilyID':self.FamilyID}) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:FamilyID = %s"%(self.__class__.__name__, inspect.stack()[0][3], self.FamilyID)) msg = error.formatMsg('error', error.ERROR_NO_155, 'delete failure!self.FamilyID = %s, error = %s, trycnt = %d'%(self.FamilyID, err, trycnt)) mylog.error(msg) return False return True def outputString(self): output = '''//¼Ò×å½±Àø±í#tagDBFamilyReward: FamilyID = %s, ItemID = %s, Count = %s, ADOResult = %s, '''%( self.FamilyID, self.ItemID, self.Count, self.ADOResult, ) return output def dumpString(self): output = '''%1s\t%1s\t%1s'''%( self.FamilyID, self.ItemID, self.Count, ) return output #------------------------------------------------------ #¼Ò×å½±Àø¶Ò»»¼Ç¼#tagDBFamilyRewardRec class tagDBFamilyRewardRec(Structure): _pack_ = 1 _fields_ = [ ('FamilyID', ctypes.c_ulong), ('PlayID', ctypes.c_ulong), ('ItemID', ctypes.c_ulong), ('Count', ctypes.c_ulong), ('Time', ctypes.c_double), ('PlayerName', ctypes.c_char * 33), ('ADOResult', ctypes.c_ulong), ] def __init__(self): Structure.__init__(self) self.clear() def clear(self): memset(addressof(self), 0, self.getLength()) def readData(self, buf, pos = 0, length = 0): if not pos <= length: msg = error.formatMsg('error', error.ERROR_NO_150, '(pos = %s)> (length = %s)'%(pos, length)) mylog.error(msg) return -1 if len(buf) < pos + self.getLength(): msg = error.formatMsg('error', error.ERROR_NO_151, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength())) mylog.error(msg) return -1 self.clear() memmove(addressof(self), buf[pos:], self.getLength()) return self.getLength() def getBuffer(self): buf = create_string_buffer(self.getLength()) memmove(addressof(buf), addressof(self), self.getLength()) return string_at(addressof(buf), self.getLength()) def getLength(self): return sizeof(tagDBFamilyRewardRec) def getRecord(self): '''×éÖ¯´æ´¢¼Ç¼''' rec = {} rec[u'FamilyID'] = self.FamilyID rec[u'PlayID'] = self.PlayID rec[u'ItemID'] = self.ItemID rec[u'Count'] = self.Count rec[u'Time'] = self.Time rec[u'PlayerName'] = fix_incomingText(self.PlayerName) return rec def readRecord(self, rec): '''ÓÉÓÚMongoDB¶Á³öÀ´ÊÇunicode,ËùÓÐ×Ö·û´®ÐèÒª½øÐÐת»»''' self.FamilyID = rec.get(u'FamilyID', 0) self.PlayID = rec.get(u'PlayID', 0) self.ItemID = rec.get(u'ItemID', 0) self.Count = rec.get(u'Count', 0) self.Time = rec.get(u'Time', 0) self.PlayerName = fix_outgoingText(rec.get(u'PlayerName', u'')) #Can not implement adoLoadStr method:No key defined! def adoInsert(self, collection): '''Ö´ÐвåÈë''' trycnt = 0 rec = self.getRecord() while(True): try: collection.insert(rec, False, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_152, 'Insert failed!FamilyID = %s, error = %s, trycnt = %d'%(self.FamilyID, err, trycnt)) mylog.error(msg) return False return True #Can not implement adoUpdateStr method:No key defined! def adoUpdateEx(self, collection, spec): '''Ö´ÐиüÐÂ''' trycnt = 0 rec = self.getRecord() while(True): try: collection.update(spec, {'$set':rec}, False, False, True, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_154, 'Update failed!FamilyID = %s, error = %s, trycnt = %d'%(self.FamilyID, err, trycnt)) mylog.error(msg) return False return True #Can not implement adoCheckUpdateStr method:No key defined! #Can not implement adoCheckUpdateExStr method:No key defined! def getAdoRecords(self, resultCollection): '''²éѯ½á¹û´ò°ü³É¶þ½øÖÆÁ÷''' result = '' result = CommFunc.WriteDWORD(result, resultCollection.count()) for rec in resultCollection: self.readRecord(rec) result += self.getBuffer() return result def adoQueryIndex(self, collection): '''ÓÃË÷Òý×ֶβéÕÒ''' resultCollection = collection.find({'FamilyID':self.FamilyID}) return self.getAdoRecords(resultCollection) def adoQueryCustom(self, collection, queryDict): '''×Ô¶¨Òå²éѯ''' resultCollection = collection.find(queryDict) return self.getAdoRecords(resultCollection) def adoQueryAll(self, collection): '''²éѯËùÓÐ''' resultCollection = collection.find() return self.getAdoRecords(resultCollection) def adoDeleteByIndex(self, collection): '''¸ù¾ÝË÷Òýɾ³ý''' trycnt = 0 while(True): try: collection.remove({'FamilyID':self.FamilyID}) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:FamilyID = %s"%(self.__class__.__name__, inspect.stack()[0][3], self.FamilyID)) msg = error.formatMsg('error', error.ERROR_NO_155, 'delete failure!self.FamilyID = %s, error = %s, trycnt = %d'%(self.FamilyID, err, trycnt)) mylog.error(msg) return False return True def outputString(self): output = '''//¼Ò×å½±Àø¶Ò»»¼Ç¼#tagDBFamilyRewardRec: FamilyID = %s, PlayID = %s, ItemID = %s, Count = %s, Time = %s, PlayerName = %s, ADOResult = %s, '''%( self.FamilyID, self.PlayID, self.ItemID, self.Count, self.Time, self.PlayerName, self.ADOResult, ) return output def dumpString(self): output = '''%1s\t%1s\t%1s\t%1s\t%1s\t%1s'''%( self.FamilyID, self.PlayID, self.ItemID, self.Count, self.Time, self.PlayerName, ) return output #CharÊý×éÀàÐÍSet½Ó¿Ú,ʹÓøýӿڶԴËÀàÐÍÊý¾Ý¸³Öµ£¬·ÀÖ¹¸³ÖµµÄÊý¾Ý¹ý³¤±¨´í def SetPlayerName(self,Str): if len(Str)<=33: self.PlayerName = Str else: self.PlayerName = Str[:33] #------------------------------------------------------ #Íæ¼Ò±êǩӡÏó±í#tagDBPlayerLabel class tagDBPlayerLabel(Structure): _pack_ = 1 _fields_ = [ ('PlayerID', ctypes.c_ulong), ('LabelID', ctypes.c_ulong), ('LabelContent', ctypes.c_char * 21), ('LabelType', ctypes.c_ubyte), ('IsSelfAdd', ctypes.c_ubyte), ('AddPlayerID', ctypes.c_ulong), ('AddPlayerName', ctypes.c_char * 33), ('AddTime', ctypes.c_char * 20), ('ADOResult', ctypes.c_ulong), ] def __init__(self): Structure.__init__(self) self.clear() def clear(self): memset(addressof(self), 0, self.getLength()) def readData(self, buf, pos = 0, length = 0): if not pos <= length: msg = error.formatMsg('error', error.ERROR_NO_150, '(pos = %s)> (length = %s)'%(pos, length)) mylog.error(msg) return -1 if len(buf) < pos + self.getLength(): msg = error.formatMsg('error', error.ERROR_NO_151, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength())) mylog.error(msg) return -1 self.clear() memmove(addressof(self), buf[pos:], self.getLength()) return self.getLength() def getBuffer(self): buf = create_string_buffer(self.getLength()) memmove(addressof(buf), addressof(self), self.getLength()) return string_at(addressof(buf), self.getLength()) def getLength(self): return sizeof(tagDBPlayerLabel) def getRecord(self): '''×éÖ¯´æ´¢¼Ç¼''' rec = {} rec[u'PlayerID'] = self.PlayerID rec[u'LabelID'] = self.LabelID rec[u'LabelContent'] = fix_incomingText(self.LabelContent) rec[u'LabelType'] = self.LabelType rec[u'IsSelfAdd'] = self.IsSelfAdd rec[u'AddPlayerID'] = self.AddPlayerID rec[u'AddPlayerName'] = fix_incomingText(self.AddPlayerName) rec[u'AddTime'] = fix_incomingText(self.AddTime) return rec def readRecord(self, rec): '''ÓÉÓÚMongoDB¶Á³öÀ´ÊÇunicode,ËùÓÐ×Ö·û´®ÐèÒª½øÐÐת»»''' self.PlayerID = rec.get(u'PlayerID', 0) self.LabelID = rec.get(u'LabelID', 0) self.LabelContent = fix_outgoingText(rec.get(u'LabelContent', u'')) self.LabelType = rec.get(u'LabelType', 0) self.IsSelfAdd = rec.get(u'IsSelfAdd', 0) self.AddPlayerID = rec.get(u'AddPlayerID', 0) self.AddPlayerName = fix_outgoingText(rec.get(u'AddPlayerName', u'')) self.AddTime = fix_outgoingText(rec.get(u'AddTime', u'')) #Can not implement adoLoadStr method:No key defined! def adoInsert(self, collection): '''Ö´ÐвåÈë''' trycnt = 0 rec = self.getRecord() while(True): try: collection.insert(rec, False, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_152, 'Insert failed!PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True #Can not implement adoUpdateStr method:No key defined! def adoUpdateEx(self, collection, spec): '''Ö´ÐиüÐÂ''' trycnt = 0 rec = self.getRecord() while(True): try: collection.update(spec, {'$set':rec}, False, False, True, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_154, 'Update failed!PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True #Can not implement adoCheckUpdateStr method:No key defined! #Can not implement adoCheckUpdateExStr method:No key defined! def getAdoRecords(self, resultCollection): '''²éѯ½á¹û´ò°ü³É¶þ½øÖÆÁ÷''' result = '' result = CommFunc.WriteDWORD(result, resultCollection.count()) for rec in resultCollection: self.readRecord(rec) result += self.getBuffer() return result def adoQueryIndex(self, collection): '''ÓÃË÷Òý×ֶβéÕÒ''' resultCollection = collection.find({'PlayerID':self.PlayerID}) return self.getAdoRecords(resultCollection) def adoQueryCustom(self, collection, queryDict): '''×Ô¶¨Òå²éѯ''' resultCollection = collection.find(queryDict) return self.getAdoRecords(resultCollection) def adoQueryAll(self, collection): '''²éѯËùÓÐ''' resultCollection = collection.find() return self.getAdoRecords(resultCollection) def adoDeleteByIndex(self, collection): '''¸ù¾ÝË÷Òýɾ³ý''' trycnt = 0 while(True): try: collection.remove({'PlayerID':self.PlayerID}) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:PlayerID = %s"%(self.__class__.__name__, inspect.stack()[0][3], self.PlayerID)) msg = error.formatMsg('error', error.ERROR_NO_155, 'delete failure!self.PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True def outputString(self): output = '''//Íæ¼Ò±êǩӡÏó±í#tagDBPlayerLabel: PlayerID = %s, LabelID = %s, LabelContent = %s, LabelType = %s, IsSelfAdd = %s, AddPlayerID = %s, AddPlayerName = %s, AddTime = %s, ADOResult = %s, '''%( self.PlayerID, self.LabelID, self.LabelContent, self.LabelType, self.IsSelfAdd, self.AddPlayerID, self.AddPlayerName, self.AddTime, self.ADOResult, ) return output def dumpString(self): output = '''%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s'''%( self.PlayerID, self.LabelID, self.LabelContent, self.LabelType, self.IsSelfAdd, self.AddPlayerID, self.AddPlayerName, self.AddTime, ) return output #CharÊý×éÀàÐÍSet½Ó¿Ú,ʹÓøýӿڶԴËÀàÐÍÊý¾Ý¸³Öµ£¬·ÀÖ¹¸³ÖµµÄÊý¾Ý¹ý³¤±¨´í def SetLabelContent(self,Str): if len(Str)<=21: self.LabelContent = Str else: self.LabelContent = Str[:21] def SetAddPlayerName(self,Str): if len(Str)<=33: self.AddPlayerName = Str else: self.AddPlayerName = Str[:33] def SetAddTime(self,Str): if len(Str)<=20: self.AddTime = Str else: self.AddTime = Str[:20] #------------------------------------------------------ #Íæ¼ÒÕٻرí#tagDBPlayerRecall class tagDBPlayerRecall(Structure): _pack_ = 1 _fields_ = [ ('PlayerID', ctypes.c_ulong), ('RecallCount', ctypes.c_ushort), ('ReceiveFlag', ctypes.c_ulong), ('ADOResult', ctypes.c_ulong), ] def __init__(self): Structure.__init__(self) self.clear() def clear(self): memset(addressof(self), 0, self.getLength()) def readData(self, buf, pos = 0, length = 0): if not pos <= length: msg = error.formatMsg('error', error.ERROR_NO_150, '(pos = %s)> (length = %s)'%(pos, length)) mylog.error(msg) return -1 if len(buf) < pos + self.getLength(): msg = error.formatMsg('error', error.ERROR_NO_151, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength())) mylog.error(msg) return -1 self.clear() memmove(addressof(self), buf[pos:], self.getLength()) return self.getLength() def getBuffer(self): buf = create_string_buffer(self.getLength()) memmove(addressof(buf), addressof(self), self.getLength()) return string_at(addressof(buf), self.getLength()) def getLength(self): return sizeof(tagDBPlayerRecall) def getRecord(self): '''×éÖ¯´æ´¢¼Ç¼''' rec = {} rec[u'PlayerID'] = self.PlayerID rec[u'RecallCount'] = self.RecallCount rec[u'ReceiveFlag'] = self.ReceiveFlag return rec def readRecord(self, rec): '''ÓÉÓÚMongoDB¶Á³öÀ´ÊÇunicode,ËùÓÐ×Ö·û´®ÐèÒª½øÐÐת»»''' self.PlayerID = rec.get(u'PlayerID', 0) self.RecallCount = rec.get(u'RecallCount', 0) self.ReceiveFlag = rec.get(u'ReceiveFlag', 0) def adoLoad(self, collection): '''ʹÓÃKEY²éÕÒ²¢¶ÁÈ¡''' resultCollection = collection.find({'PlayerID':self.PlayerID}) if resultCollection.count() <= 0: return False #ÓÉÓÚÊÇKEY²éÕÒ£¬ËùÓÐÈç¹û´æÔÚ¾ÍÖ»ÓÐÒ»Ìõ¼Ç¼ rec = resultCollection[0] #¶ÁÈ¡Êý¾Ý self.readRecord(rec) return True def adoInsert(self, collection): '''Ö´ÐвåÈë''' trycnt = 0 rec = self.getRecord() while(True): try: collection.insert(rec, False, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_152, 'Insert failed!PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True def adoUpdate(self, collection): '''Ö´ÐиüÐÂ''' trycnt = 0 rec = self.getRecord() while(True): try: collection.update({'PlayerID':self.PlayerID}, {'$set':rec}, False, False, True, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_153, 'Update failed!PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True def adoUpdateEx(self, collection, spec): '''Ö´ÐиüÐÂ''' trycnt = 0 rec = self.getRecord() while(True): try: collection.update(spec, {'$set':rec}, False, False, True, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_154, 'Update failed!PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True def adoCheckUpdate(self, collection): '''¸ù¾ÝÇé¿öÖ´ÐвåÈë»ò¸üÐÂ''' resultCollection = collection.find({'PlayerID':self.PlayerID}) if resultCollection.count() <= 0: return self.adoInsert(collection) return self.adoUpdate(collection) def adoCheckUpdateEx(self, collection, spec): '''¸ù¾ÝÇé¿öÖ´ÐвåÈë»ò¸üÐÂ''' resultCollection = collection.find(spec) if resultCollection.count() <= 0: return self.adoInsert(collection) return self.adoUpdateEx(collection, spec) def getAdoRecords(self, resultCollection): '''²éѯ½á¹û´ò°ü³É¶þ½øÖÆÁ÷''' result = '' result = CommFunc.WriteDWORD(result, resultCollection.count()) for rec in resultCollection: self.readRecord(rec) result += self.getBuffer() return result def adoQueryIndex(self, collection): '''ÓÃË÷Òý×ֶβéÕÒ''' resultCollection = collection.find({'PlayerID':self.PlayerID}) return self.getAdoRecords(resultCollection) def adoQueryCustom(self, collection, queryDict): '''×Ô¶¨Òå²éѯ''' resultCollection = collection.find(queryDict) return self.getAdoRecords(resultCollection) def adoQueryAll(self, collection): '''²éѯËùÓÐ''' resultCollection = collection.find() return self.getAdoRecords(resultCollection) def adoDeleteByIndex(self, collection): '''¸ù¾ÝË÷Òýɾ³ý''' trycnt = 0 while(True): try: collection.remove({'PlayerID':self.PlayerID}) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:PlayerID = %s"%(self.__class__.__name__, inspect.stack()[0][3], self.PlayerID)) msg = error.formatMsg('error', error.ERROR_NO_155, 'delete failure!self.PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True def outputString(self): output = '''//Íæ¼ÒÕٻرí#tagDBPlayerRecall: PlayerID = %s, RecallCount = %s, ReceiveFlag = %s, ADOResult = %s, '''%( self.PlayerID, self.RecallCount, self.ReceiveFlag, self.ADOResult, ) return output def dumpString(self): output = '''%1s\t%1s\t%1s'''%( self.PlayerID, self.RecallCount, self.ReceiveFlag, ) return output #------------------------------------------------------ #¾º¼¼³¡ÏµÍ³½±³Í±í#tagDBVsReward class tagDBVsReward(Structure): _pack_ = 1 _fields_ = [ ('PlayerID', ctypes.c_ulong), ('VsPoint', ctypes.c_ulong), ('VsValue', ctypes.c_ulong), ('ADOResult', ctypes.c_ulong), ] def __init__(self): Structure.__init__(self) self.clear() def clear(self): memset(addressof(self), 0, self.getLength()) def readData(self, buf, pos = 0, length = 0): if not pos <= length: msg = error.formatMsg('error', error.ERROR_NO_150, '(pos = %s)> (length = %s)'%(pos, length)) mylog.error(msg) return -1 if len(buf) < pos + self.getLength(): msg = error.formatMsg('error', error.ERROR_NO_151, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength())) mylog.error(msg) return -1 self.clear() memmove(addressof(self), buf[pos:], self.getLength()) return self.getLength() def getBuffer(self): buf = create_string_buffer(self.getLength()) memmove(addressof(buf), addressof(self), self.getLength()) return string_at(addressof(buf), self.getLength()) def getLength(self): return sizeof(tagDBVsReward) def getRecord(self): '''×éÖ¯´æ´¢¼Ç¼''' rec = {} rec[u'PlayerID'] = self.PlayerID rec[u'VsPoint'] = self.VsPoint rec[u'VsValue'] = self.VsValue return rec def readRecord(self, rec): '''ÓÉÓÚMongoDB¶Á³öÀ´ÊÇunicode,ËùÓÐ×Ö·û´®ÐèÒª½øÐÐת»»''' self.PlayerID = rec.get(u'PlayerID', 0) self.VsPoint = rec.get(u'VsPoint', 0) self.VsValue = rec.get(u'VsValue', 0) def adoLoad(self, collection): '''ʹÓÃKEY²éÕÒ²¢¶ÁÈ¡''' resultCollection = collection.find({'PlayerID':self.PlayerID}) if resultCollection.count() <= 0: return False #ÓÉÓÚÊÇKEY²éÕÒ£¬ËùÓÐÈç¹û´æÔÚ¾ÍÖ»ÓÐÒ»Ìõ¼Ç¼ rec = resultCollection[0] #¶ÁÈ¡Êý¾Ý self.readRecord(rec) return True def adoInsert(self, collection): '''Ö´ÐвåÈë''' trycnt = 0 rec = self.getRecord() while(True): try: collection.insert(rec, False, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_152, 'Insert failed!PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True def adoUpdate(self, collection): '''Ö´ÐиüÐÂ''' trycnt = 0 rec = self.getRecord() while(True): try: collection.update({'PlayerID':self.PlayerID}, {'$set':rec}, False, False, True, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_153, 'Update failed!PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True def adoUpdateEx(self, collection, spec): '''Ö´ÐиüÐÂ''' trycnt = 0 rec = self.getRecord() while(True): try: collection.update(spec, {'$set':rec}, False, False, True, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_154, 'Update failed!PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True def adoCheckUpdate(self, collection): '''¸ù¾ÝÇé¿öÖ´ÐвåÈë»ò¸üÐÂ''' resultCollection = collection.find({'PlayerID':self.PlayerID}) if resultCollection.count() <= 0: return self.adoInsert(collection) return self.adoUpdate(collection) def adoCheckUpdateEx(self, collection, spec): '''¸ù¾ÝÇé¿öÖ´ÐвåÈë»ò¸üÐÂ''' resultCollection = collection.find(spec) if resultCollection.count() <= 0: return self.adoInsert(collection) return self.adoUpdateEx(collection, spec) def getAdoRecords(self, resultCollection): '''²éѯ½á¹û´ò°ü³É¶þ½øÖÆÁ÷''' result = '' result = CommFunc.WriteDWORD(result, resultCollection.count()) for rec in resultCollection: self.readRecord(rec) result += self.getBuffer() return result def adoQueryIndex(self, collection): '''ÓÃË÷Òý×ֶβéÕÒ''' resultCollection = collection.find({'PlayerID':self.PlayerID}) return self.getAdoRecords(resultCollection) def adoQueryCustom(self, collection, queryDict): '''×Ô¶¨Òå²éѯ''' resultCollection = collection.find(queryDict) return self.getAdoRecords(resultCollection) def adoQueryAll(self, collection): '''²éѯËùÓÐ''' resultCollection = collection.find() return self.getAdoRecords(resultCollection) def adoDeleteByIndex(self, collection): '''¸ù¾ÝË÷Òýɾ³ý''' trycnt = 0 while(True): try: collection.remove({'PlayerID':self.PlayerID}) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:PlayerID = %s"%(self.__class__.__name__, inspect.stack()[0][3], self.PlayerID)) msg = error.formatMsg('error', error.ERROR_NO_155, 'delete failure!self.PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True def outputString(self): output = '''//¾º¼¼³¡ÏµÍ³½±³Í±í#tagDBVsReward: PlayerID = %s, VsPoint = %s, VsValue = %s, ADOResult = %s, '''%( self.PlayerID, self.VsPoint, self.VsValue, self.ADOResult, ) return output def dumpString(self): output = '''%1s\t%1s\t%1s'''%( self.PlayerID, self.VsPoint, self.VsValue, ) return output #------------------------------------------------------ #¸üÐÂÍæ¼ÒÕʺűíÊÇ·ñ³ÉÄê×Ö¶Î#tagDSAccount_UpdateAdult class tagDSAccount_UpdateAdult(Structure): _pack_ = 1 _fields_ = [ ('AccID', ctypes.c_char * 65), ('Adult', ctypes.c_ubyte), ('ADOResult', ctypes.c_ulong), ] def __init__(self): Structure.__init__(self) self.clear() def clear(self): memset(addressof(self), 0, self.getLength()) def readData(self, buf, pos = 0, length = 0): if not pos <= length: msg = error.formatMsg('error', error.ERROR_NO_150, '(pos = %s)> (length = %s)'%(pos, length)) mylog.error(msg) return -1 if len(buf) < pos + self.getLength(): msg = error.formatMsg('error', error.ERROR_NO_151, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength())) mylog.error(msg) return -1 self.clear() memmove(addressof(self), buf[pos:], self.getLength()) return self.getLength() def getBuffer(self): buf = create_string_buffer(self.getLength()) memmove(addressof(buf), addressof(self), self.getLength()) return string_at(addressof(buf), self.getLength()) def getLength(self): return sizeof(tagDSAccount_UpdateAdult) def getRecord(self): '''×éÖ¯´æ´¢¼Ç¼''' rec = {} rec[u'AccID'] = fix_incomingText(self.AccID) rec[u'Adult'] = self.Adult return rec def readRecord(self, rec): '''ÓÉÓÚMongoDB¶Á³öÀ´ÊÇunicode,ËùÓÐ×Ö·û´®ÐèÒª½øÐÐת»»''' self.AccID = fix_outgoingText(rec.get(u'AccID', u'')) self.Adult = rec.get(u'Adult', 0) #Can not implement adoLoadStr method:No key defined! #Can not implement adoInsertStr method:No key defined! #Can not implement adoUpdateStr method:No key defined! #Can not implement adoUpdateStr method:No key defined! #Can not implement adoCheckUpdateStr method:No key defined! #Can not implement adoCheckUpdateExStr method:No key defined! def getAdoRecords(self, resultCollection): '''²éѯ½á¹û´ò°ü³É¶þ½øÖÆÁ÷''' result = '' result = CommFunc.WriteDWORD(result, resultCollection.count()) for rec in resultCollection: self.readRecord(rec) result += self.getBuffer() return result #Can not implement adoQueryIndexStr method:No key defined! def adoQueryCustom(self, collection, queryDict): '''×Ô¶¨Òå²éѯ''' resultCollection = collection.find(queryDict) return self.getAdoRecords(resultCollection) def adoQueryAll(self, collection): '''²éѯËùÓÐ''' resultCollection = collection.find() return self.getAdoRecords(resultCollection) #Can not implement adoDeleteByIndexStr method:No key defined! def outputString(self): output = '''//¸üÐÂÍæ¼ÒÕʺűíÊÇ·ñ³ÉÄê×Ö¶Î#tagDSAccount_UpdateAdult: AccID = %s, Adult = %s, ADOResult = %s, '''%( self.AccID, self.Adult, self.ADOResult, ) return output def dumpString(self): output = '''%1s\t%1s'''%( self.AccID, self.Adult, ) return output #CharÊý×éÀàÐÍSet½Ó¿Ú,ʹÓøýӿڶԴËÀàÐÍÊý¾Ý¸³Öµ£¬·ÀÖ¹¸³ÖµµÄÊý¾Ý¹ý³¤±¨´í def SetAccID(self,Str): if len(Str)<=65: self.AccID = Str else: self.AccID = Str[:65] #------------------------------------------------------ #¸üÐÂÕ˺ÅÃÎÌìÌÃͨÐÐÖ¤UID#tagDSAccount_UpdateMTTUID class tagDSAccount_UpdateMTTUID(Structure): _pack_ = 1 _fields_ = [ ('AccID', ctypes.c_char * 65), ('MTTUID', ctypes.c_longlong), ('ADOResult', ctypes.c_ulong), ] def __init__(self): Structure.__init__(self) self.clear() def clear(self): memset(addressof(self), 0, self.getLength()) def readData(self, buf, pos = 0, length = 0): if not pos <= length: msg = error.formatMsg('error', error.ERROR_NO_150, '(pos = %s)> (length = %s)'%(pos, length)) mylog.error(msg) return -1 if len(buf) < pos + self.getLength(): msg = error.formatMsg('error', error.ERROR_NO_151, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength())) mylog.error(msg) return -1 self.clear() memmove(addressof(self), buf[pos:], self.getLength()) return self.getLength() def getBuffer(self): buf = create_string_buffer(self.getLength()) memmove(addressof(buf), addressof(self), self.getLength()) return string_at(addressof(buf), self.getLength()) def getLength(self): return sizeof(tagDSAccount_UpdateMTTUID) def getRecord(self): '''×éÖ¯´æ´¢¼Ç¼''' rec = {} rec[u'AccID'] = fix_incomingText(self.AccID) rec[u'MTTUID'] = self.MTTUID return rec def readRecord(self, rec): '''ÓÉÓÚMongoDB¶Á³öÀ´ÊÇunicode,ËùÓÐ×Ö·û´®ÐèÒª½øÐÐת»»''' self.AccID = fix_outgoingText(rec.get(u'AccID', u'')) self.MTTUID = rec.get(u'MTTUID', 0) #Can not implement adoLoadStr method:No key defined! #Can not implement adoInsertStr method:No key defined! #Can not implement adoUpdateStr method:No key defined! #Can not implement adoUpdateStr method:No key defined! #Can not implement adoCheckUpdateStr method:No key defined! #Can not implement adoCheckUpdateExStr method:No key defined! def getAdoRecords(self, resultCollection): '''²éѯ½á¹û´ò°ü³É¶þ½øÖÆÁ÷''' result = '' result = CommFunc.WriteDWORD(result, resultCollection.count()) for rec in resultCollection: self.readRecord(rec) result += self.getBuffer() return result #Can not implement adoQueryIndexStr method:No key defined! def adoQueryCustom(self, collection, queryDict): '''×Ô¶¨Òå²éѯ''' resultCollection = collection.find(queryDict) return self.getAdoRecords(resultCollection) def adoQueryAll(self, collection): '''²éѯËùÓÐ''' resultCollection = collection.find() return self.getAdoRecords(resultCollection) #Can not implement adoDeleteByIndexStr method:No key defined! def outputString(self): output = '''//¸üÐÂÕ˺ÅÃÎÌìÌÃͨÐÐÖ¤UID#tagDSAccount_UpdateMTTUID: AccID = %s, MTTUID = %s, ADOResult = %s, '''%( self.AccID, self.MTTUID, self.ADOResult, ) return output def dumpString(self): output = '''%1s\t%1s'''%( self.AccID, self.MTTUID, ) return output #CharÊý×éÀàÐÍSet½Ó¿Ú,ʹÓøýӿڶԴËÀàÐÍÊý¾Ý¸³Öµ£¬·ÀÖ¹¸³ÖµµÄÊý¾Ý¹ý³¤±¨´í def SetAccID(self,Str): if len(Str)<=65: self.AccID = Str else: self.AccID = Str[:65] #------------------------------------------------------ #¸üÐÂÕ˺ÅÍ¨Ñ¶Ëø¹¦ÄÜ¿ªÍ¨×´Ì¬#tagDSAccount_UpdateTelLockState class tagDSAccount_UpdateTelLockState(Structure): _pack_ = 1 _fields_ = [ ('AccID', ctypes.c_char * 65), ('TelLockState', ctypes.c_ubyte), ('ADOResult', ctypes.c_ulong), ] def __init__(self): Structure.__init__(self) self.clear() def clear(self): memset(addressof(self), 0, self.getLength()) def readData(self, buf, pos = 0, length = 0): if not pos <= length: msg = error.formatMsg('error', error.ERROR_NO_150, '(pos = %s)> (length = %s)'%(pos, length)) mylog.error(msg) return -1 if len(buf) < pos + self.getLength(): msg = error.formatMsg('error', error.ERROR_NO_151, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength())) mylog.error(msg) return -1 self.clear() memmove(addressof(self), buf[pos:], self.getLength()) return self.getLength() def getBuffer(self): buf = create_string_buffer(self.getLength()) memmove(addressof(buf), addressof(self), self.getLength()) return string_at(addressof(buf), self.getLength()) def getLength(self): return sizeof(tagDSAccount_UpdateTelLockState) def getRecord(self): '''×éÖ¯´æ´¢¼Ç¼''' rec = {} rec[u'AccID'] = fix_incomingText(self.AccID) rec[u'TelLockState'] = self.TelLockState return rec def readRecord(self, rec): '''ÓÉÓÚMongoDB¶Á³öÀ´ÊÇunicode,ËùÓÐ×Ö·û´®ÐèÒª½øÐÐת»»''' self.AccID = fix_outgoingText(rec.get(u'AccID', u'')) self.TelLockState = rec.get(u'TelLockState', 0) #Can not implement adoLoadStr method:No key defined! #Can not implement adoInsertStr method:No key defined! #Can not implement adoUpdateStr method:No key defined! #Can not implement adoUpdateStr method:No key defined! #Can not implement adoCheckUpdateStr method:No key defined! #Can not implement adoCheckUpdateExStr method:No key defined! def getAdoRecords(self, resultCollection): '''²éѯ½á¹û´ò°ü³É¶þ½øÖÆÁ÷''' result = '' result = CommFunc.WriteDWORD(result, resultCollection.count()) for rec in resultCollection: self.readRecord(rec) result += self.getBuffer() return result #Can not implement adoQueryIndexStr method:No key defined! def adoQueryCustom(self, collection, queryDict): '''×Ô¶¨Òå²éѯ''' resultCollection = collection.find(queryDict) return self.getAdoRecords(resultCollection) def adoQueryAll(self, collection): '''²éѯËùÓÐ''' resultCollection = collection.find() return self.getAdoRecords(resultCollection) #Can not implement adoDeleteByIndexStr method:No key defined! def outputString(self): output = '''//¸üÐÂÕ˺ÅÍ¨Ñ¶Ëø¹¦ÄÜ¿ªÍ¨×´Ì¬#tagDSAccount_UpdateTelLockState: AccID = %s, TelLockState = %s, ADOResult = %s, '''%( self.AccID, self.TelLockState, self.ADOResult, ) return output def dumpString(self): output = '''%1s\t%1s'''%( self.AccID, self.TelLockState, ) return output #CharÊý×éÀàÐÍSet½Ó¿Ú,ʹÓøýӿڶԴËÀàÐÍÊý¾Ý¸³Öµ£¬·ÀÖ¹¸³ÖµµÄÊý¾Ý¹ý³¤±¨´í def SetAccID(self,Str): if len(Str)<=65: self.AccID = Str else: self.AccID = Str[:65] #------------------------------------------------------ #¸±±¾Í¨¹Ø¼Ç¼#tagGameFBPassRec class tagGameFBPassRec(Structure): _pack_ = 1 _fields_ = [ ('FBID', ctypes.c_ulong), ('Time', ctypes.c_ulong), ('PlayerID', ctypes.c_ulong), ('PlayerName', ctypes.c_char * 33), ('Type', ctypes.c_ubyte), ('ExtraInfo', ctypes.c_char * 256), ('ADOResult', ctypes.c_ulong), ] def __init__(self): Structure.__init__(self) self.clear() def clear(self): memset(addressof(self), 0, self.getLength()) def readData(self, buf, pos = 0, length = 0): if not pos <= length: msg = error.formatMsg('error', error.ERROR_NO_150, '(pos = %s)> (length = %s)'%(pos, length)) mylog.error(msg) return -1 if len(buf) < pos + self.getLength(): msg = error.formatMsg('error', error.ERROR_NO_151, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength())) mylog.error(msg) return -1 self.clear() memmove(addressof(self), buf[pos:], self.getLength()) return self.getLength() def getBuffer(self): buf = create_string_buffer(self.getLength()) memmove(addressof(buf), addressof(self), self.getLength()) return string_at(addressof(buf), self.getLength()) def getLength(self): return sizeof(tagGameFBPassRec) def getRecord(self): '''×éÖ¯´æ´¢¼Ç¼''' rec = {} rec[u'FBID'] = self.FBID rec[u'Time'] = self.Time rec[u'PlayerID'] = self.PlayerID rec[u'PlayerName'] = fix_incomingText(self.PlayerName) rec[u'Type'] = self.Type rec[u'ExtraInfo'] = fix_incomingText(self.ExtraInfo) return rec def readRecord(self, rec): '''ÓÉÓÚMongoDB¶Á³öÀ´ÊÇunicode,ËùÓÐ×Ö·û´®ÐèÒª½øÐÐת»»''' self.FBID = rec.get(u'FBID', 0) self.Time = rec.get(u'Time', 0) self.PlayerID = rec.get(u'PlayerID', 0) self.PlayerName = fix_outgoingText(rec.get(u'PlayerName', u'')) self.Type = rec.get(u'Type', 0) self.ExtraInfo = fix_outgoingText(rec.get(u'ExtraInfo', u'')) #Can not implement adoLoadStr method:No key defined! def adoInsert(self, collection): '''Ö´ÐвåÈë''' trycnt = 0 rec = self.getRecord() while(True): try: collection.insert(rec, False, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_152, 'Insert failed!FBID = %s, error = %s, trycnt = %d'%(self.FBID, err, trycnt)) mylog.error(msg) return False return True #Can not implement adoUpdateStr method:No key defined! def adoUpdateEx(self, collection, spec): '''Ö´ÐиüÐÂ''' trycnt = 0 rec = self.getRecord() while(True): try: collection.update(spec, {'$set':rec}, False, False, True, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_154, 'Update failed!FBID = %s, error = %s, trycnt = %d'%(self.FBID, err, trycnt)) mylog.error(msg) return False return True #Can not implement adoCheckUpdateStr method:No key defined! #Can not implement adoCheckUpdateExStr method:No key defined! def getAdoRecords(self, resultCollection): '''²éѯ½á¹û´ò°ü³É¶þ½øÖÆÁ÷''' result = '' result = CommFunc.WriteDWORD(result, resultCollection.count()) for rec in resultCollection: self.readRecord(rec) result += self.getBuffer() return result def adoQueryIndex(self, collection): '''ÓÃË÷Òý×ֶβéÕÒ''' resultCollection = collection.find({'FBID':self.FBID}) return self.getAdoRecords(resultCollection) def adoQueryCustom(self, collection, queryDict): '''×Ô¶¨Òå²éѯ''' resultCollection = collection.find(queryDict) return self.getAdoRecords(resultCollection) def adoQueryAll(self, collection): '''²éѯËùÓÐ''' resultCollection = collection.find() return self.getAdoRecords(resultCollection) def adoDeleteByIndex(self, collection): '''¸ù¾ÝË÷Òýɾ³ý''' trycnt = 0 while(True): try: collection.remove({'FBID':self.FBID}) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:FBID = %s"%(self.__class__.__name__, inspect.stack()[0][3], self.FBID)) msg = error.formatMsg('error', error.ERROR_NO_155, 'delete failure!self.FBID = %s, error = %s, trycnt = %d'%(self.FBID, err, trycnt)) mylog.error(msg) return False return True def outputString(self): output = '''//¸±±¾Í¨¹Ø¼Ç¼#tagGameFBPassRec: FBID = %s, Time = %s, PlayerID = %s, PlayerName = %s, Type = %s, ExtraInfo = %s, ADOResult = %s, '''%( self.FBID, self.Time, self.PlayerID, self.PlayerName, self.Type, self.ExtraInfo, self.ADOResult, ) return output def dumpString(self): output = '''%1s\t%1s\t%1s\t%1s\t%1s\t%1s'''%( self.FBID, self.Time, self.PlayerID, self.PlayerName, self.Type, self.ExtraInfo, ) return output #CharÊý×éÀàÐÍSet½Ó¿Ú,ʹÓøýӿڶԴËÀàÐÍÊý¾Ý¸³Öµ£¬·ÀÖ¹¸³ÖµµÄÊý¾Ý¹ý³¤±¨´í def SetPlayerName(self,Str): if len(Str)<=33: self.PlayerName = Str else: self.PlayerName = Str[:33] def SetExtraInfo(self,Str): if len(Str)<=256: self.ExtraInfo = Str else: self.ExtraInfo = Str[:256] #------------------------------------------------------ #ÓÎÏ·×éºÏ±í£¬ÓÃÓڼǼ×éºÏµÄ¹«¹²ÊôÐÔ#tagGameGroup class tagGameGroup(Structure): _pack_ = 1 _fields_ = [ ('Type', ctypes.c_ubyte), ('GroupID', ctypes.c_ulong), ('GroupNameLen', ctypes.c_ubyte), ('GroupName', ctypes.c_char_p), ('MemberCount', ctypes.c_ubyte), ('GroupDataLen', ctypes.c_ulong), ('GroupData', ctypes.c_char_p), ('Extra1', ctypes.c_ulong), ('Extra2', ctypes.c_ulong), ('Extra3', ctypes.c_ulong), ('ADOResult', ctypes.c_ulong), ] def __init__(self): Structure.__init__(self) self.clear() def clear(self): self.Type = 0 self.GroupID = 0 self.GroupNameLen = 0 self.GroupName = '' self.MemberCount = 0 self.GroupDataLen = 0 self.GroupData = '' self.Extra1 = 0 self.Extra2 = 0 self.Extra3 = 0 def readData(self, buf, pos = 0, length = 0): if not pos <= length: msg = error.formatMsg('error', error.ERROR_NO_148, '(pos = %s) > (length = %s)'%(pos, length)) mylog.error(msg) return -1 if len(buf) < pos + self.getLength(): msg = error.formatMsg('error', error.ERROR_NO_149, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength())) mylog.error(msg) self.clear() self.Type, pos = CommFunc.ReadBYTE(buf, pos) self.GroupID, pos = CommFunc.ReadDWORD(buf, pos) self.GroupNameLen, pos = CommFunc.ReadBYTE(buf, pos) tmp, pos = CommFunc.ReadString(buf, pos, self.GroupNameLen) self.GroupName = ctypes.c_char_p(tmp) self.MemberCount, pos = CommFunc.ReadBYTE(buf, pos) self.GroupDataLen, pos = CommFunc.ReadDWORD(buf, pos) tmp, pos = CommFunc.ReadString(buf, pos, self.GroupDataLen) self.GroupData = ctypes.c_char_p(tmp) self.Extra1, pos = CommFunc.ReadDWORD(buf, pos) self.Extra2, pos = CommFunc.ReadDWORD(buf, pos) self.Extra3, pos = CommFunc.ReadDWORD(buf, pos) return self.getLength() def getBuffer(self): buf = '' buf = CommFunc.WriteBYTE(buf, self.Type) buf = CommFunc.WriteDWORD(buf, self.GroupID) buf = CommFunc.WriteBYTE(buf, self.GroupNameLen) buf = CommFunc.WriteString(buf, self.GroupNameLen, self.GroupName) buf = CommFunc.WriteBYTE(buf, self.MemberCount) buf = CommFunc.WriteDWORD(buf, self.GroupDataLen) buf = CommFunc.WriteString(buf, self.GroupDataLen, self.GroupData) buf = CommFunc.WriteDWORD(buf, self.Extra1) buf = CommFunc.WriteDWORD(buf, self.Extra2) buf = CommFunc.WriteDWORD(buf, self.Extra3) return buf def getLength(self): length = 0 length += sizeof(ctypes.c_ubyte) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ubyte) length += self.GroupNameLen length += sizeof(ctypes.c_ubyte) length += sizeof(ctypes.c_ulong) length += self.GroupDataLen length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) return length def getRecord(self): '''×éÖ¯´æ´¢¼Ç¼''' rec = {} rec[u'Type'] = self.Type rec[u'GroupID'] = self.GroupID rec[u'GroupNameLen'] = self.GroupNameLen rec[u'GroupName'] = fix_incomingText(self.GroupName) rec[u'MemberCount'] = self.MemberCount rec[u'GroupDataLen'] = self.GroupDataLen rec[u'GroupData'] = fix_incomingText(self.GroupData) rec[u'Extra1'] = self.Extra1 rec[u'Extra2'] = self.Extra2 rec[u'Extra3'] = self.Extra3 return rec def readRecord(self, rec): '''ÓÉÓÚMongoDB¶Á³öÀ´ÊÇunicode,ËùÓÐ×Ö·û´®ÐèÒª½øÐÐת»»''' self.Type = rec.get(u'Type', 0) self.GroupID = rec.get(u'GroupID', 0) self.GroupNameLen = rec.get(u'GroupNameLen', 0) self.GroupName = fix_outgoingText(rec.get(u'GroupName', u'')) self.MemberCount = rec.get(u'MemberCount', 0) self.GroupDataLen = rec.get(u'GroupDataLen', 0) self.GroupData = fix_outgoingText(rec.get(u'GroupData', u'')) self.Extra1 = rec.get(u'Extra1', 0) self.Extra2 = rec.get(u'Extra2', 0) self.Extra3 = rec.get(u'Extra3', 0) #Can not implement adoLoadStr method:No key defined! def adoInsert(self, collection): '''Ö´ÐвåÈë''' trycnt = 0 rec = self.getRecord() while(True): try: collection.insert(rec, False, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_152, 'Insert failed!Type = %s, error = %s, trycnt = %d'%(self.Type, err, trycnt)) mylog.error(msg) return False return True #Can not implement adoUpdateStr method:No key defined! def adoUpdateEx(self, collection, spec): '''Ö´ÐиüÐÂ''' trycnt = 0 rec = self.getRecord() while(True): try: collection.update(spec, {'$set':rec}, False, False, True, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_154, 'Update failed!Type = %s, error = %s, trycnt = %d'%(self.Type, err, trycnt)) mylog.error(msg) return False return True #Can not implement adoCheckUpdateStr method:No key defined! #Can not implement adoCheckUpdateExStr method:No key defined! def getAdoRecords(self, resultCollection): '''²éѯ½á¹û´ò°ü³É¶þ½øÖÆÁ÷''' result = '' result = CommFunc.WriteDWORD(result, resultCollection.count()) for rec in resultCollection: self.readRecord(rec) result += self.getBuffer() return result def adoQueryIndex(self, collection): '''ÓÃË÷Òý×ֶβéÕÒ''' resultCollection = collection.find({'Type':self.Type}) return self.getAdoRecords(resultCollection) def adoQueryCustom(self, collection, queryDict): '''×Ô¶¨Òå²éѯ''' resultCollection = collection.find(queryDict) return self.getAdoRecords(resultCollection) def adoQueryAll(self, collection): '''²éѯËùÓÐ''' resultCollection = collection.find() return self.getAdoRecords(resultCollection) def adoDeleteByIndex(self, collection): '''¸ù¾ÝË÷Òýɾ³ý''' trycnt = 0 while(True): try: collection.remove({'Type':self.Type}) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:Type = %s"%(self.__class__.__name__, inspect.stack()[0][3], self.Type)) msg = error.formatMsg('error', error.ERROR_NO_155, 'delete failure!self.Type = %s, error = %s, trycnt = %d'%(self.Type, err, trycnt)) mylog.error(msg) return False return True def outputString(self): output = '''//ÓÎÏ·×éºÏ±í£¬ÓÃÓڼǼ×éºÏµÄ¹«¹²ÊôÐÔ#tagGameGroup: Type = %s, GroupID = %s, GroupNameLen = %s, GroupName = %s, MemberCount = %s, GroupDataLen = %s, GroupData = %s, Extra1 = %s, Extra2 = %s, Extra3 = %s, ADOResult = %s, '''%( self.Type, self.GroupID, self.GroupNameLen, self.GroupName, self.MemberCount, self.GroupDataLen, self.GroupData, self.Extra1, self.Extra2, self.Extra3, self.ADOResult, ) return output def dumpString(self): output = '''%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s'''%( self.Type, self.GroupID, self.GroupNameLen, self.GroupName, self.MemberCount, self.GroupDataLen, self.GroupData, self.Extra1, self.Extra2, self.Extra3, ) return output #------------------------------------------------------ #ÓÎÏ·×éºÏ³ÉÔ±±í£¬ÓÃÓڼǼ³ÉÔ±»ù±¾ÊôÐÔ#tagGameGroupMember class tagGameGroupMember(Structure): _pack_ = 1 _fields_ = [ ('Type', ctypes.c_ubyte), ('GroupID', ctypes.c_ulong), ('PlayerID', ctypes.c_ulong), ('PlayerName', ctypes.c_char * 33), ('PositionIndex', ctypes.c_ubyte), ('PlayerDataLen', ctypes.c_ulong), ('PlayerData', ctypes.c_char_p), ('Extra1', ctypes.c_ulong), ('Extra2', ctypes.c_ulong), ('Extra3', ctypes.c_ulong), ('Extra4', ctypes.c_ulong), ('Extra5', ctypes.c_ulong), ('Extra6', ctypes.c_ulong), ('ADOResult', ctypes.c_ulong), ] def __init__(self): Structure.__init__(self) self.clear() def clear(self): self.Type = 0 self.GroupID = 0 self.PlayerID = 0 self.PlayerName = '' self.PositionIndex = 0 self.PlayerDataLen = 0 self.PlayerData = '' self.Extra1 = 0 self.Extra2 = 0 self.Extra3 = 0 self.Extra4 = 0 self.Extra5 = 0 self.Extra6 = 0 def readData(self, buf, pos = 0, length = 0): if not pos <= length: msg = error.formatMsg('error', error.ERROR_NO_148, '(pos = %s) > (length = %s)'%(pos, length)) mylog.error(msg) return -1 if len(buf) < pos + self.getLength(): msg = error.formatMsg('error', error.ERROR_NO_149, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength())) mylog.error(msg) self.clear() self.Type, pos = CommFunc.ReadBYTE(buf, pos) self.GroupID, pos = CommFunc.ReadDWORD(buf, pos) self.PlayerID, pos = CommFunc.ReadDWORD(buf, pos) self.PlayerName, pos = CommFunc.ReadString(buf, pos, 33) self.PositionIndex, pos = CommFunc.ReadBYTE(buf, pos) self.PlayerDataLen, pos = CommFunc.ReadDWORD(buf, pos) tmp, pos = CommFunc.ReadString(buf, pos, self.PlayerDataLen) self.PlayerData = ctypes.c_char_p(tmp) self.Extra1, pos = CommFunc.ReadDWORD(buf, pos) self.Extra2, pos = CommFunc.ReadDWORD(buf, pos) self.Extra3, pos = CommFunc.ReadDWORD(buf, pos) self.Extra4, pos = CommFunc.ReadDWORD(buf, pos) self.Extra5, pos = CommFunc.ReadDWORD(buf, pos) self.Extra6, pos = CommFunc.ReadDWORD(buf, pos) return self.getLength() def getBuffer(self): buf = '' buf = CommFunc.WriteBYTE(buf, self.Type) buf = CommFunc.WriteDWORD(buf, self.GroupID) buf = CommFunc.WriteDWORD(buf, self.PlayerID) buf = CommFunc.WriteString(buf, sizeof(ctypes.c_char) * 33, self.PlayerName) buf = CommFunc.WriteBYTE(buf, self.PositionIndex) buf = CommFunc.WriteDWORD(buf, self.PlayerDataLen) buf = CommFunc.WriteString(buf, self.PlayerDataLen, self.PlayerData) buf = CommFunc.WriteDWORD(buf, self.Extra1) buf = CommFunc.WriteDWORD(buf, self.Extra2) buf = CommFunc.WriteDWORD(buf, self.Extra3) buf = CommFunc.WriteDWORD(buf, self.Extra4) buf = CommFunc.WriteDWORD(buf, self.Extra5) buf = CommFunc.WriteDWORD(buf, self.Extra6) return buf def getLength(self): length = 0 length += sizeof(ctypes.c_ubyte) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_char) * 33 length += sizeof(ctypes.c_ubyte) length += sizeof(ctypes.c_ulong) length += self.PlayerDataLen length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) return length def getRecord(self): '''×éÖ¯´æ´¢¼Ç¼''' rec = {} rec[u'Type'] = self.Type rec[u'GroupID'] = self.GroupID rec[u'PlayerID'] = self.PlayerID rec[u'PlayerName'] = fix_incomingText(self.PlayerName) rec[u'PositionIndex'] = self.PositionIndex rec[u'PlayerDataLen'] = self.PlayerDataLen rec[u'PlayerData'] = fix_incomingText(self.PlayerData) rec[u'Extra1'] = self.Extra1 rec[u'Extra2'] = self.Extra2 rec[u'Extra3'] = self.Extra3 rec[u'Extra4'] = self.Extra4 rec[u'Extra5'] = self.Extra5 rec[u'Extra6'] = self.Extra6 return rec def readRecord(self, rec): '''ÓÉÓÚMongoDB¶Á³öÀ´ÊÇunicode,ËùÓÐ×Ö·û´®ÐèÒª½øÐÐת»»''' self.Type = rec.get(u'Type', 0) self.GroupID = rec.get(u'GroupID', 0) self.PlayerID = rec.get(u'PlayerID', 0) self.PlayerName = fix_outgoingText(rec.get(u'PlayerName', u'')) self.PositionIndex = rec.get(u'PositionIndex', 0) self.PlayerDataLen = rec.get(u'PlayerDataLen', 0) self.PlayerData = fix_outgoingText(rec.get(u'PlayerData', u'')) self.Extra1 = rec.get(u'Extra1', 0) self.Extra2 = rec.get(u'Extra2', 0) self.Extra3 = rec.get(u'Extra3', 0) self.Extra4 = rec.get(u'Extra4', 0) self.Extra5 = rec.get(u'Extra5', 0) self.Extra6 = rec.get(u'Extra6', 0) #Can not implement adoLoadStr method:No key defined! def adoInsert(self, collection): '''Ö´ÐвåÈë''' trycnt = 0 rec = self.getRecord() while(True): try: collection.insert(rec, False, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_152, 'Insert failed!Type = %s, error = %s, trycnt = %d'%(self.Type, err, trycnt)) mylog.error(msg) return False return True #Can not implement adoUpdateStr method:No key defined! def adoUpdateEx(self, collection, spec): '''Ö´ÐиüÐÂ''' trycnt = 0 rec = self.getRecord() while(True): try: collection.update(spec, {'$set':rec}, False, False, True, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_154, 'Update failed!Type = %s, error = %s, trycnt = %d'%(self.Type, err, trycnt)) mylog.error(msg) return False return True #Can not implement adoCheckUpdateStr method:No key defined! #Can not implement adoCheckUpdateExStr method:No key defined! def getAdoRecords(self, resultCollection): '''²éѯ½á¹û´ò°ü³É¶þ½øÖÆÁ÷''' result = '' result = CommFunc.WriteDWORD(result, resultCollection.count()) for rec in resultCollection: self.readRecord(rec) result += self.getBuffer() return result def adoQueryIndex(self, collection): '''ÓÃË÷Òý×ֶβéÕÒ''' resultCollection = collection.find({'Type':self.Type}) return self.getAdoRecords(resultCollection) def adoQueryCustom(self, collection, queryDict): '''×Ô¶¨Òå²éѯ''' resultCollection = collection.find(queryDict) return self.getAdoRecords(resultCollection) def adoQueryAll(self, collection): '''²éѯËùÓÐ''' resultCollection = collection.find() return self.getAdoRecords(resultCollection) def adoDeleteByIndex(self, collection): '''¸ù¾ÝË÷Òýɾ³ý''' trycnt = 0 while(True): try: collection.remove({'Type':self.Type}) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:Type = %s"%(self.__class__.__name__, inspect.stack()[0][3], self.Type)) msg = error.formatMsg('error', error.ERROR_NO_155, 'delete failure!self.Type = %s, error = %s, trycnt = %d'%(self.Type, err, trycnt)) mylog.error(msg) return False return True def outputString(self): output = '''//ÓÎÏ·×éºÏ³ÉÔ±±í£¬ÓÃÓڼǼ³ÉÔ±»ù±¾ÊôÐÔ#tagGameGroupMember: Type = %s, GroupID = %s, PlayerID = %s, PlayerName = %s, PositionIndex = %s, PlayerDataLen = %s, PlayerData = %s, Extra1 = %s, Extra2 = %s, Extra3 = %s, Extra4 = %s, Extra5 = %s, Extra6 = %s, ADOResult = %s, '''%( self.Type, self.GroupID, self.PlayerID, self.PlayerName, self.PositionIndex, self.PlayerDataLen, self.PlayerData, self.Extra1, self.Extra2, self.Extra3, self.Extra4, self.Extra5, self.Extra6, self.ADOResult, ) return output def dumpString(self): output = '''%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s'''%( self.Type, self.GroupID, self.PlayerID, self.PlayerName, self.PositionIndex, self.PlayerDataLen, self.PlayerData, self.Extra1, self.Extra2, self.Extra3, self.Extra4, self.Extra5, self.Extra6, ) return output #CharÊý×éÀàÐÍSet½Ó¿Ú,ʹÓøýӿڶԴËÀàÐÍÊý¾Ý¸³Öµ£¬·ÀÖ¹¸³ÖµµÄÊý¾Ý¹ý³¤±¨´í def SetPlayerName(self,Str): if len(Str)<=33: self.PlayerName = Str else: self.PlayerName = Str[:33] #------------------------------------------------------ #ÓÎÏ·×éºÏ³ÉÔ±½»»¥ÐÅÏ¢±í£¬ÓÃÓڼǼPlayerIDÍæ¼Ò¶ÔTargetIDÍæ¼ÒµÄ¹ØÏµÐÅÏ¢#tagGameGroupMutualInfo class tagGameGroupMutualInfo(Structure): _pack_ = 1 _fields_ = [ ('Type', ctypes.c_ubyte), ('GroupID', ctypes.c_ulong), ('PlayerID', ctypes.c_ulong), ('TargetID', ctypes.c_ulong), ('Friendliness', ctypes.c_ulong), ('Extra1', ctypes.c_ulong), ('Extra2', ctypes.c_ulong), ('Extra3', ctypes.c_ulong), ('ADOResult', ctypes.c_ulong), ] def __init__(self): Structure.__init__(self) self.clear() def clear(self): memset(addressof(self), 0, self.getLength()) def readData(self, buf, pos = 0, length = 0): if not pos <= length: msg = error.formatMsg('error', error.ERROR_NO_150, '(pos = %s)> (length = %s)'%(pos, length)) mylog.error(msg) return -1 if len(buf) < pos + self.getLength(): msg = error.formatMsg('error', error.ERROR_NO_151, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength())) mylog.error(msg) return -1 self.clear() memmove(addressof(self), buf[pos:], self.getLength()) return self.getLength() def getBuffer(self): buf = create_string_buffer(self.getLength()) memmove(addressof(buf), addressof(self), self.getLength()) return string_at(addressof(buf), self.getLength()) def getLength(self): return sizeof(tagGameGroupMutualInfo) def getRecord(self): '''×éÖ¯´æ´¢¼Ç¼''' rec = {} rec[u'Type'] = self.Type rec[u'GroupID'] = self.GroupID rec[u'PlayerID'] = self.PlayerID rec[u'TargetID'] = self.TargetID rec[u'Friendliness'] = self.Friendliness rec[u'Extra1'] = self.Extra1 rec[u'Extra2'] = self.Extra2 rec[u'Extra3'] = self.Extra3 return rec def readRecord(self, rec): '''ÓÉÓÚMongoDB¶Á³öÀ´ÊÇunicode,ËùÓÐ×Ö·û´®ÐèÒª½øÐÐת»»''' self.Type = rec.get(u'Type', 0) self.GroupID = rec.get(u'GroupID', 0) self.PlayerID = rec.get(u'PlayerID', 0) self.TargetID = rec.get(u'TargetID', 0) self.Friendliness = rec.get(u'Friendliness', 0) self.Extra1 = rec.get(u'Extra1', 0) self.Extra2 = rec.get(u'Extra2', 0) self.Extra3 = rec.get(u'Extra3', 0) #Can not implement adoLoadStr method:No key defined! def adoInsert(self, collection): '''Ö´ÐвåÈë''' trycnt = 0 rec = self.getRecord() while(True): try: collection.insert(rec, False, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_152, 'Insert failed!Type = %s, error = %s, trycnt = %d'%(self.Type, err, trycnt)) mylog.error(msg) return False return True #Can not implement adoUpdateStr method:No key defined! def adoUpdateEx(self, collection, spec): '''Ö´ÐиüÐÂ''' trycnt = 0 rec = self.getRecord() while(True): try: collection.update(spec, {'$set':rec}, False, False, True, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_154, 'Update failed!Type = %s, error = %s, trycnt = %d'%(self.Type, err, trycnt)) mylog.error(msg) return False return True #Can not implement adoCheckUpdateStr method:No key defined! #Can not implement adoCheckUpdateExStr method:No key defined! def getAdoRecords(self, resultCollection): '''²éѯ½á¹û´ò°ü³É¶þ½øÖÆÁ÷''' result = '' result = CommFunc.WriteDWORD(result, resultCollection.count()) for rec in resultCollection: self.readRecord(rec) result += self.getBuffer() return result def adoQueryIndex(self, collection): '''ÓÃË÷Òý×ֶβéÕÒ''' resultCollection = collection.find({'Type':self.Type}) return self.getAdoRecords(resultCollection) def adoQueryCustom(self, collection, queryDict): '''×Ô¶¨Òå²éѯ''' resultCollection = collection.find(queryDict) return self.getAdoRecords(resultCollection) def adoQueryAll(self, collection): '''²éѯËùÓÐ''' resultCollection = collection.find() return self.getAdoRecords(resultCollection) def adoDeleteByIndex(self, collection): '''¸ù¾ÝË÷Òýɾ³ý''' trycnt = 0 while(True): try: collection.remove({'Type':self.Type}) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:Type = %s"%(self.__class__.__name__, inspect.stack()[0][3], self.Type)) msg = error.formatMsg('error', error.ERROR_NO_155, 'delete failure!self.Type = %s, error = %s, trycnt = %d'%(self.Type, err, trycnt)) mylog.error(msg) return False return True def outputString(self): output = '''//ÓÎÏ·×éºÏ³ÉÔ±½»»¥ÐÅÏ¢±í£¬ÓÃÓڼǼPlayerIDÍæ¼Ò¶ÔTargetIDÍæ¼ÒµÄ¹ØÏµÐÅÏ¢#tagGameGroupMutualInfo: Type = %s, GroupID = %s, PlayerID = %s, TargetID = %s, Friendliness = %s, Extra1 = %s, Extra2 = %s, Extra3 = %s, ADOResult = %s, '''%( self.Type, self.GroupID, self.PlayerID, self.TargetID, self.Friendliness, self.Extra1, self.Extra2, self.Extra3, self.ADOResult, ) return output def dumpString(self): output = '''%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s'''%( self.Type, self.GroupID, self.PlayerID, self.TargetID, self.Friendliness, self.Extra1, self.Extra2, self.Extra3, ) return output #------------------------------------------------------ #Íæ¼ÒÍ·Ïαí#tagPlayerDienstgrad class tagPlayerDienstgrad(Structure): _pack_ = 1 _fields_ = [ ('PlayerID', ctypes.c_ulong), ('GradID', ctypes.c_ulong), ('CreateTime', ctypes.c_double), ('State', ctypes.c_ubyte), ('ExpireTime', ctypes.c_ulong), ('ADOResult', ctypes.c_ulong), ] def __init__(self): Structure.__init__(self) self.clear() def clear(self): memset(addressof(self), 0, self.getLength()) def readData(self, buf, pos = 0, length = 0): if not pos <= length: msg = error.formatMsg('error', error.ERROR_NO_150, '(pos = %s)> (length = %s)'%(pos, length)) mylog.error(msg) return -1 if len(buf) < pos + self.getLength(): msg = error.formatMsg('error', error.ERROR_NO_151, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength())) mylog.error(msg) return -1 self.clear() memmove(addressof(self), buf[pos:], self.getLength()) return self.getLength() def getBuffer(self): buf = create_string_buffer(self.getLength()) memmove(addressof(buf), addressof(self), self.getLength()) return string_at(addressof(buf), self.getLength()) def getLength(self): return sizeof(tagPlayerDienstgrad) def getRecord(self): '''×éÖ¯´æ´¢¼Ç¼''' rec = {} rec[u'PlayerID'] = self.PlayerID rec[u'GradID'] = self.GradID rec[u'CreateTime'] = self.CreateTime rec[u'State'] = self.State rec[u'ExpireTime'] = self.ExpireTime return rec def readRecord(self, rec): '''ÓÉÓÚMongoDB¶Á³öÀ´ÊÇunicode,ËùÓÐ×Ö·û´®ÐèÒª½øÐÐת»»''' self.PlayerID = rec.get(u'PlayerID', 0) self.GradID = rec.get(u'GradID', 0) self.CreateTime = rec.get(u'CreateTime', 0) self.State = rec.get(u'State', 0) self.ExpireTime = rec.get(u'ExpireTime', 0) #Can not implement adoLoadStr method:No key defined! def adoInsert(self, collection): '''Ö´ÐвåÈë''' trycnt = 0 rec = self.getRecord() while(True): try: collection.insert(rec, False, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_152, 'Insert failed!PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True #Can not implement adoUpdateStr method:No key defined! def adoUpdateEx(self, collection, spec): '''Ö´ÐиüÐÂ''' trycnt = 0 rec = self.getRecord() while(True): try: collection.update(spec, {'$set':rec}, False, False, True, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_154, 'Update failed!PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True #Can not implement adoCheckUpdateStr method:No key defined! #Can not implement adoCheckUpdateExStr method:No key defined! def getAdoRecords(self, resultCollection): '''²éѯ½á¹û´ò°ü³É¶þ½øÖÆÁ÷''' result = '' result = CommFunc.WriteDWORD(result, resultCollection.count()) for rec in resultCollection: self.readRecord(rec) result += self.getBuffer() return result def adoQueryIndex(self, collection): '''ÓÃË÷Òý×ֶβéÕÒ''' resultCollection = collection.find({'PlayerID':self.PlayerID}) return self.getAdoRecords(resultCollection) def adoQueryCustom(self, collection, queryDict): '''×Ô¶¨Òå²éѯ''' resultCollection = collection.find(queryDict) return self.getAdoRecords(resultCollection) def adoQueryAll(self, collection): '''²éѯËùÓÐ''' resultCollection = collection.find() return self.getAdoRecords(resultCollection) def adoDeleteByIndex(self, collection): '''¸ù¾ÝË÷Òýɾ³ý''' trycnt = 0 while(True): try: collection.remove({'PlayerID':self.PlayerID}) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:PlayerID = %s"%(self.__class__.__name__, inspect.stack()[0][3], self.PlayerID)) msg = error.formatMsg('error', error.ERROR_NO_155, 'delete failure!self.PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True def outputString(self): output = '''//Íæ¼ÒÍ·Ïαí#tagPlayerDienstgrad: PlayerID = %s, GradID = %s, CreateTime = %s, State = %s, ExpireTime = %s, ADOResult = %s, '''%( self.PlayerID, self.GradID, self.CreateTime, self.State, self.ExpireTime, self.ADOResult, ) return output def dumpString(self): output = '''%1s\t%1s\t%1s\t%1s\t%1s'''%( self.PlayerID, self.GradID, self.CreateTime, self.State, self.ExpireTime, ) return output #------------------------------------------------------ #´æ´¢Íæ¼ÒÔª±¦µÄÁ÷Á¿#tagAccCoins class tagAccCoins(Structure): _pack_ = 1 _fields_ = [ ('AccID', ctypes.c_char * 65), ('GoldCoins', ctypes.c_ulong), ('SilverCoins', ctypes.c_ulong), ('UseGoldCoins', ctypes.c_ulong), ('UseSilverCoins', ctypes.c_ulong), ('ADOResult', ctypes.c_ulong), ] def __init__(self): Structure.__init__(self) self.clear() def clear(self): memset(addressof(self), 0, self.getLength()) def readData(self, buf, pos = 0, length = 0): if not pos <= length: msg = error.formatMsg('error', error.ERROR_NO_150, '(pos = %s)> (length = %s)'%(pos, length)) mylog.error(msg) return -1 if len(buf) < pos + self.getLength(): msg = error.formatMsg('error', error.ERROR_NO_151, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength())) mylog.error(msg) return -1 self.clear() memmove(addressof(self), buf[pos:], self.getLength()) return self.getLength() def getBuffer(self): buf = create_string_buffer(self.getLength()) memmove(addressof(buf), addressof(self), self.getLength()) return string_at(addressof(buf), self.getLength()) def getLength(self): return sizeof(tagAccCoins) def getRecord(self): '''×éÖ¯´æ´¢¼Ç¼''' rec = {} rec[u'AccID'] = fix_incomingText(self.AccID) rec[u'GoldCoins'] = self.GoldCoins rec[u'SilverCoins'] = self.SilverCoins rec[u'UseGoldCoins'] = self.UseGoldCoins rec[u'UseSilverCoins'] = self.UseSilverCoins return rec def readRecord(self, rec): '''ÓÉÓÚMongoDB¶Á³öÀ´ÊÇunicode,ËùÓÐ×Ö·û´®ÐèÒª½øÐÐת»»''' self.AccID = fix_outgoingText(rec.get(u'AccID', u'')) self.GoldCoins = rec.get(u'GoldCoins', 0) self.SilverCoins = rec.get(u'SilverCoins', 0) self.UseGoldCoins = rec.get(u'UseGoldCoins', 0) self.UseSilverCoins = rec.get(u'UseSilverCoins', 0) def adoLoad(self, collection): '''ʹÓÃKEY²éÕÒ²¢¶ÁÈ¡''' resultCollection = collection.find({'AccID':fix_incomingText(self.AccID)}) if resultCollection.count() <= 0: return False #ÓÉÓÚÊÇKEY²éÕÒ£¬ËùÓÐÈç¹û´æÔÚ¾ÍÖ»ÓÐÒ»Ìõ¼Ç¼ rec = resultCollection[0] #¶ÁÈ¡Êý¾Ý self.readRecord(rec) return True def adoInsert(self, collection): '''Ö´ÐвåÈë''' trycnt = 0 rec = self.getRecord() while(True): try: collection.insert(rec, False, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_152, 'Insert failed!AccID = %s, error = %s, trycnt = %d'%(self.AccID, err, trycnt)) mylog.error(msg) return False return True def adoUpdate(self, collection): '''Ö´ÐиüÐÂ''' trycnt = 0 rec = self.getRecord() while(True): try: collection.update({'AccID':fix_incomingText(self.AccID)}, {'$set':rec}, False, False, True, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_153, 'Update failed!AccID = %s, error = %s, trycnt = %d'%(self.AccID, err, trycnt)) mylog.error(msg) return False return True def adoUpdateEx(self, collection, spec): '''Ö´ÐиüÐÂ''' trycnt = 0 rec = self.getRecord() while(True): try: collection.update(spec, {'$set':rec}, False, False, True, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_154, 'Update failed!AccID = %s, error = %s, trycnt = %d'%(self.AccID, err, trycnt)) mylog.error(msg) return False return True def adoCheckUpdate(self, collection): '''¸ù¾ÝÇé¿öÖ´ÐвåÈë»ò¸üÐÂ''' resultCollection = collection.find({'AccID':fix_incomingText(self.AccID)}) if resultCollection.count() <= 0: return self.adoInsert(collection) return self.adoUpdate(collection) def adoCheckUpdateEx(self, collection, spec): '''¸ù¾ÝÇé¿öÖ´ÐвåÈë»ò¸üÐÂ''' resultCollection = collection.find(spec) if resultCollection.count() <= 0: return self.adoInsert(collection) return self.adoUpdateEx(collection, spec) def getAdoRecords(self, resultCollection): '''²éѯ½á¹û´ò°ü³É¶þ½øÖÆÁ÷''' result = '' result = CommFunc.WriteDWORD(result, resultCollection.count()) for rec in resultCollection: self.readRecord(rec) result += self.getBuffer() return result def adoQueryIndex(self, collection): '''ÓÃË÷Òý×ֶβéÕÒ''' resultCollection = collection.find({'AccID':fix_incomingText(self.AccID)}) return self.getAdoRecords(resultCollection) def adoQueryCustom(self, collection, queryDict): '''×Ô¶¨Òå²éѯ''' resultCollection = collection.find(queryDict) return self.getAdoRecords(resultCollection) def adoQueryAll(self, collection): '''²éѯËùÓÐ''' resultCollection = collection.find() return self.getAdoRecords(resultCollection) def adoDeleteByIndex(self, collection): '''¸ù¾ÝË÷Òýɾ³ý''' trycnt = 0 while(True): try: collection.remove({'AccID':fix_incomingText(self.AccID)}) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:AccID = %s"%(self.__class__.__name__, inspect.stack()[0][3], self.AccID)) msg = error.formatMsg('error', error.ERROR_NO_155, 'delete failure!self.AccID = %s, error = %s, trycnt = %d'%(self.AccID, err, trycnt)) mylog.error(msg) return False return True def outputString(self): output = '''//´æ´¢Íæ¼ÒÔª±¦µÄÁ÷Á¿#tagAccCoins: AccID = %s, GoldCoins = %s, SilverCoins = %s, UseGoldCoins = %s, UseSilverCoins = %s, ADOResult = %s, '''%( self.AccID, self.GoldCoins, self.SilverCoins, self.UseGoldCoins, self.UseSilverCoins, self.ADOResult, ) return output def dumpString(self): output = '''%1s\t%1s\t%1s\t%1s\t%1s'''%( self.AccID, self.GoldCoins, self.SilverCoins, self.UseGoldCoins, self.UseSilverCoins, ) return output #CharÊý×éÀàÐÍSet½Ó¿Ú,ʹÓøýӿڶԴËÀàÐÍÊý¾Ý¸³Öµ£¬·ÀÖ¹¸³ÖµµÄÊý¾Ý¹ý³¤±¨´í def SetAccID(self,Str): if len(Str)<=65: self.AccID = Str else: self.AccID = Str[:65] #------------------------------------------------------ #¸øÖ¸¶¨Íæ¼ÒËͳö½±ÀøµÄ½á¹û#tagAccIDSendPrize class tagAccIDSendPrize(Structure): _pack_ = 1 _fields_ = [ ('CheckValue', ctypes.c_char * 33), ('AccID', ctypes.c_char * 65), ('PrizeID', ctypes.c_ulong), ('PrizeNum', ctypes.c_ulong), ('ExpiredTime', ctypes.c_double), ('PrizeReason', ctypes.c_char * 20), ('IsAccept', ctypes.c_ushort), ('SendPrizeTime', ctypes.c_double), ('GetPrizeTime', ctypes.c_double), ('IsBind', ctypes.c_ubyte), ('ADOResult', ctypes.c_ulong), ] def __init__(self): Structure.__init__(self) self.clear() def clear(self): memset(addressof(self), 0, self.getLength()) def readData(self, buf, pos = 0, length = 0): if not pos <= length: msg = error.formatMsg('error', error.ERROR_NO_150, '(pos = %s)> (length = %s)'%(pos, length)) mylog.error(msg) return -1 if len(buf) < pos + self.getLength(): msg = error.formatMsg('error', error.ERROR_NO_151, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength())) mylog.error(msg) return -1 self.clear() memmove(addressof(self), buf[pos:], self.getLength()) return self.getLength() def getBuffer(self): buf = create_string_buffer(self.getLength()) memmove(addressof(buf), addressof(self), self.getLength()) return string_at(addressof(buf), self.getLength()) def getLength(self): return sizeof(tagAccIDSendPrize) def getRecord(self): '''×éÖ¯´æ´¢¼Ç¼''' rec = {} rec[u'CheckValue'] = fix_incomingText(self.CheckValue) rec[u'AccID'] = fix_incomingText(self.AccID) rec[u'PrizeID'] = self.PrizeID rec[u'PrizeNum'] = self.PrizeNum rec[u'ExpiredTime'] = self.ExpiredTime rec[u'PrizeReason'] = fix_incomingText(self.PrizeReason) rec[u'IsAccept'] = self.IsAccept rec[u'SendPrizeTime'] = self.SendPrizeTime rec[u'GetPrizeTime'] = self.GetPrizeTime rec[u'IsBind'] = self.IsBind return rec def readRecord(self, rec): '''ÓÉÓÚMongoDB¶Á³öÀ´ÊÇunicode,ËùÓÐ×Ö·û´®ÐèÒª½øÐÐת»»''' self.CheckValue = fix_outgoingText(rec.get(u'CheckValue', u'')) self.AccID = fix_outgoingText(rec.get(u'AccID', u'')) self.PrizeID = rec.get(u'PrizeID', 0) self.PrizeNum = rec.get(u'PrizeNum', 0) self.ExpiredTime = rec.get(u'ExpiredTime', 0) self.PrizeReason = fix_outgoingText(rec.get(u'PrizeReason', u'')) self.IsAccept = rec.get(u'IsAccept', 0) self.SendPrizeTime = rec.get(u'SendPrizeTime', 0) self.GetPrizeTime = rec.get(u'GetPrizeTime', 0) self.IsBind = rec.get(u'IsBind', 0) def adoLoad(self, collection): '''ʹÓÃKEY²éÕÒ²¢¶ÁÈ¡''' resultCollection = collection.find({'CheckValue':fix_incomingText(self.CheckValue)}) if resultCollection.count() <= 0: return False #ÓÉÓÚÊÇKEY²éÕÒ£¬ËùÓÐÈç¹û´æÔÚ¾ÍÖ»ÓÐÒ»Ìõ¼Ç¼ rec = resultCollection[0] #¶ÁÈ¡Êý¾Ý self.readRecord(rec) return True def adoInsert(self, collection): '''Ö´ÐвåÈë''' trycnt = 0 rec = self.getRecord() while(True): try: collection.insert(rec, False, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_152, 'Insert failed!AccID = %s, error = %s, trycnt = %d'%(self.AccID, err, trycnt)) mylog.error(msg) return False return True def adoUpdate(self, collection): '''Ö´ÐиüÐÂ''' trycnt = 0 rec = self.getRecord() while(True): try: collection.update({'CheckValue':fix_incomingText(self.CheckValue)}, {'$set':rec}, False, False, True, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_153, 'Update failed!AccID = %s, error = %s, trycnt = %d'%(self.AccID, err, trycnt)) mylog.error(msg) return False return True def adoUpdateEx(self, collection, spec): '''Ö´ÐиüÐÂ''' trycnt = 0 rec = self.getRecord() while(True): try: collection.update(spec, {'$set':rec}, False, False, True, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_154, 'Update failed!AccID = %s, error = %s, trycnt = %d'%(self.AccID, err, trycnt)) mylog.error(msg) return False return True def adoCheckUpdate(self, collection): '''¸ù¾ÝÇé¿öÖ´ÐвåÈë»ò¸üÐÂ''' resultCollection = collection.find({'CheckValue':fix_incomingText(self.CheckValue)}) if resultCollection.count() <= 0: return self.adoInsert(collection) return self.adoUpdate(collection) def adoCheckUpdateEx(self, collection, spec): '''¸ù¾ÝÇé¿öÖ´ÐвåÈë»ò¸üÐÂ''' resultCollection = collection.find(spec) if resultCollection.count() <= 0: return self.adoInsert(collection) return self.adoUpdateEx(collection, spec) def getAdoRecords(self, resultCollection): '''²éѯ½á¹û´ò°ü³É¶þ½øÖÆÁ÷''' result = '' result = CommFunc.WriteDWORD(result, resultCollection.count()) for rec in resultCollection: self.readRecord(rec) result += self.getBuffer() return result def adoQueryIndex(self, collection): '''ÓÃË÷Òý×ֶβéÕÒ''' resultCollection = collection.find({'AccID':fix_incomingText(self.AccID)}) return self.getAdoRecords(resultCollection) def adoQueryCustom(self, collection, queryDict): '''×Ô¶¨Òå²éѯ''' resultCollection = collection.find(queryDict) return self.getAdoRecords(resultCollection) def adoQueryAll(self, collection): '''²éѯËùÓÐ''' resultCollection = collection.find() return self.getAdoRecords(resultCollection) def adoDeleteByIndex(self, collection): '''¸ù¾ÝË÷Òýɾ³ý''' trycnt = 0 while(True): try: collection.remove({'AccID':fix_incomingText(self.AccID)}) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:AccID = %s"%(self.__class__.__name__, inspect.stack()[0][3], self.AccID)) msg = error.formatMsg('error', error.ERROR_NO_155, 'delete failure!self.AccID = %s, error = %s, trycnt = %d'%(self.AccID, err, trycnt)) mylog.error(msg) return False return True def outputString(self): output = '''//¸øÖ¸¶¨Íæ¼ÒËͳö½±ÀøµÄ½á¹û#tagAccIDSendPrize: CheckValue = %s, AccID = %s, PrizeID = %s, PrizeNum = %s, ExpiredTime = %s, PrizeReason = %s, IsAccept = %s, SendPrizeTime = %s, GetPrizeTime = %s, IsBind = %s, ADOResult = %s, '''%( self.CheckValue, self.AccID, self.PrizeID, self.PrizeNum, self.ExpiredTime, self.PrizeReason, self.IsAccept, self.SendPrizeTime, self.GetPrizeTime, self.IsBind, self.ADOResult, ) return output def dumpString(self): output = '''%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s'''%( self.CheckValue, self.AccID, self.PrizeID, self.PrizeNum, self.ExpiredTime, self.PrizeReason, self.IsAccept, self.SendPrizeTime, self.GetPrizeTime, self.IsBind, ) return output #CharÊý×éÀàÐÍSet½Ó¿Ú,ʹÓøýӿڶԴËÀàÐÍÊý¾Ý¸³Öµ£¬·ÀÖ¹¸³ÖµµÄÊý¾Ý¹ý³¤±¨´í def SetCheckValue(self,Str): if len(Str)<=33: self.CheckValue = Str else: self.CheckValue = Str[:33] def SetAccID(self,Str): if len(Str)<=65: self.AccID = Str else: self.AccID = Str[:65] def SetPrizeReason(self,Str): if len(Str)<=20: self.PrizeReason = Str else: self.PrizeReason = Str[:20] #------------------------------------------------------ #¹ú¼Ò¼Ò×åÕ½ÅÅλÈü±í#tagDBCountryFamilyWarRace class tagDBCountryFamilyWarRace(Structure): _pack_ = 1 _fields_ = [ ('Warindex', ctypes.c_ulong), ('AttackerFamilyID', ctypes.c_ulong), ('DefanceFamilyID', ctypes.c_ulong), ('BattleID', ctypes.c_ulong), ('Result', ctypes.c_ulong), ('ADOResult', ctypes.c_ulong), ] def __init__(self): Structure.__init__(self) self.clear() def clear(self): memset(addressof(self), 0, self.getLength()) def readData(self, buf, pos = 0, length = 0): if not pos <= length: msg = error.formatMsg('error', error.ERROR_NO_150, '(pos = %s)> (length = %s)'%(pos, length)) mylog.error(msg) return -1 if len(buf) < pos + self.getLength(): msg = error.formatMsg('error', error.ERROR_NO_151, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength())) mylog.error(msg) return -1 self.clear() memmove(addressof(self), buf[pos:], self.getLength()) return self.getLength() def getBuffer(self): buf = create_string_buffer(self.getLength()) memmove(addressof(buf), addressof(self), self.getLength()) return string_at(addressof(buf), self.getLength()) def getLength(self): return sizeof(tagDBCountryFamilyWarRace) def getRecord(self): '''×éÖ¯´æ´¢¼Ç¼''' rec = {} rec[u'Warindex'] = self.Warindex rec[u'AttackerFamilyID'] = self.AttackerFamilyID rec[u'DefanceFamilyID'] = self.DefanceFamilyID rec[u'BattleID'] = self.BattleID rec[u'Result'] = self.Result return rec def readRecord(self, rec): '''ÓÉÓÚMongoDB¶Á³öÀ´ÊÇunicode,ËùÓÐ×Ö·û´®ÐèÒª½øÐÐת»»''' self.Warindex = rec.get(u'Warindex', 0) self.AttackerFamilyID = rec.get(u'AttackerFamilyID', 0) self.DefanceFamilyID = rec.get(u'DefanceFamilyID', 0) self.BattleID = rec.get(u'BattleID', 0) self.Result = rec.get(u'Result', 0) #Can not implement adoLoadStr method:No key defined! def adoInsert(self, collection): '''Ö´ÐвåÈë''' trycnt = 0 rec = self.getRecord() while(True): try: collection.insert(rec, False, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_152, 'Insert failed!Warindex = %s, error = %s, trycnt = %d'%(self.Warindex, err, trycnt)) mylog.error(msg) return False return True #Can not implement adoUpdateStr method:No key defined! def adoUpdateEx(self, collection, spec): '''Ö´ÐиüÐÂ''' trycnt = 0 rec = self.getRecord() while(True): try: collection.update(spec, {'$set':rec}, False, False, True, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_154, 'Update failed!Warindex = %s, error = %s, trycnt = %d'%(self.Warindex, err, trycnt)) mylog.error(msg) return False return True #Can not implement adoCheckUpdateStr method:No key defined! #Can not implement adoCheckUpdateExStr method:No key defined! def getAdoRecords(self, resultCollection): '''²éѯ½á¹û´ò°ü³É¶þ½øÖÆÁ÷''' result = '' result = CommFunc.WriteDWORD(result, resultCollection.count()) for rec in resultCollection: self.readRecord(rec) result += self.getBuffer() return result def adoQueryIndex(self, collection): '''ÓÃË÷Òý×ֶβéÕÒ''' resultCollection = collection.find({'Warindex':self.Warindex}) return self.getAdoRecords(resultCollection) def adoQueryCustom(self, collection, queryDict): '''×Ô¶¨Òå²éѯ''' resultCollection = collection.find(queryDict) return self.getAdoRecords(resultCollection) def adoQueryAll(self, collection): '''²éѯËùÓÐ''' resultCollection = collection.find() return self.getAdoRecords(resultCollection) def adoDeleteByIndex(self, collection): '''¸ù¾ÝË÷Òýɾ³ý''' trycnt = 0 while(True): try: collection.remove({'Warindex':self.Warindex}) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:Warindex = %s"%(self.__class__.__name__, inspect.stack()[0][3], self.Warindex)) msg = error.formatMsg('error', error.ERROR_NO_155, 'delete failure!self.Warindex = %s, error = %s, trycnt = %d'%(self.Warindex, err, trycnt)) mylog.error(msg) return False return True def outputString(self): output = '''//¹ú¼Ò¼Ò×åÕ½ÅÅλÈü±í#tagDBCountryFamilyWarRace: Warindex = %s, AttackerFamilyID = %s, DefanceFamilyID = %s, BattleID = %s, Result = %s, ADOResult = %s, '''%( self.Warindex, self.AttackerFamilyID, self.DefanceFamilyID, self.BattleID, self.Result, self.ADOResult, ) return output def dumpString(self): output = '''%1s\t%1s\t%1s\t%1s\t%1s'''%( self.Warindex, self.AttackerFamilyID, self.DefanceFamilyID, self.BattleID, self.Result, ) return output #------------------------------------------------------ #¹ú¼Ò¼Ò×åÕ½±¨Ãû±í#tagDBCountryFamilyWarRequest class tagDBCountryFamilyWarRequest(Structure): _pack_ = 1 _fields_ = [ ('FamilyID', ctypes.c_ulong), ('Value', ctypes.c_ulong), ('ADOResult', ctypes.c_ulong), ] def __init__(self): Structure.__init__(self) self.clear() def clear(self): memset(addressof(self), 0, self.getLength()) def readData(self, buf, pos = 0, length = 0): if not pos <= length: msg = error.formatMsg('error', error.ERROR_NO_150, '(pos = %s)> (length = %s)'%(pos, length)) mylog.error(msg) return -1 if len(buf) < pos + self.getLength(): msg = error.formatMsg('error', error.ERROR_NO_151, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength())) mylog.error(msg) return -1 self.clear() memmove(addressof(self), buf[pos:], self.getLength()) return self.getLength() def getBuffer(self): buf = create_string_buffer(self.getLength()) memmove(addressof(buf), addressof(self), self.getLength()) return string_at(addressof(buf), self.getLength()) def getLength(self): return sizeof(tagDBCountryFamilyWarRequest) def getRecord(self): '''×éÖ¯´æ´¢¼Ç¼''' rec = {} rec[u'FamilyID'] = self.FamilyID rec[u'Value'] = self.Value return rec def readRecord(self, rec): '''ÓÉÓÚMongoDB¶Á³öÀ´ÊÇunicode,ËùÓÐ×Ö·û´®ÐèÒª½øÐÐת»»''' self.FamilyID = rec.get(u'FamilyID', 0) self.Value = rec.get(u'Value', 0) def adoLoad(self, collection): '''ʹÓÃKEY²éÕÒ²¢¶ÁÈ¡''' resultCollection = collection.find({'FamilyID':self.FamilyID}) if resultCollection.count() <= 0: return False #ÓÉÓÚÊÇKEY²éÕÒ£¬ËùÓÐÈç¹û´æÔÚ¾ÍÖ»ÓÐÒ»Ìõ¼Ç¼ rec = resultCollection[0] #¶ÁÈ¡Êý¾Ý self.readRecord(rec) return True def adoInsert(self, collection): '''Ö´ÐвåÈë''' trycnt = 0 rec = self.getRecord() while(True): try: collection.insert(rec, False, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_152, 'Insert failed!FamilyID = %s, error = %s, trycnt = %d'%(self.FamilyID, err, trycnt)) mylog.error(msg) return False return True def adoUpdate(self, collection): '''Ö´ÐиüÐÂ''' trycnt = 0 rec = self.getRecord() while(True): try: collection.update({'FamilyID':self.FamilyID}, {'$set':rec}, False, False, True, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_153, 'Update failed!FamilyID = %s, error = %s, trycnt = %d'%(self.FamilyID, err, trycnt)) mylog.error(msg) return False return True def adoUpdateEx(self, collection, spec): '''Ö´ÐиüÐÂ''' trycnt = 0 rec = self.getRecord() while(True): try: collection.update(spec, {'$set':rec}, False, False, True, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_154, 'Update failed!FamilyID = %s, error = %s, trycnt = %d'%(self.FamilyID, err, trycnt)) mylog.error(msg) return False return True def adoCheckUpdate(self, collection): '''¸ù¾ÝÇé¿öÖ´ÐвåÈë»ò¸üÐÂ''' resultCollection = collection.find({'FamilyID':self.FamilyID}) if resultCollection.count() <= 0: return self.adoInsert(collection) return self.adoUpdate(collection) def adoCheckUpdateEx(self, collection, spec): '''¸ù¾ÝÇé¿öÖ´ÐвåÈë»ò¸üÐÂ''' resultCollection = collection.find(spec) if resultCollection.count() <= 0: return self.adoInsert(collection) return self.adoUpdateEx(collection, spec) def getAdoRecords(self, resultCollection): '''²éѯ½á¹û´ò°ü³É¶þ½øÖÆÁ÷''' result = '' result = CommFunc.WriteDWORD(result, resultCollection.count()) for rec in resultCollection: self.readRecord(rec) result += self.getBuffer() return result def adoQueryIndex(self, collection): '''ÓÃË÷Òý×ֶβéÕÒ''' resultCollection = collection.find({'FamilyID':self.FamilyID}) return self.getAdoRecords(resultCollection) def adoQueryCustom(self, collection, queryDict): '''×Ô¶¨Òå²éѯ''' resultCollection = collection.find(queryDict) return self.getAdoRecords(resultCollection) def adoQueryAll(self, collection): '''²éѯËùÓÐ''' resultCollection = collection.find() return self.getAdoRecords(resultCollection) def adoDeleteByIndex(self, collection): '''¸ù¾ÝË÷Òýɾ³ý''' trycnt = 0 while(True): try: collection.remove({'FamilyID':self.FamilyID}) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:FamilyID = %s"%(self.__class__.__name__, inspect.stack()[0][3], self.FamilyID)) msg = error.formatMsg('error', error.ERROR_NO_155, 'delete failure!self.FamilyID = %s, error = %s, trycnt = %d'%(self.FamilyID, err, trycnt)) mylog.error(msg) return False return True def outputString(self): output = '''//¹ú¼Ò¼Ò×åÕ½±¨Ãû±í#tagDBCountryFamilyWarRequest: FamilyID = %s, Value = %s, ADOResult = %s, '''%( self.FamilyID, self.Value, self.ADOResult, ) return output def dumpString(self): output = '''%1s\t%1s'''%( self.FamilyID, self.Value, ) return output #------------------------------------------------------ #¹ú¼Ò¼Ò×åÕ½½á¹û±í#tagDBCountryFamilyWarResult class tagDBCountryFamilyWarResult(Structure): _pack_ = 1 _fields_ = [ ('FamilyID', ctypes.c_ulong), ('Billboard', ctypes.c_ulong), ('ADOResult', ctypes.c_ulong), ] def __init__(self): Structure.__init__(self) self.clear() def clear(self): memset(addressof(self), 0, self.getLength()) def readData(self, buf, pos = 0, length = 0): if not pos <= length: msg = error.formatMsg('error', error.ERROR_NO_150, '(pos = %s)> (length = %s)'%(pos, length)) mylog.error(msg) return -1 if len(buf) < pos + self.getLength(): msg = error.formatMsg('error', error.ERROR_NO_151, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength())) mylog.error(msg) return -1 self.clear() memmove(addressof(self), buf[pos:], self.getLength()) return self.getLength() def getBuffer(self): buf = create_string_buffer(self.getLength()) memmove(addressof(buf), addressof(self), self.getLength()) return string_at(addressof(buf), self.getLength()) def getLength(self): return sizeof(tagDBCountryFamilyWarResult) def getRecord(self): '''×éÖ¯´æ´¢¼Ç¼''' rec = {} rec[u'FamilyID'] = self.FamilyID rec[u'Billboard'] = self.Billboard return rec def readRecord(self, rec): '''ÓÉÓÚMongoDB¶Á³öÀ´ÊÇunicode,ËùÓÐ×Ö·û´®ÐèÒª½øÐÐת»»''' self.FamilyID = rec.get(u'FamilyID', 0) self.Billboard = rec.get(u'Billboard', 0) def adoLoad(self, collection): '''ʹÓÃKEY²éÕÒ²¢¶ÁÈ¡''' resultCollection = collection.find({'FamilyID':self.FamilyID}) if resultCollection.count() <= 0: return False #ÓÉÓÚÊÇKEY²éÕÒ£¬ËùÓÐÈç¹û´æÔÚ¾ÍÖ»ÓÐÒ»Ìõ¼Ç¼ rec = resultCollection[0] #¶ÁÈ¡Êý¾Ý self.readRecord(rec) return True def adoInsert(self, collection): '''Ö´ÐвåÈë''' trycnt = 0 rec = self.getRecord() while(True): try: collection.insert(rec, False, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_152, 'Insert failed!FamilyID = %s, error = %s, trycnt = %d'%(self.FamilyID, err, trycnt)) mylog.error(msg) return False return True def adoUpdate(self, collection): '''Ö´ÐиüÐÂ''' trycnt = 0 rec = self.getRecord() while(True): try: collection.update({'FamilyID':self.FamilyID}, {'$set':rec}, False, False, True, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_153, 'Update failed!FamilyID = %s, error = %s, trycnt = %d'%(self.FamilyID, err, trycnt)) mylog.error(msg) return False return True def adoUpdateEx(self, collection, spec): '''Ö´ÐиüÐÂ''' trycnt = 0 rec = self.getRecord() while(True): try: collection.update(spec, {'$set':rec}, False, False, True, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_154, 'Update failed!FamilyID = %s, error = %s, trycnt = %d'%(self.FamilyID, err, trycnt)) mylog.error(msg) return False return True def adoCheckUpdate(self, collection): '''¸ù¾ÝÇé¿öÖ´ÐвåÈë»ò¸üÐÂ''' resultCollection = collection.find({'FamilyID':self.FamilyID}) if resultCollection.count() <= 0: return self.adoInsert(collection) return self.adoUpdate(collection) def adoCheckUpdateEx(self, collection, spec): '''¸ù¾ÝÇé¿öÖ´ÐвåÈë»ò¸üÐÂ''' resultCollection = collection.find(spec) if resultCollection.count() <= 0: return self.adoInsert(collection) return self.adoUpdateEx(collection, spec) def getAdoRecords(self, resultCollection): '''²éѯ½á¹û´ò°ü³É¶þ½øÖÆÁ÷''' result = '' result = CommFunc.WriteDWORD(result, resultCollection.count()) for rec in resultCollection: self.readRecord(rec) result += self.getBuffer() return result def adoQueryIndex(self, collection): '''ÓÃË÷Òý×ֶβéÕÒ''' resultCollection = collection.find({'FamilyID':self.FamilyID}) return self.getAdoRecords(resultCollection) def adoQueryCustom(self, collection, queryDict): '''×Ô¶¨Òå²éѯ''' resultCollection = collection.find(queryDict) return self.getAdoRecords(resultCollection) def adoQueryAll(self, collection): '''²éѯËùÓÐ''' resultCollection = collection.find() return self.getAdoRecords(resultCollection) def adoDeleteByIndex(self, collection): '''¸ù¾ÝË÷Òýɾ³ý''' trycnt = 0 while(True): try: collection.remove({'FamilyID':self.FamilyID}) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:FamilyID = %s"%(self.__class__.__name__, inspect.stack()[0][3], self.FamilyID)) msg = error.formatMsg('error', error.ERROR_NO_155, 'delete failure!self.FamilyID = %s, error = %s, trycnt = %d'%(self.FamilyID, err, trycnt)) mylog.error(msg) return False return True def outputString(self): output = '''//¹ú¼Ò¼Ò×åÕ½½á¹û±í#tagDBCountryFamilyWarResult: FamilyID = %s, Billboard = %s, ADOResult = %s, '''%( self.FamilyID, self.Billboard, self.ADOResult, ) return output def dumpString(self): output = '''%1s\t%1s'''%( self.FamilyID, self.Billboard, ) return output #------------------------------------------------------ #¹ú¼Ò±í#tagDBCountryInfo class tagDBCountryInfo(Structure): _pack_ = 1 _fields_ = [ ('CountryID', ctypes.c_ulong), ('KingID', ctypes.c_ulong), ('KingName', ctypes.c_char * 33), ('KingFamilyID', ctypes.c_ulong), ('KingXiHongMingCount', ctypes.c_ulong), ('DrawGoldSpeaker', ctypes.c_ulong), ('Revenue', ctypes.c_ulong), ('KingSummonBoss', ctypes.c_ulong), ('ADOResult', ctypes.c_ulong), ] def __init__(self): Structure.__init__(self) self.clear() def clear(self): memset(addressof(self), 0, self.getLength()) def readData(self, buf, pos = 0, length = 0): if not pos <= length: msg = error.formatMsg('error', error.ERROR_NO_150, '(pos = %s)> (length = %s)'%(pos, length)) mylog.error(msg) return -1 if len(buf) < pos + self.getLength(): msg = error.formatMsg('error', error.ERROR_NO_151, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength())) mylog.error(msg) return -1 self.clear() memmove(addressof(self), buf[pos:], self.getLength()) return self.getLength() def getBuffer(self): buf = create_string_buffer(self.getLength()) memmove(addressof(buf), addressof(self), self.getLength()) return string_at(addressof(buf), self.getLength()) def getLength(self): return sizeof(tagDBCountryInfo) def getRecord(self): '''×éÖ¯´æ´¢¼Ç¼''' rec = {} rec[u'CountryID'] = self.CountryID rec[u'KingID'] = self.KingID rec[u'KingName'] = fix_incomingText(self.KingName) rec[u'KingFamilyID'] = self.KingFamilyID rec[u'KingXiHongMingCount'] = self.KingXiHongMingCount rec[u'DrawGoldSpeaker'] = self.DrawGoldSpeaker rec[u'Revenue'] = self.Revenue rec[u'KingSummonBoss'] = self.KingSummonBoss return rec def readRecord(self, rec): '''ÓÉÓÚMongoDB¶Á³öÀ´ÊÇunicode,ËùÓÐ×Ö·û´®ÐèÒª½øÐÐת»»''' self.CountryID = rec.get(u'CountryID', 0) self.KingID = rec.get(u'KingID', 0) self.KingName = fix_outgoingText(rec.get(u'KingName', u'')) self.KingFamilyID = rec.get(u'KingFamilyID', 0) self.KingXiHongMingCount = rec.get(u'KingXiHongMingCount', 0) self.DrawGoldSpeaker = rec.get(u'DrawGoldSpeaker', 0) self.Revenue = rec.get(u'Revenue', 0) self.KingSummonBoss = rec.get(u'KingSummonBoss', 0) def adoLoad(self, collection): '''ʹÓÃKEY²éÕÒ²¢¶ÁÈ¡''' resultCollection = collection.find({'CountryID':self.CountryID}) if resultCollection.count() <= 0: return False #ÓÉÓÚÊÇKEY²éÕÒ£¬ËùÓÐÈç¹û´æÔÚ¾ÍÖ»ÓÐÒ»Ìõ¼Ç¼ rec = resultCollection[0] #¶ÁÈ¡Êý¾Ý self.readRecord(rec) return True def adoInsert(self, collection): '''Ö´ÐвåÈë''' trycnt = 0 rec = self.getRecord() while(True): try: collection.insert(rec, False, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_152, 'Insert failed!CountryID = %s, error = %s, trycnt = %d'%(self.CountryID, err, trycnt)) mylog.error(msg) return False return True def adoUpdate(self, collection): '''Ö´ÐиüÐÂ''' trycnt = 0 rec = self.getRecord() while(True): try: collection.update({'CountryID':self.CountryID}, {'$set':rec}, False, False, True, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_153, 'Update failed!CountryID = %s, error = %s, trycnt = %d'%(self.CountryID, err, trycnt)) mylog.error(msg) return False return True def adoUpdateEx(self, collection, spec): '''Ö´ÐиüÐÂ''' trycnt = 0 rec = self.getRecord() while(True): try: collection.update(spec, {'$set':rec}, False, False, True, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_154, 'Update failed!CountryID = %s, error = %s, trycnt = %d'%(self.CountryID, err, trycnt)) mylog.error(msg) return False return True def adoCheckUpdate(self, collection): '''¸ù¾ÝÇé¿öÖ´ÐвåÈë»ò¸üÐÂ''' resultCollection = collection.find({'CountryID':self.CountryID}) if resultCollection.count() <= 0: return self.adoInsert(collection) return self.adoUpdate(collection) def adoCheckUpdateEx(self, collection, spec): '''¸ù¾ÝÇé¿öÖ´ÐвåÈë»ò¸üÐÂ''' resultCollection = collection.find(spec) if resultCollection.count() <= 0: return self.adoInsert(collection) return self.adoUpdateEx(collection, spec) def getAdoRecords(self, resultCollection): '''²éѯ½á¹û´ò°ü³É¶þ½øÖÆÁ÷''' result = '' result = CommFunc.WriteDWORD(result, resultCollection.count()) for rec in resultCollection: self.readRecord(rec) result += self.getBuffer() return result def adoQueryIndex(self, collection): '''ÓÃË÷Òý×ֶβéÕÒ''' resultCollection = collection.find({'CountryID':self.CountryID}) return self.getAdoRecords(resultCollection) def adoQueryCustom(self, collection, queryDict): '''×Ô¶¨Òå²éѯ''' resultCollection = collection.find(queryDict) return self.getAdoRecords(resultCollection) def adoQueryAll(self, collection): '''²éѯËùÓÐ''' resultCollection = collection.find() return self.getAdoRecords(resultCollection) def adoDeleteByIndex(self, collection): '''¸ù¾ÝË÷Òýɾ³ý''' trycnt = 0 while(True): try: collection.remove({'CountryID':self.CountryID}) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:CountryID = %s"%(self.__class__.__name__, inspect.stack()[0][3], self.CountryID)) msg = error.formatMsg('error', error.ERROR_NO_155, 'delete failure!self.CountryID = %s, error = %s, trycnt = %d'%(self.CountryID, err, trycnt)) mylog.error(msg) return False return True def outputString(self): output = '''//¹ú¼Ò±í#tagDBCountryInfo: CountryID = %s, KingID = %s, KingName = %s, KingFamilyID = %s, KingXiHongMingCount = %s, DrawGoldSpeaker = %s, Revenue = %s, KingSummonBoss = %s, ADOResult = %s, '''%( self.CountryID, self.KingID, self.KingName, self.KingFamilyID, self.KingXiHongMingCount, self.DrawGoldSpeaker, self.Revenue, self.KingSummonBoss, self.ADOResult, ) return output def dumpString(self): output = '''%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s'''%( self.CountryID, self.KingID, self.KingName, self.KingFamilyID, self.KingXiHongMingCount, self.DrawGoldSpeaker, self.Revenue, self.KingSummonBoss, ) return output #CharÊý×éÀàÐÍSet½Ó¿Ú,ʹÓøýӿڶԴËÀàÐÍÊý¾Ý¸³Öµ£¬·ÀÖ¹¸³ÖµµÄÊý¾Ý¹ý³¤±¨´í def SetKingName(self,Str): if len(Str)<=33: self.KingName = Str else: self.KingName = Str[:33] #------------------------------------------------------ #°ï»á¿Æ¼¼±í#tagDBFamilyTech class tagDBFamilyTech(Structure): _pack_ = 1 _fields_ = [ ('FamilyID', ctypes.c_ulong), ('TechID', ctypes.c_ulong), ('StartTime', ctypes.c_double), ('IsSpeedup', ctypes.c_ubyte), ('IsBlessing', ctypes.c_ubyte), ('StartBlessingTime', ctypes.c_double), ('BlessingTime', ctypes.c_ulong), ('TechBlessingLV', ctypes.c_ushort), ('TechCurLV', ctypes.c_ushort), ('ADOResult', ctypes.c_ulong), ] def __init__(self): Structure.__init__(self) self.clear() def clear(self): memset(addressof(self), 0, self.getLength()) def readData(self, buf, pos = 0, length = 0): if not pos <= length: msg = error.formatMsg('error', error.ERROR_NO_150, '(pos = %s)> (length = %s)'%(pos, length)) mylog.error(msg) return -1 if len(buf) < pos + self.getLength(): msg = error.formatMsg('error', error.ERROR_NO_151, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength())) mylog.error(msg) return -1 self.clear() memmove(addressof(self), buf[pos:], self.getLength()) return self.getLength() def getBuffer(self): buf = create_string_buffer(self.getLength()) memmove(addressof(buf), addressof(self), self.getLength()) return string_at(addressof(buf), self.getLength()) def getLength(self): return sizeof(tagDBFamilyTech) def getRecord(self): '''×éÖ¯´æ´¢¼Ç¼''' rec = {} rec[u'FamilyID'] = self.FamilyID rec[u'TechID'] = self.TechID rec[u'StartTime'] = self.StartTime rec[u'IsSpeedup'] = self.IsSpeedup rec[u'IsBlessing'] = self.IsBlessing rec[u'StartBlessingTime'] = self.StartBlessingTime rec[u'BlessingTime'] = self.BlessingTime rec[u'TechBlessingLV'] = self.TechBlessingLV rec[u'TechCurLV'] = self.TechCurLV return rec def readRecord(self, rec): '''ÓÉÓÚMongoDB¶Á³öÀ´ÊÇunicode,ËùÓÐ×Ö·û´®ÐèÒª½øÐÐת»»''' self.FamilyID = rec.get(u'FamilyID', 0) self.TechID = rec.get(u'TechID', 0) self.StartTime = rec.get(u'StartTime', 0) self.IsSpeedup = rec.get(u'IsSpeedup', 0) self.IsBlessing = rec.get(u'IsBlessing', 0) self.StartBlessingTime = rec.get(u'StartBlessingTime', 0) self.BlessingTime = rec.get(u'BlessingTime', 0) self.TechBlessingLV = rec.get(u'TechBlessingLV', 0) self.TechCurLV = rec.get(u'TechCurLV', 0) #Can not implement adoLoadStr method:No key defined! def adoInsert(self, collection): '''Ö´ÐвåÈë''' trycnt = 0 rec = self.getRecord() while(True): try: collection.insert(rec, False, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_152, 'Insert failed!FamilyID = %s, error = %s, trycnt = %d'%(self.FamilyID, err, trycnt)) mylog.error(msg) return False return True #Can not implement adoUpdateStr method:No key defined! def adoUpdateEx(self, collection, spec): '''Ö´ÐиüÐÂ''' trycnt = 0 rec = self.getRecord() while(True): try: collection.update(spec, {'$set':rec}, False, False, True, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_154, 'Update failed!FamilyID = %s, error = %s, trycnt = %d'%(self.FamilyID, err, trycnt)) mylog.error(msg) return False return True #Can not implement adoCheckUpdateStr method:No key defined! #Can not implement adoCheckUpdateExStr method:No key defined! def getAdoRecords(self, resultCollection): '''²éѯ½á¹û´ò°ü³É¶þ½øÖÆÁ÷''' result = '' result = CommFunc.WriteDWORD(result, resultCollection.count()) for rec in resultCollection: self.readRecord(rec) result += self.getBuffer() return result def adoQueryIndex(self, collection): '''ÓÃË÷Òý×ֶβéÕÒ''' resultCollection = collection.find({'FamilyID':self.FamilyID}) return self.getAdoRecords(resultCollection) def adoQueryCustom(self, collection, queryDict): '''×Ô¶¨Òå²éѯ''' resultCollection = collection.find(queryDict) return self.getAdoRecords(resultCollection) def adoQueryAll(self, collection): '''²éѯËùÓÐ''' resultCollection = collection.find() return self.getAdoRecords(resultCollection) def adoDeleteByIndex(self, collection): '''¸ù¾ÝË÷Òýɾ³ý''' trycnt = 0 while(True): try: collection.remove({'FamilyID':self.FamilyID}) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:FamilyID = %s"%(self.__class__.__name__, inspect.stack()[0][3], self.FamilyID)) msg = error.formatMsg('error', error.ERROR_NO_155, 'delete failure!self.FamilyID = %s, error = %s, trycnt = %d'%(self.FamilyID, err, trycnt)) mylog.error(msg) return False return True def outputString(self): output = '''//°ï»á¿Æ¼¼±í#tagDBFamilyTech: FamilyID = %s, TechID = %s, StartTime = %s, IsSpeedup = %s, IsBlessing = %s, StartBlessingTime = %s, BlessingTime = %s, TechBlessingLV = %s, TechCurLV = %s, ADOResult = %s, '''%( self.FamilyID, self.TechID, self.StartTime, self.IsSpeedup, self.IsBlessing, self.StartBlessingTime, self.BlessingTime, self.TechBlessingLV, self.TechCurLV, self.ADOResult, ) return output def dumpString(self): output = '''%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s'''%( self.FamilyID, self.TechID, self.StartTime, self.IsSpeedup, self.IsBlessing, self.StartBlessingTime, self.BlessingTime, self.TechBlessingLV, self.TechCurLV, ) return output #------------------------------------------------------ #¼Ò×åÕ½¶ÔÕ½±í#tagDBFamilyVS class tagDBFamilyVS(Structure): _pack_ = 1 _fields_ = [ ('MapID', ctypes.c_ulong), ('FamilyID', ctypes.c_ulong), ('FamilyName', ctypes.c_char * 33), ('VSFamilyID', ctypes.c_ulong), ('VSFamilyName', ctypes.c_char * 33), ('IsAccept', ctypes.c_ubyte), ('RemainDate', ctypes.c_ushort), ('ADOResult', ctypes.c_ulong), ] def __init__(self): Structure.__init__(self) self.clear() def clear(self): memset(addressof(self), 0, self.getLength()) def readData(self, buf, pos = 0, length = 0): if not pos <= length: msg = error.formatMsg('error', error.ERROR_NO_150, '(pos = %s)> (length = %s)'%(pos, length)) mylog.error(msg) return -1 if len(buf) < pos + self.getLength(): msg = error.formatMsg('error', error.ERROR_NO_151, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength())) mylog.error(msg) return -1 self.clear() memmove(addressof(self), buf[pos:], self.getLength()) return self.getLength() def getBuffer(self): buf = create_string_buffer(self.getLength()) memmove(addressof(buf), addressof(self), self.getLength()) return string_at(addressof(buf), self.getLength()) def getLength(self): return sizeof(tagDBFamilyVS) def getRecord(self): '''×éÖ¯´æ´¢¼Ç¼''' rec = {} rec[u'MapID'] = self.MapID rec[u'FamilyID'] = self.FamilyID rec[u'FamilyName'] = fix_incomingText(self.FamilyName) rec[u'VSFamilyID'] = self.VSFamilyID rec[u'VSFamilyName'] = fix_incomingText(self.VSFamilyName) rec[u'IsAccept'] = self.IsAccept rec[u'RemainDate'] = self.RemainDate return rec def readRecord(self, rec): '''ÓÉÓÚMongoDB¶Á³öÀ´ÊÇunicode,ËùÓÐ×Ö·û´®ÐèÒª½øÐÐת»»''' self.MapID = rec.get(u'MapID', 0) self.FamilyID = rec.get(u'FamilyID', 0) self.FamilyName = fix_outgoingText(rec.get(u'FamilyName', u'')) self.VSFamilyID = rec.get(u'VSFamilyID', 0) self.VSFamilyName = fix_outgoingText(rec.get(u'VSFamilyName', u'')) self.IsAccept = rec.get(u'IsAccept', 0) self.RemainDate = rec.get(u'RemainDate', 0) #Can not implement adoLoadStr method:No key defined! def adoInsert(self, collection): '''Ö´ÐвåÈë''' trycnt = 0 rec = self.getRecord() while(True): try: collection.insert(rec, False, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_152, 'Insert failed!MapID = %s, error = %s, trycnt = %d'%(self.MapID, err, trycnt)) mylog.error(msg) return False return True #Can not implement adoUpdateStr method:No key defined! def adoUpdateEx(self, collection, spec): '''Ö´ÐиüÐÂ''' trycnt = 0 rec = self.getRecord() while(True): try: collection.update(spec, {'$set':rec}, False, False, True, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_154, 'Update failed!MapID = %s, error = %s, trycnt = %d'%(self.MapID, err, trycnt)) mylog.error(msg) return False return True #Can not implement adoCheckUpdateStr method:No key defined! #Can not implement adoCheckUpdateExStr method:No key defined! def getAdoRecords(self, resultCollection): '''²éѯ½á¹û´ò°ü³É¶þ½øÖÆÁ÷''' result = '' result = CommFunc.WriteDWORD(result, resultCollection.count()) for rec in resultCollection: self.readRecord(rec) result += self.getBuffer() return result def adoQueryIndex(self, collection): '''ÓÃË÷Òý×ֶβéÕÒ''' resultCollection = collection.find({'MapID':self.MapID}) return self.getAdoRecords(resultCollection) def adoQueryCustom(self, collection, queryDict): '''×Ô¶¨Òå²éѯ''' resultCollection = collection.find(queryDict) return self.getAdoRecords(resultCollection) def adoQueryAll(self, collection): '''²éѯËùÓÐ''' resultCollection = collection.find() return self.getAdoRecords(resultCollection) def adoDeleteByIndex(self, collection): '''¸ù¾ÝË÷Òýɾ³ý''' trycnt = 0 while(True): try: collection.remove({'MapID':self.MapID}) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:MapID = %s"%(self.__class__.__name__, inspect.stack()[0][3], self.MapID)) msg = error.formatMsg('error', error.ERROR_NO_155, 'delete failure!self.MapID = %s, error = %s, trycnt = %d'%(self.MapID, err, trycnt)) mylog.error(msg) return False return True def outputString(self): output = '''//¼Ò×åÕ½¶ÔÕ½±í#tagDBFamilyVS: MapID = %s, FamilyID = %s, FamilyName = %s, VSFamilyID = %s, VSFamilyName = %s, IsAccept = %s, RemainDate = %s, ADOResult = %s, '''%( self.MapID, self.FamilyID, self.FamilyName, self.VSFamilyID, self.VSFamilyName, self.IsAccept, self.RemainDate, self.ADOResult, ) return output def dumpString(self): output = '''%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s'''%( self.MapID, self.FamilyID, self.FamilyName, self.VSFamilyID, self.VSFamilyName, self.IsAccept, self.RemainDate, ) return output #CharÊý×éÀàÐÍSet½Ó¿Ú,ʹÓøýӿڶԴËÀàÐÍÊý¾Ý¸³Öµ£¬·ÀÖ¹¸³ÖµµÄÊý¾Ý¹ý³¤±¨´í def SetFamilyName(self,Str): if len(Str)<=33: self.FamilyName = Str else: self.FamilyName = Str[:33] def SetVSFamilyName(self,Str): if len(Str)<=33: self.VSFamilyName = Str else: self.VSFamilyName = Str[:33] #------------------------------------------------------ #GameServerʼþ´¥·¢±í#tagDBGameServerEventTrig class tagDBGameServerEventTrig(Structure): _pack_ = 1 _fields_ = [ ('EventLen', ctypes.c_ulong), ('EventID', ctypes.c_char_p), ('IsEvent', ctypes.c_ulong), ('ADOResult', ctypes.c_ulong), ] def __init__(self): Structure.__init__(self) self.clear() def clear(self): self.EventLen = 0 self.EventID = '' self.IsEvent = 0 def readData(self, buf, pos = 0, length = 0): if not pos <= length: msg = error.formatMsg('error', error.ERROR_NO_148, '(pos = %s) > (length = %s)'%(pos, length)) mylog.error(msg) return -1 if len(buf) < pos + self.getLength(): msg = error.formatMsg('error', error.ERROR_NO_149, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength())) mylog.error(msg) self.clear() self.EventLen, pos = CommFunc.ReadDWORD(buf, pos) tmp, pos = CommFunc.ReadString(buf, pos, self.EventLen) self.EventID = ctypes.c_char_p(tmp) self.IsEvent, pos = CommFunc.ReadDWORD(buf, pos) return self.getLength() def getBuffer(self): buf = '' buf = CommFunc.WriteDWORD(buf, self.EventLen) buf = CommFunc.WriteString(buf, self.EventLen, self.EventID) buf = CommFunc.WriteDWORD(buf, self.IsEvent) return buf def getLength(self): length = 0 length += sizeof(ctypes.c_ulong) length += self.EventLen length += sizeof(ctypes.c_ulong) return length def getRecord(self): '''×éÖ¯´æ´¢¼Ç¼''' rec = {} rec[u'EventLen'] = self.EventLen rec[u'EventID'] = fix_incomingText(self.EventID) rec[u'IsEvent'] = self.IsEvent return rec def readRecord(self, rec): '''ÓÉÓÚMongoDB¶Á³öÀ´ÊÇunicode,ËùÓÐ×Ö·û´®ÐèÒª½øÐÐת»»''' self.EventLen = rec.get(u'EventLen', 0) self.EventID = fix_outgoingText(rec.get(u'EventID', u'')) self.IsEvent = rec.get(u'IsEvent', 0) def adoLoad(self, collection): '''ʹÓÃKEY²éÕÒ²¢¶ÁÈ¡''' resultCollection = collection.find({'EventID':fix_incomingText(self.EventID)}) if resultCollection.count() <= 0: return False #ÓÉÓÚÊÇKEY²éÕÒ£¬ËùÓÐÈç¹û´æÔÚ¾ÍÖ»ÓÐÒ»Ìõ¼Ç¼ rec = resultCollection[0] #¶ÁÈ¡Êý¾Ý self.readRecord(rec) return True def adoInsert(self, collection): '''Ö´ÐвåÈë''' trycnt = 0 rec = self.getRecord() while(True): try: collection.insert(rec, False, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_152, 'Insert failed!EventID = %s, error = %s, trycnt = %d'%(self.EventID, err, trycnt)) mylog.error(msg) return False return True def adoUpdate(self, collection): '''Ö´ÐиüÐÂ''' trycnt = 0 rec = self.getRecord() while(True): try: collection.update({'EventID':fix_incomingText(self.EventID)}, {'$set':rec}, False, False, True, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_153, 'Update failed!EventID = %s, error = %s, trycnt = %d'%(self.EventID, err, trycnt)) mylog.error(msg) return False return True def adoUpdateEx(self, collection, spec): '''Ö´ÐиüÐÂ''' trycnt = 0 rec = self.getRecord() while(True): try: collection.update(spec, {'$set':rec}, False, False, True, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_154, 'Update failed!EventID = %s, error = %s, trycnt = %d'%(self.EventID, err, trycnt)) mylog.error(msg) return False return True def adoCheckUpdate(self, collection): '''¸ù¾ÝÇé¿öÖ´ÐвåÈë»ò¸üÐÂ''' resultCollection = collection.find({'EventID':fix_incomingText(self.EventID)}) if resultCollection.count() <= 0: return self.adoInsert(collection) return self.adoUpdate(collection) def adoCheckUpdateEx(self, collection, spec): '''¸ù¾ÝÇé¿öÖ´ÐвåÈë»ò¸üÐÂ''' resultCollection = collection.find(spec) if resultCollection.count() <= 0: return self.adoInsert(collection) return self.adoUpdateEx(collection, spec) def getAdoRecords(self, resultCollection): '''²éѯ½á¹û´ò°ü³É¶þ½øÖÆÁ÷''' result = '' result = CommFunc.WriteDWORD(result, resultCollection.count()) for rec in resultCollection: self.readRecord(rec) result += self.getBuffer() return result def adoQueryIndex(self, collection): '''ÓÃË÷Òý×ֶβéÕÒ''' resultCollection = collection.find({'EventID':fix_incomingText(self.EventID)}) return self.getAdoRecords(resultCollection) def adoQueryCustom(self, collection, queryDict): '''×Ô¶¨Òå²éѯ''' resultCollection = collection.find(queryDict) return self.getAdoRecords(resultCollection) def adoQueryAll(self, collection): '''²éѯËùÓÐ''' resultCollection = collection.find() return self.getAdoRecords(resultCollection) def adoDeleteByIndex(self, collection): '''¸ù¾ÝË÷Òýɾ³ý''' trycnt = 0 while(True): try: collection.remove({'EventID':fix_incomingText(self.EventID)}) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:EventID = %s"%(self.__class__.__name__, inspect.stack()[0][3], self.EventID)) msg = error.formatMsg('error', error.ERROR_NO_155, 'delete failure!self.EventID = %s, error = %s, trycnt = %d'%(self.EventID, err, trycnt)) mylog.error(msg) return False return True def outputString(self): output = '''//GameServerʼþ´¥·¢±í#tagDBGameServerEventTrig: EventLen = %s, EventID = %s, IsEvent = %s, ADOResult = %s, '''%( self.EventLen, self.EventID, self.IsEvent, self.ADOResult, ) return output def dumpString(self): output = '''%1s\t%1s\t%1s'''%( self.EventLen, self.EventID, self.IsEvent, ) return output #------------------------------------------------------ #GMÃüÁîÖ´ÐжÓÁÐ#tagDBGMCommandList class tagDBGMCommandList(Structure): _pack_ = 1 _fields_ = [ ('CmdIndex', ctypes.c_ulong), ('PostTime', ctypes.c_double), ('GMAcc', ctypes.c_char * 65), ('CMDLen', ctypes.c_ubyte), ('CMD', ctypes.c_char_p), ('ADOResult', ctypes.c_ulong), ] def __init__(self): Structure.__init__(self) self.clear() def clear(self): self.CmdIndex = 0 self.PostTime = 0.0 self.GMAcc = '' self.CMDLen = 0 self.CMD = '' def readData(self, buf, pos = 0, length = 0): if not pos <= length: msg = error.formatMsg('error', error.ERROR_NO_148, '(pos = %s) > (length = %s)'%(pos, length)) mylog.error(msg) return -1 if len(buf) < pos + self.getLength(): msg = error.formatMsg('error', error.ERROR_NO_149, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength())) mylog.error(msg) self.clear() self.CmdIndex, pos = CommFunc.ReadDWORD(buf, pos) self.PostTime, pos = CommFunc.ReadDouble(buf, pos) self.GMAcc, pos = CommFunc.ReadString(buf, pos, 65) self.CMDLen, pos = CommFunc.ReadBYTE(buf, pos) tmp, pos = CommFunc.ReadString(buf, pos, self.CMDLen) self.CMD = ctypes.c_char_p(tmp) return self.getLength() def getBuffer(self): buf = '' buf = CommFunc.WriteDWORD(buf, self.CmdIndex) buf = CommFunc.WriteDouble(buf, self.PostTime) buf = CommFunc.WriteString(buf, sizeof(ctypes.c_char) * 65, self.GMAcc) buf = CommFunc.WriteBYTE(buf, self.CMDLen) buf = CommFunc.WriteString(buf, self.CMDLen, self.CMD) return buf def getLength(self): length = 0 length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_double) length += sizeof(ctypes.c_char) * 65 length += sizeof(ctypes.c_ubyte) length += self.CMDLen return length def getRecord(self): '''×éÖ¯´æ´¢¼Ç¼''' rec = {} rec[u'CmdIndex'] = self.CmdIndex rec[u'PostTime'] = self.PostTime rec[u'GMAcc'] = fix_incomingText(self.GMAcc) rec[u'CMDLen'] = self.CMDLen rec[u'CMD'] = fix_incomingText(self.CMD) return rec def readRecord(self, rec): '''ÓÉÓÚMongoDB¶Á³öÀ´ÊÇunicode,ËùÓÐ×Ö·û´®ÐèÒª½øÐÐת»»''' self.CmdIndex = rec.get(u'CmdIndex', 0) self.PostTime = rec.get(u'PostTime', 0) self.GMAcc = fix_outgoingText(rec.get(u'GMAcc', u'')) self.CMDLen = rec.get(u'CMDLen', 0) self.CMD = fix_outgoingText(rec.get(u'CMD', u'')) def adoLoad(self, collection): '''ʹÓÃKEY²éÕÒ²¢¶ÁÈ¡''' resultCollection = collection.find({'CmdIndex':self.CmdIndex}) if resultCollection.count() <= 0: return False #ÓÉÓÚÊÇKEY²éÕÒ£¬ËùÓÐÈç¹û´æÔÚ¾ÍÖ»ÓÐÒ»Ìõ¼Ç¼ rec = resultCollection[0] #¶ÁÈ¡Êý¾Ý self.readRecord(rec) return True def adoInsert(self, collection): '''Ö´ÐвåÈë''' trycnt = 0 rec = self.getRecord() while(True): try: collection.insert(rec, False, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_152, 'Insert failed!CmdIndex = %s, error = %s, trycnt = %d'%(self.CmdIndex, err, trycnt)) mylog.error(msg) return False return True def adoUpdate(self, collection): '''Ö´ÐиüÐÂ''' trycnt = 0 rec = self.getRecord() while(True): try: collection.update({'CmdIndex':self.CmdIndex}, {'$set':rec}, False, False, True, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_153, 'Update failed!CmdIndex = %s, error = %s, trycnt = %d'%(self.CmdIndex, err, trycnt)) mylog.error(msg) return False return True def adoUpdateEx(self, collection, spec): '''Ö´ÐиüÐÂ''' trycnt = 0 rec = self.getRecord() while(True): try: collection.update(spec, {'$set':rec}, False, False, True, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_154, 'Update failed!CmdIndex = %s, error = %s, trycnt = %d'%(self.CmdIndex, err, trycnt)) mylog.error(msg) return False return True def adoCheckUpdate(self, collection): '''¸ù¾ÝÇé¿öÖ´ÐвåÈë»ò¸üÐÂ''' resultCollection = collection.find({'CmdIndex':self.CmdIndex}) if resultCollection.count() <= 0: return self.adoInsert(collection) return self.adoUpdate(collection) def adoCheckUpdateEx(self, collection, spec): '''¸ù¾ÝÇé¿öÖ´ÐвåÈë»ò¸üÐÂ''' resultCollection = collection.find(spec) if resultCollection.count() <= 0: return self.adoInsert(collection) return self.adoUpdateEx(collection, spec) def getAdoRecords(self, resultCollection): '''²éѯ½á¹û´ò°ü³É¶þ½øÖÆÁ÷''' result = '' result = CommFunc.WriteDWORD(result, resultCollection.count()) for rec in resultCollection: self.readRecord(rec) result += self.getBuffer() return result def adoQueryIndex(self, collection): '''ÓÃË÷Òý×ֶβéÕÒ''' resultCollection = collection.find({'CmdIndex':self.CmdIndex}) return self.getAdoRecords(resultCollection) def adoQueryCustom(self, collection, queryDict): '''×Ô¶¨Òå²éѯ''' resultCollection = collection.find(queryDict) return self.getAdoRecords(resultCollection) def adoQueryAll(self, collection): '''²éѯËùÓÐ''' resultCollection = collection.find() return self.getAdoRecords(resultCollection) def adoDeleteByIndex(self, collection): '''¸ù¾ÝË÷Òýɾ³ý''' trycnt = 0 while(True): try: collection.remove({'CmdIndex':self.CmdIndex}) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:CmdIndex = %s"%(self.__class__.__name__, inspect.stack()[0][3], self.CmdIndex)) msg = error.formatMsg('error', error.ERROR_NO_155, 'delete failure!self.CmdIndex = %s, error = %s, trycnt = %d'%(self.CmdIndex, err, trycnt)) mylog.error(msg) return False return True def outputString(self): output = '''//GMÃüÁîÖ´ÐжÓÁÐ#tagDBGMCommandList: CmdIndex = %s, PostTime = %s, GMAcc = %s, CMDLen = %s, CMD = %s, ADOResult = %s, '''%( self.CmdIndex, self.PostTime, self.GMAcc, self.CMDLen, self.CMD, self.ADOResult, ) return output def dumpString(self): output = '''%1s\t%1s\t%1s\t%1s\t%1s'''%( self.CmdIndex, self.PostTime, self.GMAcc, self.CMDLen, self.CMD, ) return output #CharÊý×éÀàÐÍSet½Ó¿Ú,ʹÓøýӿڶԴËÀàÐÍÊý¾Ý¸³Öµ£¬·ÀÖ¹¸³ÖµµÄÊý¾Ý¹ý³¤±¨´í def SetGMAcc(self,Str): if len(Str)<=65: self.GMAcc = Str else: self.GMAcc = Str[:65] #------------------------------------------------------ #GMIP¹ÜÀí#tagDBGMIP class tagDBGMIP(Structure): _pack_ = 1 _fields_ = [ ('AccID', ctypes.c_char * 65), ('IP', ctypes.c_char * 20), ('ADOResult', ctypes.c_ulong), ] def __init__(self): Structure.__init__(self) self.clear() def clear(self): memset(addressof(self), 0, self.getLength()) def readData(self, buf, pos = 0, length = 0): if not pos <= length: msg = error.formatMsg('error', error.ERROR_NO_150, '(pos = %s)> (length = %s)'%(pos, length)) mylog.error(msg) return -1 if len(buf) < pos + self.getLength(): msg = error.formatMsg('error', error.ERROR_NO_151, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength())) mylog.error(msg) return -1 self.clear() memmove(addressof(self), buf[pos:], self.getLength()) return self.getLength() def getBuffer(self): buf = create_string_buffer(self.getLength()) memmove(addressof(buf), addressof(self), self.getLength()) return string_at(addressof(buf), self.getLength()) def getLength(self): return sizeof(tagDBGMIP) def getRecord(self): '''×éÖ¯´æ´¢¼Ç¼''' rec = {} rec[u'AccID'] = fix_incomingText(self.AccID) rec[u'IP'] = fix_incomingText(self.IP) return rec def readRecord(self, rec): '''ÓÉÓÚMongoDB¶Á³öÀ´ÊÇunicode,ËùÓÐ×Ö·û´®ÐèÒª½øÐÐת»»''' self.AccID = fix_outgoingText(rec.get(u'AccID', u'')) self.IP = fix_outgoingText(rec.get(u'IP', u'')) #Can not implement adoLoadStr method:No key defined! def adoInsert(self, collection): '''Ö´ÐвåÈë''' trycnt = 0 rec = self.getRecord() while(True): try: collection.insert(rec, False, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_152, 'Insert failed!AccID = %s, error = %s, trycnt = %d'%(self.AccID, err, trycnt)) mylog.error(msg) return False return True #Can not implement adoUpdateStr method:No key defined! def adoUpdateEx(self, collection, spec): '''Ö´ÐиüÐÂ''' trycnt = 0 rec = self.getRecord() while(True): try: collection.update(spec, {'$set':rec}, False, False, True, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_154, 'Update failed!AccID = %s, error = %s, trycnt = %d'%(self.AccID, err, trycnt)) mylog.error(msg) return False return True #Can not implement adoCheckUpdateStr method:No key defined! #Can not implement adoCheckUpdateExStr method:No key defined! def getAdoRecords(self, resultCollection): '''²éѯ½á¹û´ò°ü³É¶þ½øÖÆÁ÷''' result = '' result = CommFunc.WriteDWORD(result, resultCollection.count()) for rec in resultCollection: self.readRecord(rec) result += self.getBuffer() return result def adoQueryIndex(self, collection): '''ÓÃË÷Òý×ֶβéÕÒ''' resultCollection = collection.find({'AccID':fix_incomingText(self.AccID)}) return self.getAdoRecords(resultCollection) def adoQueryCustom(self, collection, queryDict): '''×Ô¶¨Òå²éѯ''' resultCollection = collection.find(queryDict) return self.getAdoRecords(resultCollection) def adoQueryAll(self, collection): '''²éѯËùÓÐ''' resultCollection = collection.find() return self.getAdoRecords(resultCollection) def adoDeleteByIndex(self, collection): '''¸ù¾ÝË÷Òýɾ³ý''' trycnt = 0 while(True): try: collection.remove({'AccID':fix_incomingText(self.AccID)}) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:AccID = %s"%(self.__class__.__name__, inspect.stack()[0][3], self.AccID)) msg = error.formatMsg('error', error.ERROR_NO_155, 'delete failure!self.AccID = %s, error = %s, trycnt = %d'%(self.AccID, err, trycnt)) mylog.error(msg) return False return True def outputString(self): output = '''//GMIP¹ÜÀí#tagDBGMIP: AccID = %s, IP = %s, ADOResult = %s, '''%( self.AccID, self.IP, self.ADOResult, ) return output def dumpString(self): output = '''%1s\t%1s'''%( self.AccID, self.IP, ) return output #CharÊý×éÀàÐÍSet½Ó¿Ú,ʹÓøýӿڶԴËÀàÐÍÊý¾Ý¸³Öµ£¬·ÀÖ¹¸³ÖµµÄÊý¾Ý¹ý³¤±¨´í def SetAccID(self,Str): if len(Str)<=65: self.AccID = Str else: self.AccID = Str[:65] def SetIP(self,Str): if len(Str)<=20: self.IP = Str else: self.IP = Str[:20] #------------------------------------------------------ #Ôª±¦¹ºÂò±í#tagDBGoldOrderForm class tagDBGoldOrderForm(Structure): _pack_ = 1 _fields_ = [ ('PlayerID', ctypes.c_ulong), ('UnitPrice', ctypes.c_ulong), ('LefGold', ctypes.c_ulong), ('LeftTime', ctypes.c_ushort), ('FormID', ctypes.c_ulong), ('ADOResult', ctypes.c_ulong), ] def __init__(self): Structure.__init__(self) self.clear() def clear(self): memset(addressof(self), 0, self.getLength()) def readData(self, buf, pos = 0, length = 0): if not pos <= length: msg = error.formatMsg('error', error.ERROR_NO_150, '(pos = %s)> (length = %s)'%(pos, length)) mylog.error(msg) return -1 if len(buf) < pos + self.getLength(): msg = error.formatMsg('error', error.ERROR_NO_151, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength())) mylog.error(msg) return -1 self.clear() memmove(addressof(self), buf[pos:], self.getLength()) return self.getLength() def getBuffer(self): buf = create_string_buffer(self.getLength()) memmove(addressof(buf), addressof(self), self.getLength()) return string_at(addressof(buf), self.getLength()) def getLength(self): return sizeof(tagDBGoldOrderForm) def getRecord(self): '''×éÖ¯´æ´¢¼Ç¼''' rec = {} rec[u'PlayerID'] = self.PlayerID rec[u'UnitPrice'] = self.UnitPrice rec[u'LefGold'] = self.LefGold rec[u'LeftTime'] = self.LeftTime rec[u'FormID'] = self.FormID return rec def readRecord(self, rec): '''ÓÉÓÚMongoDB¶Á³öÀ´ÊÇunicode,ËùÓÐ×Ö·û´®ÐèÒª½øÐÐת»»''' self.PlayerID = rec.get(u'PlayerID', 0) self.UnitPrice = rec.get(u'UnitPrice', 0) self.LefGold = rec.get(u'LefGold', 0) self.LeftTime = rec.get(u'LeftTime', 0) self.FormID = rec.get(u'FormID', 0) def adoLoad(self, collection): '''ʹÓÃKEY²éÕÒ²¢¶ÁÈ¡''' resultCollection = collection.find({'PlayerID':self.PlayerID}) if resultCollection.count() <= 0: return False #ÓÉÓÚÊÇKEY²éÕÒ£¬ËùÓÐÈç¹û´æÔÚ¾ÍÖ»ÓÐÒ»Ìõ¼Ç¼ rec = resultCollection[0] #¶ÁÈ¡Êý¾Ý self.readRecord(rec) return True def adoInsert(self, collection): '''Ö´ÐвåÈë''' trycnt = 0 rec = self.getRecord() while(True): try: collection.insert(rec, False, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_152, 'Insert failed!PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True def adoUpdate(self, collection): '''Ö´ÐиüÐÂ''' trycnt = 0 rec = self.getRecord() while(True): try: collection.update({'PlayerID':self.PlayerID}, {'$set':rec}, False, False, True, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_153, 'Update failed!PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True def adoUpdateEx(self, collection, spec): '''Ö´ÐиüÐÂ''' trycnt = 0 rec = self.getRecord() while(True): try: collection.update(spec, {'$set':rec}, False, False, True, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_154, 'Update failed!PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True def adoCheckUpdate(self, collection): '''¸ù¾ÝÇé¿öÖ´ÐвåÈë»ò¸üÐÂ''' resultCollection = collection.find({'PlayerID':self.PlayerID}) if resultCollection.count() <= 0: return self.adoInsert(collection) return self.adoUpdate(collection) def adoCheckUpdateEx(self, collection, spec): '''¸ù¾ÝÇé¿öÖ´ÐвåÈë»ò¸üÐÂ''' resultCollection = collection.find(spec) if resultCollection.count() <= 0: return self.adoInsert(collection) return self.adoUpdateEx(collection, spec) def getAdoRecords(self, resultCollection): '''²éѯ½á¹û´ò°ü³É¶þ½øÖÆÁ÷''' result = '' result = CommFunc.WriteDWORD(result, resultCollection.count()) for rec in resultCollection: self.readRecord(rec) result += self.getBuffer() return result def adoQueryIndex(self, collection): '''ÓÃË÷Òý×ֶβéÕÒ''' resultCollection = collection.find({'PlayerID':self.PlayerID}) return self.getAdoRecords(resultCollection) def adoQueryCustom(self, collection, queryDict): '''×Ô¶¨Òå²éѯ''' resultCollection = collection.find(queryDict) return self.getAdoRecords(resultCollection) def adoQueryAll(self, collection): '''²éѯËùÓÐ''' resultCollection = collection.find() return self.getAdoRecords(resultCollection) def adoDeleteByIndex(self, collection): '''¸ù¾ÝË÷Òýɾ³ý''' trycnt = 0 while(True): try: collection.remove({'PlayerID':self.PlayerID}) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:PlayerID = %s"%(self.__class__.__name__, inspect.stack()[0][3], self.PlayerID)) msg = error.formatMsg('error', error.ERROR_NO_155, 'delete failure!self.PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True def outputString(self): output = '''//Ôª±¦¹ºÂò±í#tagDBGoldOrderForm: PlayerID = %s, UnitPrice = %s, LefGold = %s, LeftTime = %s, FormID = %s, ADOResult = %s, '''%( self.PlayerID, self.UnitPrice, self.LefGold, self.LeftTime, self.FormID, self.ADOResult, ) return output def dumpString(self): output = '''%1s\t%1s\t%1s\t%1s\t%1s'''%( self.PlayerID, self.UnitPrice, self.LefGold, self.LeftTime, self.FormID, ) return output #------------------------------------------------------ #Íæ¼Ò¼ì¾Ù±í#tagDBImpeach class tagDBImpeach(Structure): _pack_ = 1 _fields_ = [ ('ImpeachIndex', ctypes.c_ulong), ('ProcessTime', ctypes.c_double), ('PlayerAcc', ctypes.c_char * 65), ('PlayerIP', ctypes.c_char * 20), ('ToPlayerAcc', ctypes.c_char * 65), ('ToPlayerIP', ctypes.c_char * 20), ('MsgLen', ctypes.c_ushort), ('Msg', ctypes.c_char_p), ('ADOResult', ctypes.c_ulong), ] def __init__(self): Structure.__init__(self) self.clear() def clear(self): self.ImpeachIndex = 0 self.ProcessTime = 0.0 self.PlayerAcc = '' self.PlayerIP = '' self.ToPlayerAcc = '' self.ToPlayerIP = '' self.MsgLen = 0 self.Msg = '' def readData(self, buf, pos = 0, length = 0): if not pos <= length: msg = error.formatMsg('error', error.ERROR_NO_148, '(pos = %s) > (length = %s)'%(pos, length)) mylog.error(msg) return -1 if len(buf) < pos + self.getLength(): msg = error.formatMsg('error', error.ERROR_NO_149, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength())) mylog.error(msg) self.clear() self.ImpeachIndex, pos = CommFunc.ReadDWORD(buf, pos) self.ProcessTime, pos = CommFunc.ReadDouble(buf, pos) self.PlayerAcc, pos = CommFunc.ReadString(buf, pos, 65) self.PlayerIP, pos = CommFunc.ReadString(buf, pos, 20) self.ToPlayerAcc, pos = CommFunc.ReadString(buf, pos, 65) self.ToPlayerIP, pos = CommFunc.ReadString(buf, pos, 20) self.MsgLen, pos = CommFunc.ReadWORD(buf, pos) tmp, pos = CommFunc.ReadString(buf, pos, self.MsgLen) self.Msg = ctypes.c_char_p(tmp) return self.getLength() def getBuffer(self): buf = '' buf = CommFunc.WriteDWORD(buf, self.ImpeachIndex) buf = CommFunc.WriteDouble(buf, self.ProcessTime) buf = CommFunc.WriteString(buf, sizeof(ctypes.c_char) * 65, self.PlayerAcc) buf = CommFunc.WriteString(buf, sizeof(ctypes.c_char) * 20, self.PlayerIP) buf = CommFunc.WriteString(buf, sizeof(ctypes.c_char) * 65, self.ToPlayerAcc) buf = CommFunc.WriteString(buf, sizeof(ctypes.c_char) * 20, self.ToPlayerIP) buf = CommFunc.WriteWORD(buf, self.MsgLen) buf = CommFunc.WriteString(buf, self.MsgLen, self.Msg) return buf def getLength(self): length = 0 length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_double) length += sizeof(ctypes.c_char) * 65 length += sizeof(ctypes.c_char) * 20 length += sizeof(ctypes.c_char) * 65 length += sizeof(ctypes.c_char) * 20 length += sizeof(ctypes.c_ushort) length += self.MsgLen return length def getRecord(self): '''×éÖ¯´æ´¢¼Ç¼''' rec = {} rec[u'ImpeachIndex'] = self.ImpeachIndex rec[u'ProcessTime'] = self.ProcessTime rec[u'PlayerAcc'] = fix_incomingText(self.PlayerAcc) rec[u'PlayerIP'] = fix_incomingText(self.PlayerIP) rec[u'ToPlayerAcc'] = fix_incomingText(self.ToPlayerAcc) rec[u'ToPlayerIP'] = fix_incomingText(self.ToPlayerIP) rec[u'MsgLen'] = self.MsgLen rec[u'Msg'] = fix_incomingText(self.Msg) return rec def readRecord(self, rec): '''ÓÉÓÚMongoDB¶Á³öÀ´ÊÇunicode,ËùÓÐ×Ö·û´®ÐèÒª½øÐÐת»»''' self.ImpeachIndex = rec.get(u'ImpeachIndex', 0) self.ProcessTime = rec.get(u'ProcessTime', 0) self.PlayerAcc = fix_outgoingText(rec.get(u'PlayerAcc', u'')) self.PlayerIP = fix_outgoingText(rec.get(u'PlayerIP', u'')) self.ToPlayerAcc = fix_outgoingText(rec.get(u'ToPlayerAcc', u'')) self.ToPlayerIP = fix_outgoingText(rec.get(u'ToPlayerIP', u'')) self.MsgLen = rec.get(u'MsgLen', 0) self.Msg = fix_outgoingText(rec.get(u'Msg', u'')) def adoLoad(self, collection): '''ʹÓÃKEY²éÕÒ²¢¶ÁÈ¡''' resultCollection = collection.find({'ImpeachIndex':self.ImpeachIndex}) if resultCollection.count() <= 0: return False #ÓÉÓÚÊÇKEY²éÕÒ£¬ËùÓÐÈç¹û´æÔÚ¾ÍÖ»ÓÐÒ»Ìõ¼Ç¼ rec = resultCollection[0] #¶ÁÈ¡Êý¾Ý self.readRecord(rec) return True def adoInsert(self, collection): '''Ö´ÐвåÈë''' trycnt = 0 rec = self.getRecord() while(True): try: collection.insert(rec, False, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_152, 'Insert failed!ImpeachIndex = %s, error = %s, trycnt = %d'%(self.ImpeachIndex, err, trycnt)) mylog.error(msg) return False return True def adoUpdate(self, collection): '''Ö´ÐиüÐÂ''' trycnt = 0 rec = self.getRecord() while(True): try: collection.update({'ImpeachIndex':self.ImpeachIndex}, {'$set':rec}, False, False, True, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_153, 'Update failed!ImpeachIndex = %s, error = %s, trycnt = %d'%(self.ImpeachIndex, err, trycnt)) mylog.error(msg) return False return True def adoUpdateEx(self, collection, spec): '''Ö´ÐиüÐÂ''' trycnt = 0 rec = self.getRecord() while(True): try: collection.update(spec, {'$set':rec}, False, False, True, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_154, 'Update failed!ImpeachIndex = %s, error = %s, trycnt = %d'%(self.ImpeachIndex, err, trycnt)) mylog.error(msg) return False return True def adoCheckUpdate(self, collection): '''¸ù¾ÝÇé¿öÖ´ÐвåÈë»ò¸üÐÂ''' resultCollection = collection.find({'ImpeachIndex':self.ImpeachIndex}) if resultCollection.count() <= 0: return self.adoInsert(collection) return self.adoUpdate(collection) def adoCheckUpdateEx(self, collection, spec): '''¸ù¾ÝÇé¿öÖ´ÐвåÈë»ò¸üÐÂ''' resultCollection = collection.find(spec) if resultCollection.count() <= 0: return self.adoInsert(collection) return self.adoUpdateEx(collection, spec) def getAdoRecords(self, resultCollection): '''²éѯ½á¹û´ò°ü³É¶þ½øÖÆÁ÷''' result = '' result = CommFunc.WriteDWORD(result, resultCollection.count()) for rec in resultCollection: self.readRecord(rec) result += self.getBuffer() return result def adoQueryIndex(self, collection): '''ÓÃË÷Òý×ֶβéÕÒ''' resultCollection = collection.find({'ImpeachIndex':self.ImpeachIndex}) return self.getAdoRecords(resultCollection) def adoQueryCustom(self, collection, queryDict): '''×Ô¶¨Òå²éѯ''' resultCollection = collection.find(queryDict) return self.getAdoRecords(resultCollection) def adoQueryAll(self, collection): '''²éѯËùÓÐ''' resultCollection = collection.find() return self.getAdoRecords(resultCollection) def adoDeleteByIndex(self, collection): '''¸ù¾ÝË÷Òýɾ³ý''' trycnt = 0 while(True): try: collection.remove({'ImpeachIndex':self.ImpeachIndex}) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:ImpeachIndex = %s"%(self.__class__.__name__, inspect.stack()[0][3], self.ImpeachIndex)) msg = error.formatMsg('error', error.ERROR_NO_155, 'delete failure!self.ImpeachIndex = %s, error = %s, trycnt = %d'%(self.ImpeachIndex, err, trycnt)) mylog.error(msg) return False return True def outputString(self): output = '''//Íæ¼Ò¼ì¾Ù±í#tagDBImpeach: ImpeachIndex = %s, ProcessTime = %s, PlayerAcc = %s, PlayerIP = %s, ToPlayerAcc = %s, ToPlayerIP = %s, MsgLen = %s, Msg = %s, ADOResult = %s, '''%( self.ImpeachIndex, self.ProcessTime, self.PlayerAcc, self.PlayerIP, self.ToPlayerAcc, self.ToPlayerIP, self.MsgLen, self.Msg, self.ADOResult, ) return output def dumpString(self): output = '''%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s'''%( self.ImpeachIndex, self.ProcessTime, self.PlayerAcc, self.PlayerIP, self.ToPlayerAcc, self.ToPlayerIP, self.MsgLen, self.Msg, ) return output #CharÊý×éÀàÐÍSet½Ó¿Ú,ʹÓøýӿڶԴËÀàÐÍÊý¾Ý¸³Öµ£¬·ÀÖ¹¸³ÖµµÄÊý¾Ý¹ý³¤±¨´í def SetPlayerAcc(self,Str): if len(Str)<=65: self.PlayerAcc = Str else: self.PlayerAcc = Str[:65] def SetPlayerIP(self,Str): if len(Str)<=20: self.PlayerIP = Str else: self.PlayerIP = Str[:20] def SetToPlayerAcc(self,Str): if len(Str)<=65: self.ToPlayerAcc = Str else: self.ToPlayerAcc = Str[:65] def SetToPlayerIP(self,Str): if len(Str)<=20: self.ToPlayerIP = Str else: self.ToPlayerIP = Str[:20] #------------------------------------------------------ #IP¹ÜÀíÁбí#tagDBIPManage class tagDBIPManage(Structure): _pack_ = 1 _fields_ = [ ('IPIndex', ctypes.c_ulong), ('IP', ctypes.c_char * 20), ('Oper', ctypes.c_ushort), ('MsgLen', ctypes.c_ushort), ('Msg', ctypes.c_char_p), ('ADOResult', ctypes.c_ulong), ] def __init__(self): Structure.__init__(self) self.clear() def clear(self): self.IPIndex = 0 self.IP = '' self.Oper = 0 self.MsgLen = 0 self.Msg = '' def readData(self, buf, pos = 0, length = 0): if not pos <= length: msg = error.formatMsg('error', error.ERROR_NO_148, '(pos = %s) > (length = %s)'%(pos, length)) mylog.error(msg) return -1 if len(buf) < pos + self.getLength(): msg = error.formatMsg('error', error.ERROR_NO_149, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength())) mylog.error(msg) self.clear() self.IPIndex, pos = CommFunc.ReadDWORD(buf, pos) self.IP, pos = CommFunc.ReadString(buf, pos, 20) self.Oper, pos = CommFunc.ReadWORD(buf, pos) self.MsgLen, pos = CommFunc.ReadWORD(buf, pos) tmp, pos = CommFunc.ReadString(buf, pos, self.MsgLen) self.Msg = ctypes.c_char_p(tmp) return self.getLength() def getBuffer(self): buf = '' buf = CommFunc.WriteDWORD(buf, self.IPIndex) buf = CommFunc.WriteString(buf, sizeof(ctypes.c_char) * 20, self.IP) buf = CommFunc.WriteWORD(buf, self.Oper) buf = CommFunc.WriteWORD(buf, self.MsgLen) buf = CommFunc.WriteString(buf, self.MsgLen, self.Msg) return buf def getLength(self): length = 0 length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_char) * 20 length += sizeof(ctypes.c_ushort) length += sizeof(ctypes.c_ushort) length += self.MsgLen return length def getRecord(self): '''×éÖ¯´æ´¢¼Ç¼''' rec = {} rec[u'IPIndex'] = self.IPIndex rec[u'IP'] = fix_incomingText(self.IP) rec[u'Oper'] = self.Oper rec[u'MsgLen'] = self.MsgLen rec[u'Msg'] = fix_incomingText(self.Msg) return rec def readRecord(self, rec): '''ÓÉÓÚMongoDB¶Á³öÀ´ÊÇunicode,ËùÓÐ×Ö·û´®ÐèÒª½øÐÐת»»''' self.IPIndex = rec.get(u'IPIndex', 0) self.IP = fix_outgoingText(rec.get(u'IP', u'')) self.Oper = rec.get(u'Oper', 0) self.MsgLen = rec.get(u'MsgLen', 0) self.Msg = fix_outgoingText(rec.get(u'Msg', u'')) def adoLoad(self, collection): '''ʹÓÃKEY²éÕÒ²¢¶ÁÈ¡''' resultCollection = collection.find({'IPIndex':self.IPIndex}) if resultCollection.count() <= 0: return False #ÓÉÓÚÊÇKEY²éÕÒ£¬ËùÓÐÈç¹û´æÔÚ¾ÍÖ»ÓÐÒ»Ìõ¼Ç¼ rec = resultCollection[0] #¶ÁÈ¡Êý¾Ý self.readRecord(rec) return True def adoInsert(self, collection): '''Ö´ÐвåÈë''' trycnt = 0 rec = self.getRecord() while(True): try: collection.insert(rec, False, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_152, 'Insert failed!IPIndex = %s, error = %s, trycnt = %d'%(self.IPIndex, err, trycnt)) mylog.error(msg) return False return True def adoUpdate(self, collection): '''Ö´ÐиüÐÂ''' trycnt = 0 rec = self.getRecord() while(True): try: collection.update({'IPIndex':self.IPIndex}, {'$set':rec}, False, False, True, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_153, 'Update failed!IPIndex = %s, error = %s, trycnt = %d'%(self.IPIndex, err, trycnt)) mylog.error(msg) return False return True def adoUpdateEx(self, collection, spec): '''Ö´ÐиüÐÂ''' trycnt = 0 rec = self.getRecord() while(True): try: collection.update(spec, {'$set':rec}, False, False, True, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_154, 'Update failed!IPIndex = %s, error = %s, trycnt = %d'%(self.IPIndex, err, trycnt)) mylog.error(msg) return False return True def adoCheckUpdate(self, collection): '''¸ù¾ÝÇé¿öÖ´ÐвåÈë»ò¸üÐÂ''' resultCollection = collection.find({'IPIndex':self.IPIndex}) if resultCollection.count() <= 0: return self.adoInsert(collection) return self.adoUpdate(collection) def adoCheckUpdateEx(self, collection, spec): '''¸ù¾ÝÇé¿öÖ´ÐвåÈë»ò¸üÐÂ''' resultCollection = collection.find(spec) if resultCollection.count() <= 0: return self.adoInsert(collection) return self.adoUpdateEx(collection, spec) def getAdoRecords(self, resultCollection): '''²éѯ½á¹û´ò°ü³É¶þ½øÖÆÁ÷''' result = '' result = CommFunc.WriteDWORD(result, resultCollection.count()) for rec in resultCollection: self.readRecord(rec) result += self.getBuffer() return result def adoQueryIndex(self, collection): '''ÓÃË÷Òý×ֶβéÕÒ''' resultCollection = collection.find({'IPIndex':self.IPIndex}) return self.getAdoRecords(resultCollection) def adoQueryCustom(self, collection, queryDict): '''×Ô¶¨Òå²éѯ''' resultCollection = collection.find(queryDict) return self.getAdoRecords(resultCollection) def adoQueryAll(self, collection): '''²éѯËùÓÐ''' resultCollection = collection.find() return self.getAdoRecords(resultCollection) def adoDeleteByIndex(self, collection): '''¸ù¾ÝË÷Òýɾ³ý''' trycnt = 0 while(True): try: collection.remove({'IPIndex':self.IPIndex}) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:IPIndex = %s"%(self.__class__.__name__, inspect.stack()[0][3], self.IPIndex)) msg = error.formatMsg('error', error.ERROR_NO_155, 'delete failure!self.IPIndex = %s, error = %s, trycnt = %d'%(self.IPIndex, err, trycnt)) mylog.error(msg) return False return True def outputString(self): output = '''//IP¹ÜÀíÁбí#tagDBIPManage: IPIndex = %s, IP = %s, Oper = %s, MsgLen = %s, Msg = %s, ADOResult = %s, '''%( self.IPIndex, self.IP, self.Oper, self.MsgLen, self.Msg, self.ADOResult, ) return output def dumpString(self): output = '''%1s\t%1s\t%1s\t%1s\t%1s'''%( self.IPIndex, self.IP, self.Oper, self.MsgLen, self.Msg, ) return output #CharÊý×éÀàÐÍSet½Ó¿Ú,ʹÓøýӿڶԴËÀàÐÍÊý¾Ý¸³Öµ£¬·ÀÖ¹¸³ÖµµÄÊý¾Ý¹ý³¤±¨´í def SetIP(self,Str): if len(Str)<=20: self.IP = Str else: self.IP = Str[:20] #------------------------------------------------------ #ÓʼþÎïÆ·Áбí#tagDBMailItemList class tagDBMailItemList(Structure): _pack_ = 1 _fields_ = [ ('MailID', ctypes.c_char * 40), ('ItemIndex', ctypes.c_ubyte), ('ItemGUID', ctypes.c_char * 40), ('ItemID', ctypes.c_ulong), ('Count', ctypes.c_ushort), ('ItemStarLV', ctypes.c_ubyte), ('IdentifyPar', ctypes.c_ubyte), ('CurDurg', ctypes.c_ulong), ('MaxDurg', ctypes.c_ulong), ('CanPlaceStoneCount', ctypes.c_ubyte), ('ItemProperty', ctypes.c_ubyte), ('SoulProperty', ctypes.c_ushort), ('Maker', ctypes.c_ulong), ('MakerName', ctypes.c_char * 33), ('Stone1', ctypes.c_ushort), ('Stone2', ctypes.c_ushort), ('Stone3', ctypes.c_ushort), ('Stone4', ctypes.c_ushort), ('Stone5', ctypes.c_ushort), ('Stone6', ctypes.c_ushort), ('Stone7', ctypes.c_ushort), ('Stone8', ctypes.c_ushort), ('Stone9', ctypes.c_ushort), ('UserDataLen', ctypes.c_ulong), ('UserData', ctypes.c_char_p), ('ADOResult', ctypes.c_ulong), ] def __init__(self): Structure.__init__(self) self.clear() def clear(self): self.MailID = '' self.ItemIndex = 0 self.ItemGUID = '' self.ItemID = 0 self.Count = 0 self.ItemStarLV = 0 self.IdentifyPar = 0 self.CurDurg = 0 self.MaxDurg = 0 self.CanPlaceStoneCount = 0 self.ItemProperty = 0 self.SoulProperty = 0 self.Maker = 0 self.MakerName = '' self.Stone1 = 0 self.Stone2 = 0 self.Stone3 = 0 self.Stone4 = 0 self.Stone5 = 0 self.Stone6 = 0 self.Stone7 = 0 self.Stone8 = 0 self.Stone9 = 0 self.UserDataLen = 0 self.UserData = '' def readData(self, buf, pos = 0, length = 0): if not pos <= length: msg = error.formatMsg('error', error.ERROR_NO_148, '(pos = %s) > (length = %s)'%(pos, length)) mylog.error(msg) return -1 if len(buf) < pos + self.getLength(): msg = error.formatMsg('error', error.ERROR_NO_149, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength())) mylog.error(msg) self.clear() self.MailID, pos = CommFunc.ReadString(buf, pos, 40) self.ItemIndex, pos = CommFunc.ReadBYTE(buf, pos) self.ItemGUID, pos = CommFunc.ReadString(buf, pos, 40) self.ItemID, pos = CommFunc.ReadDWORD(buf, pos) self.Count, pos = CommFunc.ReadWORD(buf, pos) self.ItemStarLV, pos = CommFunc.ReadBYTE(buf, pos) self.IdentifyPar, pos = CommFunc.ReadBYTE(buf, pos) self.CurDurg, pos = CommFunc.ReadDWORD(buf, pos) self.MaxDurg, pos = CommFunc.ReadDWORD(buf, pos) self.CanPlaceStoneCount, pos = CommFunc.ReadBYTE(buf, pos) self.ItemProperty, pos = CommFunc.ReadBYTE(buf, pos) self.SoulProperty, pos = CommFunc.ReadWORD(buf, pos) self.Maker, pos = CommFunc.ReadDWORD(buf, pos) self.MakerName, pos = CommFunc.ReadString(buf, pos, 33) self.Stone1, pos = CommFunc.ReadWORD(buf, pos) self.Stone2, pos = CommFunc.ReadWORD(buf, pos) self.Stone3, pos = CommFunc.ReadWORD(buf, pos) self.Stone4, pos = CommFunc.ReadWORD(buf, pos) self.Stone5, pos = CommFunc.ReadWORD(buf, pos) self.Stone6, pos = CommFunc.ReadWORD(buf, pos) self.Stone7, pos = CommFunc.ReadWORD(buf, pos) self.Stone8, pos = CommFunc.ReadWORD(buf, pos) self.Stone9, pos = CommFunc.ReadWORD(buf, pos) self.UserDataLen, pos = CommFunc.ReadDWORD(buf, pos) tmp, pos = CommFunc.ReadString(buf, pos, self.UserDataLen) self.UserData = ctypes.c_char_p(tmp) return self.getLength() def getBuffer(self): buf = '' buf = CommFunc.WriteString(buf, sizeof(ctypes.c_char) * 40, self.MailID) buf = CommFunc.WriteBYTE(buf, self.ItemIndex) buf = CommFunc.WriteString(buf, sizeof(ctypes.c_char) * 40, self.ItemGUID) buf = CommFunc.WriteDWORD(buf, self.ItemID) buf = CommFunc.WriteWORD(buf, self.Count) buf = CommFunc.WriteBYTE(buf, self.ItemStarLV) buf = CommFunc.WriteBYTE(buf, self.IdentifyPar) buf = CommFunc.WriteDWORD(buf, self.CurDurg) buf = CommFunc.WriteDWORD(buf, self.MaxDurg) buf = CommFunc.WriteBYTE(buf, self.CanPlaceStoneCount) buf = CommFunc.WriteBYTE(buf, self.ItemProperty) buf = CommFunc.WriteWORD(buf, self.SoulProperty) buf = CommFunc.WriteDWORD(buf, self.Maker) buf = CommFunc.WriteString(buf, sizeof(ctypes.c_char) * 33, self.MakerName) buf = CommFunc.WriteWORD(buf, self.Stone1) buf = CommFunc.WriteWORD(buf, self.Stone2) buf = CommFunc.WriteWORD(buf, self.Stone3) buf = CommFunc.WriteWORD(buf, self.Stone4) buf = CommFunc.WriteWORD(buf, self.Stone5) buf = CommFunc.WriteWORD(buf, self.Stone6) buf = CommFunc.WriteWORD(buf, self.Stone7) buf = CommFunc.WriteWORD(buf, self.Stone8) buf = CommFunc.WriteWORD(buf, self.Stone9) buf = CommFunc.WriteDWORD(buf, self.UserDataLen) buf = CommFunc.WriteString(buf, self.UserDataLen, self.UserData) return buf def getLength(self): length = 0 length += sizeof(ctypes.c_char) * 40 length += sizeof(ctypes.c_ubyte) length += sizeof(ctypes.c_char) * 40 length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ushort) length += sizeof(ctypes.c_ubyte) length += sizeof(ctypes.c_ubyte) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ubyte) length += sizeof(ctypes.c_ubyte) length += sizeof(ctypes.c_ushort) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_char) * 33 length += sizeof(ctypes.c_ushort) length += sizeof(ctypes.c_ushort) length += sizeof(ctypes.c_ushort) length += sizeof(ctypes.c_ushort) length += sizeof(ctypes.c_ushort) length += sizeof(ctypes.c_ushort) length += sizeof(ctypes.c_ushort) length += sizeof(ctypes.c_ushort) length += sizeof(ctypes.c_ushort) length += sizeof(ctypes.c_ulong) length += self.UserDataLen return length def getRecord(self): '''×éÖ¯´æ´¢¼Ç¼''' rec = {} rec[u'MailID'] = fix_incomingText(self.MailID) rec[u'ItemIndex'] = self.ItemIndex rec[u'ItemGUID'] = fix_incomingText(self.ItemGUID) rec[u'ItemID'] = self.ItemID rec[u'Count'] = self.Count rec[u'ItemStarLV'] = self.ItemStarLV rec[u'IdentifyPar'] = self.IdentifyPar rec[u'CurDurg'] = self.CurDurg rec[u'MaxDurg'] = self.MaxDurg rec[u'CanPlaceStoneCount'] = self.CanPlaceStoneCount rec[u'ItemProperty'] = self.ItemProperty rec[u'SoulProperty'] = self.SoulProperty rec[u'Maker'] = self.Maker rec[u'MakerName'] = fix_incomingText(self.MakerName) rec[u'Stone1'] = self.Stone1 rec[u'Stone2'] = self.Stone2 rec[u'Stone3'] = self.Stone3 rec[u'Stone4'] = self.Stone4 rec[u'Stone5'] = self.Stone5 rec[u'Stone6'] = self.Stone6 rec[u'Stone7'] = self.Stone7 rec[u'Stone8'] = self.Stone8 rec[u'Stone9'] = self.Stone9 rec[u'UserDataLen'] = self.UserDataLen rec[u'UserData'] = fix_incomingText(self.UserData) return rec def readRecord(self, rec): '''ÓÉÓÚMongoDB¶Á³öÀ´ÊÇunicode,ËùÓÐ×Ö·û´®ÐèÒª½øÐÐת»»''' self.MailID = fix_outgoingText(rec.get(u'MailID', u'')) self.ItemIndex = rec.get(u'ItemIndex', 0) self.ItemGUID = fix_outgoingText(rec.get(u'ItemGUID', u'')) self.ItemID = rec.get(u'ItemID', 0) self.Count = rec.get(u'Count', 0) self.ItemStarLV = rec.get(u'ItemStarLV', 0) self.IdentifyPar = rec.get(u'IdentifyPar', 0) self.CurDurg = rec.get(u'CurDurg', 0) self.MaxDurg = rec.get(u'MaxDurg', 0) self.CanPlaceStoneCount = rec.get(u'CanPlaceStoneCount', 0) self.ItemProperty = rec.get(u'ItemProperty', 0) self.SoulProperty = rec.get(u'SoulProperty', 0) self.Maker = rec.get(u'Maker', 0) self.MakerName = fix_outgoingText(rec.get(u'MakerName', u'')) self.Stone1 = rec.get(u'Stone1', 0) self.Stone2 = rec.get(u'Stone2', 0) self.Stone3 = rec.get(u'Stone3', 0) self.Stone4 = rec.get(u'Stone4', 0) self.Stone5 = rec.get(u'Stone5', 0) self.Stone6 = rec.get(u'Stone6', 0) self.Stone7 = rec.get(u'Stone7', 0) self.Stone8 = rec.get(u'Stone8', 0) self.Stone9 = rec.get(u'Stone9', 0) self.UserDataLen = rec.get(u'UserDataLen', 0) self.UserData = fix_outgoingText(rec.get(u'UserData', u'')) #Can not implement adoLoadStr method:No key defined! def adoInsert(self, collection): '''Ö´ÐвåÈë''' trycnt = 0 rec = self.getRecord() while(True): try: collection.insert(rec, False, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_152, 'Insert failed!MailID = %s, error = %s, trycnt = %d'%(self.MailID, err, trycnt)) mylog.error(msg) return False return True #Can not implement adoUpdateStr method:No key defined! def adoUpdateEx(self, collection, spec): '''Ö´ÐиüÐÂ''' trycnt = 0 rec = self.getRecord() while(True): try: collection.update(spec, {'$set':rec}, False, False, True, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_154, 'Update failed!MailID = %s, error = %s, trycnt = %d'%(self.MailID, err, trycnt)) mylog.error(msg) return False return True #Can not implement adoCheckUpdateStr method:No key defined! #Can not implement adoCheckUpdateExStr method:No key defined! def getAdoRecords(self, resultCollection): '''²éѯ½á¹û´ò°ü³É¶þ½øÖÆÁ÷''' result = '' result = CommFunc.WriteDWORD(result, resultCollection.count()) for rec in resultCollection: self.readRecord(rec) result += self.getBuffer() return result def adoQueryIndex(self, collection): '''ÓÃË÷Òý×ֶβéÕÒ''' resultCollection = collection.find({'MailID':fix_incomingText(self.MailID)}) return self.getAdoRecords(resultCollection) def adoQueryCustom(self, collection, queryDict): '''×Ô¶¨Òå²éѯ''' resultCollection = collection.find(queryDict) return self.getAdoRecords(resultCollection) def adoQueryAll(self, collection): '''²éѯËùÓÐ''' resultCollection = collection.find() return self.getAdoRecords(resultCollection) def adoDeleteByIndex(self, collection): '''¸ù¾ÝË÷Òýɾ³ý''' trycnt = 0 while(True): try: collection.remove({'MailID':fix_incomingText(self.MailID)}) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:MailID = %s"%(self.__class__.__name__, inspect.stack()[0][3], self.MailID)) msg = error.formatMsg('error', error.ERROR_NO_155, 'delete failure!self.MailID = %s, error = %s, trycnt = %d'%(self.MailID, err, trycnt)) mylog.error(msg) return False return True def outputString(self): output = '''//ÓʼþÎïÆ·Áбí#tagDBMailItemList: MailID = %s, ItemIndex = %s, ItemGUID = %s, ItemID = %s, Count = %s, ItemStarLV = %s, IdentifyPar = %s, CurDurg = %s, MaxDurg = %s, CanPlaceStoneCount = %s, ItemProperty = %s, SoulProperty = %s, Maker = %s, MakerName = %s, Stone1 = %s, Stone2 = %s, Stone3 = %s, Stone4 = %s, Stone5 = %s, Stone6 = %s, Stone7 = %s, Stone8 = %s, Stone9 = %s, UserDataLen = %s, UserData = %s, ADOResult = %s, '''%( self.MailID, self.ItemIndex, self.ItemGUID, self.ItemID, self.Count, self.ItemStarLV, self.IdentifyPar, self.CurDurg, self.MaxDurg, self.CanPlaceStoneCount, self.ItemProperty, self.SoulProperty, self.Maker, self.MakerName, self.Stone1, self.Stone2, self.Stone3, self.Stone4, self.Stone5, self.Stone6, self.Stone7, self.Stone8, self.Stone9, self.UserDataLen, self.UserData, self.ADOResult, ) return output def dumpString(self): output = '''%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s'''%( self.MailID, self.ItemIndex, self.ItemGUID, self.ItemID, self.Count, self.ItemStarLV, self.IdentifyPar, self.CurDurg, self.MaxDurg, self.CanPlaceStoneCount, self.ItemProperty, self.SoulProperty, self.Maker, self.MakerName, self.Stone1, self.Stone2, self.Stone3, self.Stone4, self.Stone5, self.Stone6, self.Stone7, self.Stone8, self.Stone9, self.UserDataLen, self.UserData, ) return output #CharÊý×éÀàÐÍSet½Ó¿Ú,ʹÓøýӿڶԴËÀàÐÍÊý¾Ý¸³Öµ£¬·ÀÖ¹¸³ÖµµÄÊý¾Ý¹ý³¤±¨´í def SetMailID(self,Str): if len(Str)<=40: self.MailID = Str else: self.MailID = Str[:40] def SetItemGUID(self,Str): if len(Str)<=40: self.ItemGUID = Str else: self.ItemGUID = Str[:40] def SetMakerName(self,Str): if len(Str)<=33: self.MakerName = Str else: self.MakerName = Str[:33] #------------------------------------------------------ #ÓʼþÁбí#tagDBMailList class tagDBMailList(Structure): _pack_ = 1 _fields_ = [ ('SenderID', ctypes.c_ulong), ('ReceverID', ctypes.c_ulong), ('MailID', ctypes.c_char * 40), ('MailType', ctypes.c_ubyte), ('SenderName', ctypes.c_char * 33), ('Title', ctypes.c_char * 21), ('Money', ctypes.c_ulong), ('LetterType', ctypes.c_ubyte), ('ExistTime', ctypes.c_ubyte), ('ContentLen', ctypes.c_ushort), ('Content', ctypes.c_char_p), ('TitleUseSysMessage', ctypes.c_ubyte), ('ContentUseSysMessage', ctypes.c_ubyte), ('ADOResult', ctypes.c_ulong), ] def __init__(self): Structure.__init__(self) self.clear() def clear(self): self.SenderID = 0 self.ReceverID = 0 self.MailID = '' self.MailType = 0 self.SenderName = '' self.Title = '' self.Money = 0 self.LetterType = 0 self.ExistTime = 0 self.ContentLen = 0 self.Content = '' self.TitleUseSysMessage = 0 self.ContentUseSysMessage = 0 def readData(self, buf, pos = 0, length = 0): if not pos <= length: msg = error.formatMsg('error', error.ERROR_NO_148, '(pos = %s) > (length = %s)'%(pos, length)) mylog.error(msg) return -1 if len(buf) < pos + self.getLength(): msg = error.formatMsg('error', error.ERROR_NO_149, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength())) mylog.error(msg) self.clear() self.SenderID, pos = CommFunc.ReadDWORD(buf, pos) self.ReceverID, pos = CommFunc.ReadDWORD(buf, pos) self.MailID, pos = CommFunc.ReadString(buf, pos, 40) self.MailType, pos = CommFunc.ReadBYTE(buf, pos) self.SenderName, pos = CommFunc.ReadString(buf, pos, 33) self.Title, pos = CommFunc.ReadString(buf, pos, 21) self.Money, pos = CommFunc.ReadDWORD(buf, pos) self.LetterType, pos = CommFunc.ReadBYTE(buf, pos) self.ExistTime, pos = CommFunc.ReadBYTE(buf, pos) self.ContentLen, pos = CommFunc.ReadWORD(buf, pos) tmp, pos = CommFunc.ReadString(buf, pos, self.ContentLen) self.Content = ctypes.c_char_p(tmp) self.TitleUseSysMessage, pos = CommFunc.ReadBYTE(buf, pos) self.ContentUseSysMessage, pos = CommFunc.ReadBYTE(buf, pos) return self.getLength() def getBuffer(self): buf = '' buf = CommFunc.WriteDWORD(buf, self.SenderID) buf = CommFunc.WriteDWORD(buf, self.ReceverID) buf = CommFunc.WriteString(buf, sizeof(ctypes.c_char) * 40, self.MailID) buf = CommFunc.WriteBYTE(buf, self.MailType) buf = CommFunc.WriteString(buf, sizeof(ctypes.c_char) * 33, self.SenderName) buf = CommFunc.WriteString(buf, sizeof(ctypes.c_char) * 21, self.Title) buf = CommFunc.WriteDWORD(buf, self.Money) buf = CommFunc.WriteBYTE(buf, self.LetterType) buf = CommFunc.WriteBYTE(buf, self.ExistTime) buf = CommFunc.WriteWORD(buf, self.ContentLen) buf = CommFunc.WriteString(buf, self.ContentLen, self.Content) buf = CommFunc.WriteBYTE(buf, self.TitleUseSysMessage) buf = CommFunc.WriteBYTE(buf, self.ContentUseSysMessage) return buf def getLength(self): length = 0 length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_char) * 40 length += sizeof(ctypes.c_ubyte) length += sizeof(ctypes.c_char) * 33 length += sizeof(ctypes.c_char) * 21 length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ubyte) length += sizeof(ctypes.c_ubyte) length += sizeof(ctypes.c_ushort) length += self.ContentLen length += sizeof(ctypes.c_ubyte) length += sizeof(ctypes.c_ubyte) return length def getRecord(self): '''×éÖ¯´æ´¢¼Ç¼''' rec = {} rec[u'SenderID'] = self.SenderID rec[u'ReceverID'] = self.ReceverID rec[u'MailID'] = fix_incomingText(self.MailID) rec[u'MailType'] = self.MailType rec[u'SenderName'] = fix_incomingText(self.SenderName) rec[u'Title'] = fix_incomingText(self.Title) rec[u'Money'] = self.Money rec[u'LetterType'] = self.LetterType rec[u'ExistTime'] = self.ExistTime rec[u'ContentLen'] = self.ContentLen rec[u'Content'] = fix_incomingText(self.Content) rec[u'TitleUseSysMessage'] = self.TitleUseSysMessage rec[u'ContentUseSysMessage'] = self.ContentUseSysMessage return rec def readRecord(self, rec): '''ÓÉÓÚMongoDB¶Á³öÀ´ÊÇunicode,ËùÓÐ×Ö·û´®ÐèÒª½øÐÐת»»''' self.SenderID = rec.get(u'SenderID', 0) self.ReceverID = rec.get(u'ReceverID', 0) self.MailID = fix_outgoingText(rec.get(u'MailID', u'')) self.MailType = rec.get(u'MailType', 0) self.SenderName = fix_outgoingText(rec.get(u'SenderName', u'')) self.Title = fix_outgoingText(rec.get(u'Title', u'')) self.Money = rec.get(u'Money', 0) self.LetterType = rec.get(u'LetterType', 0) self.ExistTime = rec.get(u'ExistTime', 0) self.ContentLen = rec.get(u'ContentLen', 0) self.Content = fix_outgoingText(rec.get(u'Content', u'')) self.TitleUseSysMessage = rec.get(u'TitleUseSysMessage', 0) self.ContentUseSysMessage = rec.get(u'ContentUseSysMessage', 0) def adoLoad(self, collection): '''ʹÓÃKEY²éÕÒ²¢¶ÁÈ¡''' resultCollection = collection.find({'MailID':fix_incomingText(self.MailID)}) if resultCollection.count() <= 0: return False #ÓÉÓÚÊÇKEY²éÕÒ£¬ËùÓÐÈç¹û´æÔÚ¾ÍÖ»ÓÐÒ»Ìõ¼Ç¼ rec = resultCollection[0] #¶ÁÈ¡Êý¾Ý self.readRecord(rec) return True def adoInsert(self, collection): '''Ö´ÐвåÈë''' trycnt = 0 rec = self.getRecord() while(True): try: collection.insert(rec, False, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_152, 'Insert failed!MailID = %s, error = %s, trycnt = %d'%(self.MailID, err, trycnt)) mylog.error(msg) return False return True def adoUpdate(self, collection): '''Ö´ÐиüÐÂ''' trycnt = 0 rec = self.getRecord() while(True): try: collection.update({'MailID':fix_incomingText(self.MailID)}, {'$set':rec}, False, False, True, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_153, 'Update failed!MailID = %s, error = %s, trycnt = %d'%(self.MailID, err, trycnt)) mylog.error(msg) return False return True def adoUpdateEx(self, collection, spec): '''Ö´ÐиüÐÂ''' trycnt = 0 rec = self.getRecord() while(True): try: collection.update(spec, {'$set':rec}, False, False, True, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_154, 'Update failed!MailID = %s, error = %s, trycnt = %d'%(self.MailID, err, trycnt)) mylog.error(msg) return False return True def adoCheckUpdate(self, collection): '''¸ù¾ÝÇé¿öÖ´ÐвåÈë»ò¸üÐÂ''' resultCollection = collection.find({'MailID':fix_incomingText(self.MailID)}) if resultCollection.count() <= 0: return self.adoInsert(collection) return self.adoUpdate(collection) def adoCheckUpdateEx(self, collection, spec): '''¸ù¾ÝÇé¿öÖ´ÐвåÈë»ò¸üÐÂ''' resultCollection = collection.find(spec) if resultCollection.count() <= 0: return self.adoInsert(collection) return self.adoUpdateEx(collection, spec) def getAdoRecords(self, resultCollection): '''²éѯ½á¹û´ò°ü³É¶þ½øÖÆÁ÷''' result = '' result = CommFunc.WriteDWORD(result, resultCollection.count()) for rec in resultCollection: self.readRecord(rec) result += self.getBuffer() return result def adoQueryIndex(self, collection): '''ÓÃË÷Òý×ֶβéÕÒ''' resultCollection = collection.find({'MailID':fix_incomingText(self.MailID)}) return self.getAdoRecords(resultCollection) def adoQueryCustom(self, collection, queryDict): '''×Ô¶¨Òå²éѯ''' resultCollection = collection.find(queryDict) return self.getAdoRecords(resultCollection) def adoQueryAll(self, collection): '''²éѯËùÓÐ''' resultCollection = collection.find() return self.getAdoRecords(resultCollection) def adoDeleteByIndex(self, collection): '''¸ù¾ÝË÷Òýɾ³ý''' trycnt = 0 while(True): try: collection.remove({'MailID':fix_incomingText(self.MailID)}) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:MailID = %s"%(self.__class__.__name__, inspect.stack()[0][3], self.MailID)) msg = error.formatMsg('error', error.ERROR_NO_155, 'delete failure!self.MailID = %s, error = %s, trycnt = %d'%(self.MailID, err, trycnt)) mylog.error(msg) return False return True def outputString(self): output = '''//ÓʼþÁбí#tagDBMailList: SenderID = %s, ReceverID = %s, MailID = %s, MailType = %s, SenderName = %s, Title = %s, Money = %s, LetterType = %s, ExistTime = %s, ContentLen = %s, Content = %s, TitleUseSysMessage = %s, ContentUseSysMessage = %s, ADOResult = %s, '''%( self.SenderID, self.ReceverID, self.MailID, self.MailType, self.SenderName, self.Title, self.Money, self.LetterType, self.ExistTime, self.ContentLen, self.Content, self.TitleUseSysMessage, self.ContentUseSysMessage, self.ADOResult, ) return output def dumpString(self): output = '''%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s'''%( self.SenderID, self.ReceverID, self.MailID, self.MailType, self.SenderName, self.Title, self.Money, self.LetterType, self.ExistTime, self.ContentLen, self.Content, self.TitleUseSysMessage, self.ContentUseSysMessage, ) return output #CharÊý×éÀàÐÍSet½Ó¿Ú,ʹÓøýӿڶԴËÀàÐÍÊý¾Ý¸³Öµ£¬·ÀÖ¹¸³ÖµµÄÊý¾Ý¹ý³¤±¨´í def SetMailID(self,Str): if len(Str)<=40: self.MailID = Str else: self.MailID = Str[:40] def SetSenderName(self,Str): if len(Str)<=33: self.SenderName = Str else: self.SenderName = Str[:33] def SetTitle(self,Str): if len(Str)<=21: self.Title = Str else: self.Title = Str[:21] #------------------------------------------------------ #µØÍ¼·þÎñÆ÷״̬#tagDBMapServerInfo class tagDBMapServerInfo(Structure): _pack_ = 1 _fields_ = [ ('LogIndex', ctypes.c_ulong), ('LogID', ctypes.c_ulong), ('Msg', ctypes.c_char * 20), ('Value', ctypes.c_ulong), ('Time', ctypes.c_double), ('ADOResult', ctypes.c_ulong), ] def __init__(self): Structure.__init__(self) self.clear() def clear(self): memset(addressof(self), 0, self.getLength()) def readData(self, buf, pos = 0, length = 0): if not pos <= length: msg = error.formatMsg('error', error.ERROR_NO_150, '(pos = %s)> (length = %s)'%(pos, length)) mylog.error(msg) return -1 if len(buf) < pos + self.getLength(): msg = error.formatMsg('error', error.ERROR_NO_151, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength())) mylog.error(msg) return -1 self.clear() memmove(addressof(self), buf[pos:], self.getLength()) return self.getLength() def getBuffer(self): buf = create_string_buffer(self.getLength()) memmove(addressof(buf), addressof(self), self.getLength()) return string_at(addressof(buf), self.getLength()) def getLength(self): return sizeof(tagDBMapServerInfo) def getRecord(self): '''×éÖ¯´æ´¢¼Ç¼''' rec = {} rec[u'LogIndex'] = self.LogIndex rec[u'LogID'] = self.LogID rec[u'Msg'] = fix_incomingText(self.Msg) rec[u'Value'] = self.Value rec[u'Time'] = self.Time return rec def readRecord(self, rec): '''ÓÉÓÚMongoDB¶Á³öÀ´ÊÇunicode,ËùÓÐ×Ö·û´®ÐèÒª½øÐÐת»»''' self.LogIndex = rec.get(u'LogIndex', 0) self.LogID = rec.get(u'LogID', 0) self.Msg = fix_outgoingText(rec.get(u'Msg', u'')) self.Value = rec.get(u'Value', 0) self.Time = rec.get(u'Time', 0) def adoLoad(self, collection): '''ʹÓÃKEY²éÕÒ²¢¶ÁÈ¡''' resultCollection = collection.find({'LogIndex':self.LogIndex}) if resultCollection.count() <= 0: return False #ÓÉÓÚÊÇKEY²éÕÒ£¬ËùÓÐÈç¹û´æÔÚ¾ÍÖ»ÓÐÒ»Ìõ¼Ç¼ rec = resultCollection[0] #¶ÁÈ¡Êý¾Ý self.readRecord(rec) return True def adoInsert(self, collection): '''Ö´ÐвåÈë''' trycnt = 0 rec = self.getRecord() while(True): try: collection.insert(rec, False, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_152, 'Insert failed!LogID = %s, error = %s, trycnt = %d'%(self.LogID, err, trycnt)) mylog.error(msg) return False return True def adoUpdate(self, collection): '''Ö´ÐиüÐÂ''' trycnt = 0 rec = self.getRecord() while(True): try: collection.update({'LogIndex':self.LogIndex}, {'$set':rec}, False, False, True, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_153, 'Update failed!LogID = %s, error = %s, trycnt = %d'%(self.LogID, err, trycnt)) mylog.error(msg) return False return True def adoUpdateEx(self, collection, spec): '''Ö´ÐиüÐÂ''' trycnt = 0 rec = self.getRecord() while(True): try: collection.update(spec, {'$set':rec}, False, False, True, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_154, 'Update failed!LogID = %s, error = %s, trycnt = %d'%(self.LogID, err, trycnt)) mylog.error(msg) return False return True def adoCheckUpdate(self, collection): '''¸ù¾ÝÇé¿öÖ´ÐвåÈë»ò¸üÐÂ''' resultCollection = collection.find({'LogIndex':self.LogIndex}) if resultCollection.count() <= 0: return self.adoInsert(collection) return self.adoUpdate(collection) def adoCheckUpdateEx(self, collection, spec): '''¸ù¾ÝÇé¿öÖ´ÐвåÈë»ò¸üÐÂ''' resultCollection = collection.find(spec) if resultCollection.count() <= 0: return self.adoInsert(collection) return self.adoUpdateEx(collection, spec) def getAdoRecords(self, resultCollection): '''²éѯ½á¹û´ò°ü³É¶þ½øÖÆÁ÷''' result = '' result = CommFunc.WriteDWORD(result, resultCollection.count()) for rec in resultCollection: self.readRecord(rec) result += self.getBuffer() return result def adoQueryIndex(self, collection): '''ÓÃË÷Òý×ֶβéÕÒ''' resultCollection = collection.find({'LogID':self.LogID}) return self.getAdoRecords(resultCollection) def adoQueryCustom(self, collection, queryDict): '''×Ô¶¨Òå²éѯ''' resultCollection = collection.find(queryDict) return self.getAdoRecords(resultCollection) def adoQueryAll(self, collection): '''²éѯËùÓÐ''' resultCollection = collection.find() return self.getAdoRecords(resultCollection) def adoDeleteByIndex(self, collection): '''¸ù¾ÝË÷Òýɾ³ý''' trycnt = 0 while(True): try: collection.remove({'LogID':self.LogID}) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:LogID = %s"%(self.__class__.__name__, inspect.stack()[0][3], self.LogID)) msg = error.formatMsg('error', error.ERROR_NO_155, 'delete failure!self.LogID = %s, error = %s, trycnt = %d'%(self.LogID, err, trycnt)) mylog.error(msg) return False return True def outputString(self): output = '''//µØÍ¼·þÎñÆ÷״̬#tagDBMapServerInfo: LogIndex = %s, LogID = %s, Msg = %s, Value = %s, Time = %s, ADOResult = %s, '''%( self.LogIndex, self.LogID, self.Msg, self.Value, self.Time, self.ADOResult, ) return output def dumpString(self): output = '''%1s\t%1s\t%1s\t%1s\t%1s'''%( self.LogIndex, self.LogID, self.Msg, self.Value, self.Time, ) return output #CharÊý×éÀàÐÍSet½Ó¿Ú,ʹÓøýӿڶԴËÀàÐÍÊý¾Ý¸³Öµ£¬·ÀÖ¹¸³ÖµµÄÊý¾Ý¹ý³¤±¨´í def SetMsg(self,Str): if len(Str)<=20: self.Msg = Str else: self.Msg = Str[:20] #------------------------------------------------------ #ÈÎÎñ·¢²¼±í#tagDBMissionPub class tagDBMissionPub(Structure): _pack_ = 1 _fields_ = [ ('MissionID', ctypes.c_ulong), ('MissinoPubType', ctypes.c_ubyte), ('PubID', ctypes.c_ulong), ('ADOResult', ctypes.c_ulong), ] def __init__(self): Structure.__init__(self) self.clear() def clear(self): memset(addressof(self), 0, self.getLength()) def readData(self, buf, pos = 0, length = 0): if not pos <= length: msg = error.formatMsg('error', error.ERROR_NO_150, '(pos = %s)> (length = %s)'%(pos, length)) mylog.error(msg) return -1 if len(buf) < pos + self.getLength(): msg = error.formatMsg('error', error.ERROR_NO_151, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength())) mylog.error(msg) return -1 self.clear() memmove(addressof(self), buf[pos:], self.getLength()) return self.getLength() def getBuffer(self): buf = create_string_buffer(self.getLength()) memmove(addressof(buf), addressof(self), self.getLength()) return string_at(addressof(buf), self.getLength()) def getLength(self): return sizeof(tagDBMissionPub) def getRecord(self): '''×éÖ¯´æ´¢¼Ç¼''' rec = {} rec[u'MissionID'] = self.MissionID rec[u'MissinoPubType'] = self.MissinoPubType rec[u'PubID'] = self.PubID return rec def readRecord(self, rec): '''ÓÉÓÚMongoDB¶Á³öÀ´ÊÇunicode,ËùÓÐ×Ö·û´®ÐèÒª½øÐÐת»»''' self.MissionID = rec.get(u'MissionID', 0) self.MissinoPubType = rec.get(u'MissinoPubType', 0) self.PubID = rec.get(u'PubID', 0) #Can not implement adoLoadStr method:No key defined! def adoInsert(self, collection): '''Ö´ÐвåÈë''' trycnt = 0 rec = self.getRecord() while(True): try: collection.insert(rec, False, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_152, 'Insert failed!MissionID = %s, error = %s, trycnt = %d'%(self.MissionID, err, trycnt)) mylog.error(msg) return False return True #Can not implement adoUpdateStr method:No key defined! def adoUpdateEx(self, collection, spec): '''Ö´ÐиüÐÂ''' trycnt = 0 rec = self.getRecord() while(True): try: collection.update(spec, {'$set':rec}, False, False, True, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_154, 'Update failed!MissionID = %s, error = %s, trycnt = %d'%(self.MissionID, err, trycnt)) mylog.error(msg) return False return True #Can not implement adoCheckUpdateStr method:No key defined! #Can not implement adoCheckUpdateExStr method:No key defined! def getAdoRecords(self, resultCollection): '''²éѯ½á¹û´ò°ü³É¶þ½øÖÆÁ÷''' result = '' result = CommFunc.WriteDWORD(result, resultCollection.count()) for rec in resultCollection: self.readRecord(rec) result += self.getBuffer() return result def adoQueryIndex(self, collection): '''ÓÃË÷Òý×ֶβéÕÒ''' resultCollection = collection.find({'MissionID':self.MissionID}) return self.getAdoRecords(resultCollection) def adoQueryCustom(self, collection, queryDict): '''×Ô¶¨Òå²éѯ''' resultCollection = collection.find(queryDict) return self.getAdoRecords(resultCollection) def adoQueryAll(self, collection): '''²éѯËùÓÐ''' resultCollection = collection.find() return self.getAdoRecords(resultCollection) def adoDeleteByIndex(self, collection): '''¸ù¾ÝË÷Òýɾ³ý''' trycnt = 0 while(True): try: collection.remove({'MissionID':self.MissionID}) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:MissionID = %s"%(self.__class__.__name__, inspect.stack()[0][3], self.MissionID)) msg = error.formatMsg('error', error.ERROR_NO_155, 'delete failure!self.MissionID = %s, error = %s, trycnt = %d'%(self.MissionID, err, trycnt)) mylog.error(msg) return False return True def outputString(self): output = '''//ÈÎÎñ·¢²¼±í#tagDBMissionPub: MissionID = %s, MissinoPubType = %s, PubID = %s, ADOResult = %s, '''%( self.MissionID, self.MissinoPubType, self.PubID, self.ADOResult, ) return output def dumpString(self): output = '''%1s\t%1s\t%1s'''%( self.MissionID, self.MissinoPubType, self.PubID, ) return output #------------------------------------------------------ #ÐÂÊÖ¿¨×´Ì¬#tagDBNewGuyCardState class tagDBNewGuyCardState(Structure): _pack_ = 1 _fields_ = [ ('CardIDLen', ctypes.c_ubyte), ('CardID', ctypes.c_char_p), ('IsUsed', ctypes.c_ubyte), ('UserDataLen', ctypes.c_ulong), ('UserData', ctypes.c_char_p), ('CardType', ctypes.c_ubyte), ('ValidTime', ctypes.c_char * 20), ('ADOResult', ctypes.c_ulong), ] def __init__(self): Structure.__init__(self) self.clear() def clear(self): self.CardIDLen = 0 self.CardID = '' self.IsUsed = 0 self.UserDataLen = 0 self.UserData = '' self.CardType = 0 self.ValidTime = '' def readData(self, buf, pos = 0, length = 0): if not pos <= length: msg = error.formatMsg('error', error.ERROR_NO_148, '(pos = %s) > (length = %s)'%(pos, length)) mylog.error(msg) return -1 if len(buf) < pos + self.getLength(): msg = error.formatMsg('error', error.ERROR_NO_149, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength())) mylog.error(msg) self.clear() self.CardIDLen, pos = CommFunc.ReadBYTE(buf, pos) tmp, pos = CommFunc.ReadString(buf, pos, self.CardIDLen) self.CardID = ctypes.c_char_p(tmp) self.IsUsed, pos = CommFunc.ReadBYTE(buf, pos) self.UserDataLen, pos = CommFunc.ReadDWORD(buf, pos) tmp, pos = CommFunc.ReadString(buf, pos, self.UserDataLen) self.UserData = ctypes.c_char_p(tmp) self.CardType, pos = CommFunc.ReadBYTE(buf, pos) self.ValidTime, pos = CommFunc.ReadString(buf, pos, 20) return self.getLength() def getBuffer(self): buf = '' buf = CommFunc.WriteBYTE(buf, self.CardIDLen) buf = CommFunc.WriteString(buf, self.CardIDLen, self.CardID) buf = CommFunc.WriteBYTE(buf, self.IsUsed) buf = CommFunc.WriteDWORD(buf, self.UserDataLen) buf = CommFunc.WriteString(buf, self.UserDataLen, self.UserData) buf = CommFunc.WriteBYTE(buf, self.CardType) buf = CommFunc.WriteString(buf, sizeof(ctypes.c_char) * 20, self.ValidTime) return buf def getLength(self): length = 0 length += sizeof(ctypes.c_ubyte) length += self.CardIDLen length += sizeof(ctypes.c_ubyte) length += sizeof(ctypes.c_ulong) length += self.UserDataLen length += sizeof(ctypes.c_ubyte) length += sizeof(ctypes.c_char) * 20 return length def getRecord(self): '''×éÖ¯´æ´¢¼Ç¼''' rec = {} rec[u'CardIDLen'] = self.CardIDLen rec[u'CardID'] = fix_incomingText(self.CardID) rec[u'IsUsed'] = self.IsUsed rec[u'UserDataLen'] = self.UserDataLen rec[u'UserData'] = fix_incomingText(self.UserData) rec[u'CardType'] = self.CardType rec[u'ValidTime'] = fix_incomingText(self.ValidTime) return rec def readRecord(self, rec): '''ÓÉÓÚMongoDB¶Á³öÀ´ÊÇunicode,ËùÓÐ×Ö·û´®ÐèÒª½øÐÐת»»''' self.CardIDLen = rec.get(u'CardIDLen', 0) self.CardID = fix_outgoingText(rec.get(u'CardID', u'')) self.IsUsed = rec.get(u'IsUsed', 0) self.UserDataLen = rec.get(u'UserDataLen', 0) self.UserData = fix_outgoingText(rec.get(u'UserData', u'')) self.CardType = rec.get(u'CardType', 0) self.ValidTime = fix_outgoingText(rec.get(u'ValidTime', u'')) def adoLoad(self, collection): '''ʹÓÃKEY²éÕÒ²¢¶ÁÈ¡''' resultCollection = collection.find({'CardID':fix_incomingText(self.CardID)}) if resultCollection.count() <= 0: return False #ÓÉÓÚÊÇKEY²éÕÒ£¬ËùÓÐÈç¹û´æÔÚ¾ÍÖ»ÓÐÒ»Ìõ¼Ç¼ rec = resultCollection[0] #¶ÁÈ¡Êý¾Ý self.readRecord(rec) return True def adoInsert(self, collection): '''Ö´ÐвåÈë''' trycnt = 0 rec = self.getRecord() while(True): try: collection.insert(rec, False, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_152, 'Insert failed!CardID = %s, error = %s, trycnt = %d'%(self.CardID, err, trycnt)) mylog.error(msg) return False return True def adoUpdate(self, collection): '''Ö´ÐиüÐÂ''' trycnt = 0 rec = self.getRecord() while(True): try: collection.update({'CardID':fix_incomingText(self.CardID)}, {'$set':rec}, False, False, True, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_153, 'Update failed!CardID = %s, error = %s, trycnt = %d'%(self.CardID, err, trycnt)) mylog.error(msg) return False return True def adoUpdateEx(self, collection, spec): '''Ö´ÐиüÐÂ''' trycnt = 0 rec = self.getRecord() while(True): try: collection.update(spec, {'$set':rec}, False, False, True, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_154, 'Update failed!CardID = %s, error = %s, trycnt = %d'%(self.CardID, err, trycnt)) mylog.error(msg) return False return True def adoCheckUpdate(self, collection): '''¸ù¾ÝÇé¿öÖ´ÐвåÈë»ò¸üÐÂ''' resultCollection = collection.find({'CardID':fix_incomingText(self.CardID)}) if resultCollection.count() <= 0: return self.adoInsert(collection) return self.adoUpdate(collection) def adoCheckUpdateEx(self, collection, spec): '''¸ù¾ÝÇé¿öÖ´ÐвåÈë»ò¸üÐÂ''' resultCollection = collection.find(spec) if resultCollection.count() <= 0: return self.adoInsert(collection) return self.adoUpdateEx(collection, spec) def getAdoRecords(self, resultCollection): '''²éѯ½á¹û´ò°ü³É¶þ½øÖÆÁ÷''' result = '' result = CommFunc.WriteDWORD(result, resultCollection.count()) for rec in resultCollection: self.readRecord(rec) result += self.getBuffer() return result def adoQueryIndex(self, collection): '''ÓÃË÷Òý×ֶβéÕÒ''' resultCollection = collection.find({'CardID':fix_incomingText(self.CardID)}) return self.getAdoRecords(resultCollection) def adoQueryCustom(self, collection, queryDict): '''×Ô¶¨Òå²éѯ''' resultCollection = collection.find(queryDict) return self.getAdoRecords(resultCollection) def adoQueryAll(self, collection): '''²éѯËùÓÐ''' resultCollection = collection.find() return self.getAdoRecords(resultCollection) def adoDeleteByIndex(self, collection): '''¸ù¾ÝË÷Òýɾ³ý''' trycnt = 0 while(True): try: collection.remove({'CardID':fix_incomingText(self.CardID)}) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:CardID = %s"%(self.__class__.__name__, inspect.stack()[0][3], self.CardID)) msg = error.formatMsg('error', error.ERROR_NO_155, 'delete failure!self.CardID = %s, error = %s, trycnt = %d'%(self.CardID, err, trycnt)) mylog.error(msg) return False return True def outputString(self): output = '''//ÐÂÊÖ¿¨×´Ì¬#tagDBNewGuyCardState: CardIDLen = %s, CardID = %s, IsUsed = %s, UserDataLen = %s, UserData = %s, CardType = %s, ValidTime = %s, ADOResult = %s, '''%( self.CardIDLen, self.CardID, self.IsUsed, self.UserDataLen, self.UserData, self.CardType, self.ValidTime, self.ADOResult, ) return output def dumpString(self): output = '''%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s'''%( self.CardIDLen, self.CardID, self.IsUsed, self.UserDataLen, self.UserData, self.CardType, self.ValidTime, ) return output #CharÊý×éÀàÐÍSet½Ó¿Ú,ʹÓøýӿڶԴËÀàÐÍÊý¾Ý¸³Öµ£¬·ÀÖ¹¸³ÖµµÄÊý¾Ý¹ý³¤±¨´í def SetValidTime(self,Str): if len(Str)<=20: self.ValidTime = Str else: self.ValidTime = Str[:20] #------------------------------------------------------ #¹ýÆÚÔª±¦¹ºÂò±í#tagDBOverdueGoldOrderForm class tagDBOverdueGoldOrderForm(Structure): _pack_ = 1 _fields_ = [ ('PlayerID', ctypes.c_ulong), ('LefSilver', ctypes.c_ulong), ('ADOResult', ctypes.c_ulong), ] def __init__(self): Structure.__init__(self) self.clear() def clear(self): memset(addressof(self), 0, self.getLength()) def readData(self, buf, pos = 0, length = 0): if not pos <= length: msg = error.formatMsg('error', error.ERROR_NO_150, '(pos = %s)> (length = %s)'%(pos, length)) mylog.error(msg) return -1 if len(buf) < pos + self.getLength(): msg = error.formatMsg('error', error.ERROR_NO_151, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength())) mylog.error(msg) return -1 self.clear() memmove(addressof(self), buf[pos:], self.getLength()) return self.getLength() def getBuffer(self): buf = create_string_buffer(self.getLength()) memmove(addressof(buf), addressof(self), self.getLength()) return string_at(addressof(buf), self.getLength()) def getLength(self): return sizeof(tagDBOverdueGoldOrderForm) def getRecord(self): '''×éÖ¯´æ´¢¼Ç¼''' rec = {} rec[u'PlayerID'] = self.PlayerID rec[u'LefSilver'] = self.LefSilver return rec def readRecord(self, rec): '''ÓÉÓÚMongoDB¶Á³öÀ´ÊÇunicode,ËùÓÐ×Ö·û´®ÐèÒª½øÐÐת»»''' self.PlayerID = rec.get(u'PlayerID', 0) self.LefSilver = rec.get(u'LefSilver', 0) def adoLoad(self, collection): '''ʹÓÃKEY²éÕÒ²¢¶ÁÈ¡''' resultCollection = collection.find({'PlayerID':self.PlayerID}) if resultCollection.count() <= 0: return False #ÓÉÓÚÊÇKEY²éÕÒ£¬ËùÓÐÈç¹û´æÔÚ¾ÍÖ»ÓÐÒ»Ìõ¼Ç¼ rec = resultCollection[0] #¶ÁÈ¡Êý¾Ý self.readRecord(rec) return True def adoInsert(self, collection): '''Ö´ÐвåÈë''' trycnt = 0 rec = self.getRecord() while(True): try: collection.insert(rec, False, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_152, 'Insert failed!PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True def adoUpdate(self, collection): '''Ö´ÐиüÐÂ''' trycnt = 0 rec = self.getRecord() while(True): try: collection.update({'PlayerID':self.PlayerID}, {'$set':rec}, False, False, True, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_153, 'Update failed!PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True def adoUpdateEx(self, collection, spec): '''Ö´ÐиüÐÂ''' trycnt = 0 rec = self.getRecord() while(True): try: collection.update(spec, {'$set':rec}, False, False, True, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_154, 'Update failed!PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True def adoCheckUpdate(self, collection): '''¸ù¾ÝÇé¿öÖ´ÐвåÈë»ò¸üÐÂ''' resultCollection = collection.find({'PlayerID':self.PlayerID}) if resultCollection.count() <= 0: return self.adoInsert(collection) return self.adoUpdate(collection) def adoCheckUpdateEx(self, collection, spec): '''¸ù¾ÝÇé¿öÖ´ÐвåÈë»ò¸üÐÂ''' resultCollection = collection.find(spec) if resultCollection.count() <= 0: return self.adoInsert(collection) return self.adoUpdateEx(collection, spec) def getAdoRecords(self, resultCollection): '''²éѯ½á¹û´ò°ü³É¶þ½øÖÆÁ÷''' result = '' result = CommFunc.WriteDWORD(result, resultCollection.count()) for rec in resultCollection: self.readRecord(rec) result += self.getBuffer() return result def adoQueryIndex(self, collection): '''ÓÃË÷Òý×ֶβéÕÒ''' resultCollection = collection.find({'PlayerID':self.PlayerID}) return self.getAdoRecords(resultCollection) def adoQueryCustom(self, collection, queryDict): '''×Ô¶¨Òå²éѯ''' resultCollection = collection.find(queryDict) return self.getAdoRecords(resultCollection) def adoQueryAll(self, collection): '''²éѯËùÓÐ''' resultCollection = collection.find() return self.getAdoRecords(resultCollection) def adoDeleteByIndex(self, collection): '''¸ù¾ÝË÷Òýɾ³ý''' trycnt = 0 while(True): try: collection.remove({'PlayerID':self.PlayerID}) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:PlayerID = %s"%(self.__class__.__name__, inspect.stack()[0][3], self.PlayerID)) msg = error.formatMsg('error', error.ERROR_NO_155, 'delete failure!self.PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True def outputString(self): output = '''//¹ýÆÚÔª±¦¹ºÂò±í#tagDBOverdueGoldOrderForm: PlayerID = %s, LefSilver = %s, ADOResult = %s, '''%( self.PlayerID, self.LefSilver, self.ADOResult, ) return output def dumpString(self): output = '''%1s\t%1s'''%( self.PlayerID, self.LefSilver, ) return output #------------------------------------------------------ #Íæ¼Ò¸ÄÃû¼Ç¼#tagDBPlayerChangeNameLog class tagDBPlayerChangeNameLog(Structure): _pack_ = 1 _fields_ = [ ('PlayerID', ctypes.c_ulong), ('SrcPlayerID', ctypes.c_ulong), ('OldPlayerName', ctypes.c_char * 15), ('ADOResult', ctypes.c_ulong), ] def __init__(self): Structure.__init__(self) self.clear() def clear(self): memset(addressof(self), 0, self.getLength()) def readData(self, buf, pos = 0, length = 0): if not pos <= length: msg = error.formatMsg('error', error.ERROR_NO_150, '(pos = %s)> (length = %s)'%(pos, length)) mylog.error(msg) return -1 if len(buf) < pos + self.getLength(): msg = error.formatMsg('error', error.ERROR_NO_151, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength())) mylog.error(msg) return -1 self.clear() memmove(addressof(self), buf[pos:], self.getLength()) return self.getLength() def getBuffer(self): buf = create_string_buffer(self.getLength()) memmove(addressof(buf), addressof(self), self.getLength()) return string_at(addressof(buf), self.getLength()) def getLength(self): return sizeof(tagDBPlayerChangeNameLog) def getRecord(self): '''×éÖ¯´æ´¢¼Ç¼''' rec = {} rec[u'PlayerID'] = self.PlayerID rec[u'SrcPlayerID'] = self.SrcPlayerID rec[u'OldPlayerName'] = fix_incomingText(self.OldPlayerName) return rec def readRecord(self, rec): '''ÓÉÓÚMongoDB¶Á³öÀ´ÊÇunicode,ËùÓÐ×Ö·û´®ÐèÒª½øÐÐת»»''' self.PlayerID = rec.get(u'PlayerID', 0) self.SrcPlayerID = rec.get(u'SrcPlayerID', 0) self.OldPlayerName = fix_outgoingText(rec.get(u'OldPlayerName', u'')) def adoLoad(self, collection): '''ʹÓÃKEY²éÕÒ²¢¶ÁÈ¡''' resultCollection = collection.find({'PlayerID':self.PlayerID}) if resultCollection.count() <= 0: return False #ÓÉÓÚÊÇKEY²éÕÒ£¬ËùÓÐÈç¹û´æÔÚ¾ÍÖ»ÓÐÒ»Ìõ¼Ç¼ rec = resultCollection[0] #¶ÁÈ¡Êý¾Ý self.readRecord(rec) return True def adoInsert(self, collection): '''Ö´ÐвåÈë''' trycnt = 0 rec = self.getRecord() while(True): try: collection.insert(rec, False, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_152, 'Insert failed!PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True def adoUpdate(self, collection): '''Ö´ÐиüÐÂ''' trycnt = 0 rec = self.getRecord() while(True): try: collection.update({'PlayerID':self.PlayerID}, {'$set':rec}, False, False, True, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_153, 'Update failed!PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True def adoUpdateEx(self, collection, spec): '''Ö´ÐиüÐÂ''' trycnt = 0 rec = self.getRecord() while(True): try: collection.update(spec, {'$set':rec}, False, False, True, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_154, 'Update failed!PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True def adoCheckUpdate(self, collection): '''¸ù¾ÝÇé¿öÖ´ÐвåÈë»ò¸üÐÂ''' resultCollection = collection.find({'PlayerID':self.PlayerID}) if resultCollection.count() <= 0: return self.adoInsert(collection) return self.adoUpdate(collection) def adoCheckUpdateEx(self, collection, spec): '''¸ù¾ÝÇé¿öÖ´ÐвåÈë»ò¸üÐÂ''' resultCollection = collection.find(spec) if resultCollection.count() <= 0: return self.adoInsert(collection) return self.adoUpdateEx(collection, spec) def getAdoRecords(self, resultCollection): '''²éѯ½á¹û´ò°ü³É¶þ½øÖÆÁ÷''' result = '' result = CommFunc.WriteDWORD(result, resultCollection.count()) for rec in resultCollection: self.readRecord(rec) result += self.getBuffer() return result def adoQueryIndex(self, collection): '''ÓÃË÷Òý×ֶβéÕÒ''' resultCollection = collection.find({'PlayerID':self.PlayerID}) return self.getAdoRecords(resultCollection) def adoQueryCustom(self, collection, queryDict): '''×Ô¶¨Òå²éѯ''' resultCollection = collection.find(queryDict) return self.getAdoRecords(resultCollection) def adoQueryAll(self, collection): '''²éѯËùÓÐ''' resultCollection = collection.find() return self.getAdoRecords(resultCollection) def adoDeleteByIndex(self, collection): '''¸ù¾ÝË÷Òýɾ³ý''' trycnt = 0 while(True): try: collection.remove({'PlayerID':self.PlayerID}) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:PlayerID = %s"%(self.__class__.__name__, inspect.stack()[0][3], self.PlayerID)) msg = error.formatMsg('error', error.ERROR_NO_155, 'delete failure!self.PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True def outputString(self): output = '''//Íæ¼Ò¸ÄÃû¼Ç¼#tagDBPlayerChangeNameLog: PlayerID = %s, SrcPlayerID = %s, OldPlayerName = %s, ADOResult = %s, '''%( self.PlayerID, self.SrcPlayerID, self.OldPlayerName, self.ADOResult, ) return output def dumpString(self): output = '''%1s\t%1s\t%1s'''%( self.PlayerID, self.SrcPlayerID, self.OldPlayerName, ) return output #CharÊý×éÀàÐÍSet½Ó¿Ú,ʹÓøýӿڶԴËÀàÐÍÊý¾Ý¸³Öµ£¬·ÀÖ¹¸³ÖµµÄÊý¾Ý¹ý³¤±¨´í def SetOldPlayerName(self,Str): if len(Str)<=15: self.OldPlayerName = Str else: self.OldPlayerName = Str[:15] #------------------------------------------------------ #ÐÞ¸ÄÕË»§×´Ì¬#tagDBPlayer_ChangeAccState class tagDBPlayer_ChangeAccState(Structure): _pack_ = 1 _fields_ = [ ('PlayerID', ctypes.c_ulong), ('AccState', ctypes.c_ubyte), ('ADOResult', ctypes.c_ulong), ] def __init__(self): Structure.__init__(self) self.clear() def clear(self): memset(addressof(self), 0, self.getLength()) def readData(self, buf, pos = 0, length = 0): if not pos <= length: msg = error.formatMsg('error', error.ERROR_NO_150, '(pos = %s)> (length = %s)'%(pos, length)) mylog.error(msg) return -1 if len(buf) < pos + self.getLength(): msg = error.formatMsg('error', error.ERROR_NO_151, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength())) mylog.error(msg) return -1 self.clear() memmove(addressof(self), buf[pos:], self.getLength()) return self.getLength() def getBuffer(self): buf = create_string_buffer(self.getLength()) memmove(addressof(buf), addressof(self), self.getLength()) return string_at(addressof(buf), self.getLength()) def getLength(self): return sizeof(tagDBPlayer_ChangeAccState) def getRecord(self): '''×éÖ¯´æ´¢¼Ç¼''' rec = {} rec[u'PlayerID'] = self.PlayerID rec[u'AccState'] = self.AccState return rec def readRecord(self, rec): '''ÓÉÓÚMongoDB¶Á³öÀ´ÊÇunicode,ËùÓÐ×Ö·û´®ÐèÒª½øÐÐת»»''' self.PlayerID = rec.get(u'PlayerID', 0) self.AccState = rec.get(u'AccState', 0) #Can not implement adoLoadStr method:No key defined! def adoInsert(self, collection): '''Ö´ÐвåÈë''' trycnt = 0 rec = self.getRecord() while(True): try: collection.insert(rec, False, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_152, 'Insert failed!PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True #Can not implement adoUpdateStr method:No key defined! def adoUpdateEx(self, collection, spec): '''Ö´ÐиüÐÂ''' trycnt = 0 rec = self.getRecord() while(True): try: collection.update(spec, {'$set':rec}, False, False, True, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_154, 'Update failed!PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True #Can not implement adoCheckUpdateStr method:No key defined! #Can not implement adoCheckUpdateExStr method:No key defined! def getAdoRecords(self, resultCollection): '''²éѯ½á¹û´ò°ü³É¶þ½øÖÆÁ÷''' result = '' result = CommFunc.WriteDWORD(result, resultCollection.count()) for rec in resultCollection: self.readRecord(rec) result += self.getBuffer() return result def adoQueryIndex(self, collection): '''ÓÃË÷Òý×ֶβéÕÒ''' resultCollection = collection.find({'PlayerID':self.PlayerID}) return self.getAdoRecords(resultCollection) def adoQueryCustom(self, collection, queryDict): '''×Ô¶¨Òå²éѯ''' resultCollection = collection.find(queryDict) return self.getAdoRecords(resultCollection) def adoQueryAll(self, collection): '''²éѯËùÓÐ''' resultCollection = collection.find() return self.getAdoRecords(resultCollection) def adoDeleteByIndex(self, collection): '''¸ù¾ÝË÷Òýɾ³ý''' trycnt = 0 while(True): try: collection.remove({'PlayerID':self.PlayerID}) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:PlayerID = %s"%(self.__class__.__name__, inspect.stack()[0][3], self.PlayerID)) msg = error.formatMsg('error', error.ERROR_NO_155, 'delete failure!self.PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True def outputString(self): output = '''//ÐÞ¸ÄÕË»§×´Ì¬#tagDBPlayer_ChangeAccState: PlayerID = %s, AccState = %s, ADOResult = %s, '''%( self.PlayerID, self.AccState, self.ADOResult, ) return output def dumpString(self): output = '''%1s\t%1s'''%( self.PlayerID, self.AccState, ) return output #------------------------------------------------------ #Íæ¼ÒºÏ·þ¸ÄÃû#tagDBPlayer_ChangeName class tagDBPlayer_ChangeName(Structure): _pack_ = 1 _fields_ = [ ('PlayerID', ctypes.c_ulong), ('PlayerName', ctypes.c_char * 33), ('ADOResult', ctypes.c_ulong), ] def __init__(self): Structure.__init__(self) self.clear() def clear(self): memset(addressof(self), 0, self.getLength()) def readData(self, buf, pos = 0, length = 0): if not pos <= length: msg = error.formatMsg('error', error.ERROR_NO_150, '(pos = %s)> (length = %s)'%(pos, length)) mylog.error(msg) return -1 if len(buf) < pos + self.getLength(): msg = error.formatMsg('error', error.ERROR_NO_151, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength())) mylog.error(msg) return -1 self.clear() memmove(addressof(self), buf[pos:], self.getLength()) return self.getLength() def getBuffer(self): buf = create_string_buffer(self.getLength()) memmove(addressof(buf), addressof(self), self.getLength()) return string_at(addressof(buf), self.getLength()) def getLength(self): return sizeof(tagDBPlayer_ChangeName) def getRecord(self): '''×éÖ¯´æ´¢¼Ç¼''' rec = {} rec[u'PlayerID'] = self.PlayerID rec[u'PlayerName'] = fix_incomingText(self.PlayerName) return rec def readRecord(self, rec): '''ÓÉÓÚMongoDB¶Á³öÀ´ÊÇunicode,ËùÓÐ×Ö·û´®ÐèÒª½øÐÐת»»''' self.PlayerID = rec.get(u'PlayerID', 0) self.PlayerName = fix_outgoingText(rec.get(u'PlayerName', u'')) #Can not implement adoLoadStr method:No key defined! def adoInsert(self, collection): '''Ö´ÐвåÈë''' trycnt = 0 rec = self.getRecord() while(True): try: collection.insert(rec, False, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_152, 'Insert failed!PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True #Can not implement adoUpdateStr method:No key defined! def adoUpdateEx(self, collection, spec): '''Ö´ÐиüÐÂ''' trycnt = 0 rec = self.getRecord() while(True): try: collection.update(spec, {'$set':rec}, False, False, True, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_154, 'Update failed!PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True #Can not implement adoCheckUpdateStr method:No key defined! #Can not implement adoCheckUpdateExStr method:No key defined! def getAdoRecords(self, resultCollection): '''²éѯ½á¹û´ò°ü³É¶þ½øÖÆÁ÷''' result = '' result = CommFunc.WriteDWORD(result, resultCollection.count()) for rec in resultCollection: self.readRecord(rec) result += self.getBuffer() return result def adoQueryIndex(self, collection): '''ÓÃË÷Òý×ֶβéÕÒ''' resultCollection = collection.find({'PlayerID':self.PlayerID}) return self.getAdoRecords(resultCollection) def adoQueryCustom(self, collection, queryDict): '''×Ô¶¨Òå²éѯ''' resultCollection = collection.find(queryDict) return self.getAdoRecords(resultCollection) def adoQueryAll(self, collection): '''²éѯËùÓÐ''' resultCollection = collection.find() return self.getAdoRecords(resultCollection) def adoDeleteByIndex(self, collection): '''¸ù¾ÝË÷Òýɾ³ý''' trycnt = 0 while(True): try: collection.remove({'PlayerID':self.PlayerID}) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:PlayerID = %s"%(self.__class__.__name__, inspect.stack()[0][3], self.PlayerID)) msg = error.formatMsg('error', error.ERROR_NO_155, 'delete failure!self.PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True def outputString(self): output = '''//Íæ¼ÒºÏ·þ¸ÄÃû#tagDBPlayer_ChangeName: PlayerID = %s, PlayerName = %s, ADOResult = %s, '''%( self.PlayerID, self.PlayerName, self.ADOResult, ) return output def dumpString(self): output = '''%1s\t%1s'''%( self.PlayerID, self.PlayerName, ) return output #CharÊý×éÀàÐÍSet½Ó¿Ú,ʹÓøýӿڶԴËÀàÐÍÊý¾Ý¸³Öµ£¬·ÀÖ¹¸³ÖµµÄÊý¾Ý¹ý³¤±¨´í def SetPlayerName(self,Str): if len(Str)<=33: self.PlayerName = Str else: self.PlayerName = Str[:33] #------------------------------------------------------ #Íæ¼Òɾ³ý½ÇɫˢÐÂ#tagDBPlayer_DeleteRoleUpdateRole class tagDBPlayer_DeleteRoleUpdateRole(Structure): _pack_ = 1 _fields_ = [ ('DeletePlayerID', ctypes.c_ulong), ('UpdatePlayerID', ctypes.c_ulong), ('Gold', ctypes.c_ulong), ('GoldPaper', ctypes.c_ulong), ('Silver', ctypes.c_ulong), ('SilverPaper', ctypes.c_ulong), ('WarehouseGold', ctypes.c_ulong), ('WarehouseSilver', ctypes.c_ulong), ('ADOResult', ctypes.c_ulong), ] def __init__(self): Structure.__init__(self) self.clear() def clear(self): memset(addressof(self), 0, self.getLength()) def readData(self, buf, pos = 0, length = 0): if not pos <= length: msg = error.formatMsg('error', error.ERROR_NO_150, '(pos = %s)> (length = %s)'%(pos, length)) mylog.error(msg) return -1 if len(buf) < pos + self.getLength(): msg = error.formatMsg('error', error.ERROR_NO_151, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength())) mylog.error(msg) return -1 self.clear() memmove(addressof(self), buf[pos:], self.getLength()) return self.getLength() def getBuffer(self): buf = create_string_buffer(self.getLength()) memmove(addressof(buf), addressof(self), self.getLength()) return string_at(addressof(buf), self.getLength()) def getLength(self): return sizeof(tagDBPlayer_DeleteRoleUpdateRole) def getRecord(self): '''×éÖ¯´æ´¢¼Ç¼''' rec = {} rec[u'DeletePlayerID'] = self.DeletePlayerID rec[u'UpdatePlayerID'] = self.UpdatePlayerID rec[u'Gold'] = self.Gold rec[u'GoldPaper'] = self.GoldPaper rec[u'Silver'] = self.Silver rec[u'SilverPaper'] = self.SilverPaper rec[u'WarehouseGold'] = self.WarehouseGold rec[u'WarehouseSilver'] = self.WarehouseSilver return rec def readRecord(self, rec): '''ÓÉÓÚMongoDB¶Á³öÀ´ÊÇunicode,ËùÓÐ×Ö·û´®ÐèÒª½øÐÐת»»''' self.DeletePlayerID = rec.get(u'DeletePlayerID', 0) self.UpdatePlayerID = rec.get(u'UpdatePlayerID', 0) self.Gold = rec.get(u'Gold', 0) self.GoldPaper = rec.get(u'GoldPaper', 0) self.Silver = rec.get(u'Silver', 0) self.SilverPaper = rec.get(u'SilverPaper', 0) self.WarehouseGold = rec.get(u'WarehouseGold', 0) self.WarehouseSilver = rec.get(u'WarehouseSilver', 0) #Can not implement adoLoadStr method:No key defined! def adoInsert(self, collection): '''Ö´ÐвåÈë''' trycnt = 0 rec = self.getRecord() while(True): try: collection.insert(rec, False, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_152, 'Insert failed!DeletePlayerID = %s, error = %s, trycnt = %d'%(self.DeletePlayerID, err, trycnt)) mylog.error(msg) return False return True #Can not implement adoUpdateStr method:No key defined! def adoUpdateEx(self, collection, spec): '''Ö´ÐиüÐÂ''' trycnt = 0 rec = self.getRecord() while(True): try: collection.update(spec, {'$set':rec}, False, False, True, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_154, 'Update failed!DeletePlayerID = %s, error = %s, trycnt = %d'%(self.DeletePlayerID, err, trycnt)) mylog.error(msg) return False return True #Can not implement adoCheckUpdateStr method:No key defined! #Can not implement adoCheckUpdateExStr method:No key defined! def getAdoRecords(self, resultCollection): '''²éѯ½á¹û´ò°ü³É¶þ½øÖÆÁ÷''' result = '' result = CommFunc.WriteDWORD(result, resultCollection.count()) for rec in resultCollection: self.readRecord(rec) result += self.getBuffer() return result def adoQueryIndex(self, collection): '''ÓÃË÷Òý×ֶβéÕÒ''' resultCollection = collection.find({'DeletePlayerID':self.DeletePlayerID}) return self.getAdoRecords(resultCollection) def adoQueryCustom(self, collection, queryDict): '''×Ô¶¨Òå²éѯ''' resultCollection = collection.find(queryDict) return self.getAdoRecords(resultCollection) def adoQueryAll(self, collection): '''²éѯËùÓÐ''' resultCollection = collection.find() return self.getAdoRecords(resultCollection) def adoDeleteByIndex(self, collection): '''¸ù¾ÝË÷Òýɾ³ý''' trycnt = 0 while(True): try: collection.remove({'DeletePlayerID':self.DeletePlayerID}) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:DeletePlayerID = %s"%(self.__class__.__name__, inspect.stack()[0][3], self.DeletePlayerID)) msg = error.formatMsg('error', error.ERROR_NO_155, 'delete failure!self.DeletePlayerID = %s, error = %s, trycnt = %d'%(self.DeletePlayerID, err, trycnt)) mylog.error(msg) return False return True def outputString(self): output = '''//Íæ¼Òɾ³ý½ÇɫˢÐÂ#tagDBPlayer_DeleteRoleUpdateRole: DeletePlayerID = %s, UpdatePlayerID = %s, Gold = %s, GoldPaper = %s, Silver = %s, SilverPaper = %s, WarehouseGold = %s, WarehouseSilver = %s, ADOResult = %s, '''%( self.DeletePlayerID, self.UpdatePlayerID, self.Gold, self.GoldPaper, self.Silver, self.SilverPaper, self.WarehouseGold, self.WarehouseSilver, self.ADOResult, ) return output def dumpString(self): output = '''%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s'''%( self.DeletePlayerID, self.UpdatePlayerID, self.Gold, self.GoldPaper, self.Silver, self.SilverPaper, self.WarehouseGold, self.WarehouseSilver, ) return output #------------------------------------------------------ #´æ´¢ÏµÍ³Óʼþ#tagDBMailList_SaveSysMail class tagDBMailList_SaveSysMail(Structure): _pack_ = 1 _fields_ = [ ('SenderID', ctypes.c_ulong), ('AccID', ctypes.c_char * 65), ('MailID', ctypes.c_char * 40), ('MailType', ctypes.c_ubyte), ('SenderName', ctypes.c_char * 33), ('Title', ctypes.c_char * 21), ('Money', ctypes.c_ulong), ('LetterType', ctypes.c_ubyte), ('ExistTime', ctypes.c_ubyte), ('ContentLen', ctypes.c_ushort), ('Content', ctypes.c_char_p), ('TitleUseSysMessage', ctypes.c_ubyte), ('ContentUseSysMessage', ctypes.c_ubyte), ('ADOResult', ctypes.c_ulong), ] def __init__(self): Structure.__init__(self) self.clear() def clear(self): self.SenderID = 0 self.AccID = '' self.MailID = '' self.MailType = 0 self.SenderName = '' self.Title = '' self.Money = 0 self.LetterType = 0 self.ExistTime = 0 self.ContentLen = 0 self.Content = '' self.TitleUseSysMessage = 0 self.ContentUseSysMessage = 0 def readData(self, buf, pos = 0, length = 0): if not pos <= length: msg = error.formatMsg('error', error.ERROR_NO_148, '(pos = %s) > (length = %s)'%(pos, length)) mylog.error(msg) return -1 if len(buf) < pos + self.getLength(): msg = error.formatMsg('error', error.ERROR_NO_149, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength())) mylog.error(msg) self.clear() self.SenderID, pos = CommFunc.ReadDWORD(buf, pos) self.AccID, pos = CommFunc.ReadString(buf, pos, 65) self.MailID, pos = CommFunc.ReadString(buf, pos, 40) self.MailType, pos = CommFunc.ReadBYTE(buf, pos) self.SenderName, pos = CommFunc.ReadString(buf, pos, 33) self.Title, pos = CommFunc.ReadString(buf, pos, 21) self.Money, pos = CommFunc.ReadDWORD(buf, pos) self.LetterType, pos = CommFunc.ReadBYTE(buf, pos) self.ExistTime, pos = CommFunc.ReadBYTE(buf, pos) self.ContentLen, pos = CommFunc.ReadWORD(buf, pos) tmp, pos = CommFunc.ReadString(buf, pos, self.ContentLen) self.Content = ctypes.c_char_p(tmp) self.TitleUseSysMessage, pos = CommFunc.ReadBYTE(buf, pos) self.ContentUseSysMessage, pos = CommFunc.ReadBYTE(buf, pos) return self.getLength() def getBuffer(self): buf = '' buf = CommFunc.WriteDWORD(buf, self.SenderID) buf = CommFunc.WriteString(buf, sizeof(ctypes.c_char) * 65, self.AccID) buf = CommFunc.WriteString(buf, sizeof(ctypes.c_char) * 40, self.MailID) buf = CommFunc.WriteBYTE(buf, self.MailType) buf = CommFunc.WriteString(buf, sizeof(ctypes.c_char) * 33, self.SenderName) buf = CommFunc.WriteString(buf, sizeof(ctypes.c_char) * 21, self.Title) buf = CommFunc.WriteDWORD(buf, self.Money) buf = CommFunc.WriteBYTE(buf, self.LetterType) buf = CommFunc.WriteBYTE(buf, self.ExistTime) buf = CommFunc.WriteWORD(buf, self.ContentLen) buf = CommFunc.WriteString(buf, self.ContentLen, self.Content) buf = CommFunc.WriteBYTE(buf, self.TitleUseSysMessage) buf = CommFunc.WriteBYTE(buf, self.ContentUseSysMessage) return buf def getLength(self): length = 0 length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_char) * 65 length += sizeof(ctypes.c_char) * 40 length += sizeof(ctypes.c_ubyte) length += sizeof(ctypes.c_char) * 33 length += sizeof(ctypes.c_char) * 21 length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ubyte) length += sizeof(ctypes.c_ubyte) length += sizeof(ctypes.c_ushort) length += self.ContentLen length += sizeof(ctypes.c_ubyte) length += sizeof(ctypes.c_ubyte) return length def getRecord(self): '''×éÖ¯´æ´¢¼Ç¼''' rec = {} rec[u'SenderID'] = self.SenderID rec[u'AccID'] = fix_incomingText(self.AccID) rec[u'MailID'] = fix_incomingText(self.MailID) rec[u'MailType'] = self.MailType rec[u'SenderName'] = fix_incomingText(self.SenderName) rec[u'Title'] = fix_incomingText(self.Title) rec[u'Money'] = self.Money rec[u'LetterType'] = self.LetterType rec[u'ExistTime'] = self.ExistTime rec[u'ContentLen'] = self.ContentLen rec[u'Content'] = fix_incomingText(self.Content) rec[u'TitleUseSysMessage'] = self.TitleUseSysMessage rec[u'ContentUseSysMessage'] = self.ContentUseSysMessage return rec def readRecord(self, rec): '''ÓÉÓÚMongoDB¶Á³öÀ´ÊÇunicode,ËùÓÐ×Ö·û´®ÐèÒª½øÐÐת»»''' self.SenderID = rec.get(u'SenderID', 0) self.AccID = fix_outgoingText(rec.get(u'AccID', u'')) self.MailID = fix_outgoingText(rec.get(u'MailID', u'')) self.MailType = rec.get(u'MailType', 0) self.SenderName = fix_outgoingText(rec.get(u'SenderName', u'')) self.Title = fix_outgoingText(rec.get(u'Title', u'')) self.Money = rec.get(u'Money', 0) self.LetterType = rec.get(u'LetterType', 0) self.ExistTime = rec.get(u'ExistTime', 0) self.ContentLen = rec.get(u'ContentLen', 0) self.Content = fix_outgoingText(rec.get(u'Content', u'')) self.TitleUseSysMessage = rec.get(u'TitleUseSysMessage', 0) self.ContentUseSysMessage = rec.get(u'ContentUseSysMessage', 0) #Can not implement adoLoadStr method:No key defined! def adoInsert(self, collection): '''Ö´ÐвåÈë''' trycnt = 0 rec = self.getRecord() while(True): try: collection.insert(rec, False, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_152, 'Insert failed!SenderID = %s, error = %s, trycnt = %d'%(self.SenderID, err, trycnt)) mylog.error(msg) return False return True #Can not implement adoUpdateStr method:No key defined! def adoUpdateEx(self, collection, spec): '''Ö´ÐиüÐÂ''' trycnt = 0 rec = self.getRecord() while(True): try: collection.update(spec, {'$set':rec}, False, False, True, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_154, 'Update failed!SenderID = %s, error = %s, trycnt = %d'%(self.SenderID, err, trycnt)) mylog.error(msg) return False return True #Can not implement adoCheckUpdateStr method:No key defined! #Can not implement adoCheckUpdateExStr method:No key defined! def getAdoRecords(self, resultCollection): '''²éѯ½á¹û´ò°ü³É¶þ½øÖÆÁ÷''' result = '' result = CommFunc.WriteDWORD(result, resultCollection.count()) for rec in resultCollection: self.readRecord(rec) result += self.getBuffer() return result def adoQueryIndex(self, collection): '''ÓÃË÷Òý×ֶβéÕÒ''' resultCollection = collection.find({'SenderID':self.SenderID}) return self.getAdoRecords(resultCollection) def adoQueryCustom(self, collection, queryDict): '''×Ô¶¨Òå²éѯ''' resultCollection = collection.find(queryDict) return self.getAdoRecords(resultCollection) def adoQueryAll(self, collection): '''²éѯËùÓÐ''' resultCollection = collection.find() return self.getAdoRecords(resultCollection) def adoDeleteByIndex(self, collection): '''¸ù¾ÝË÷Òýɾ³ý''' trycnt = 0 while(True): try: collection.remove({'SenderID':self.SenderID}) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:SenderID = %s"%(self.__class__.__name__, inspect.stack()[0][3], self.SenderID)) msg = error.formatMsg('error', error.ERROR_NO_155, 'delete failure!self.SenderID = %s, error = %s, trycnt = %d'%(self.SenderID, err, trycnt)) mylog.error(msg) return False return True def outputString(self): output = '''//´æ´¢ÏµÍ³Óʼþ#tagDBMailList_SaveSysMail: SenderID = %s, AccID = %s, MailID = %s, MailType = %s, SenderName = %s, Title = %s, Money = %s, LetterType = %s, ExistTime = %s, ContentLen = %s, Content = %s, TitleUseSysMessage = %s, ContentUseSysMessage = %s, ADOResult = %s, '''%( self.SenderID, self.AccID, self.MailID, self.MailType, self.SenderName, self.Title, self.Money, self.LetterType, self.ExistTime, self.ContentLen, self.Content, self.TitleUseSysMessage, self.ContentUseSysMessage, self.ADOResult, ) return output def dumpString(self): output = '''%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s'''%( self.SenderID, self.AccID, self.MailID, self.MailType, self.SenderName, self.Title, self.Money, self.LetterType, self.ExistTime, self.ContentLen, self.Content, self.TitleUseSysMessage, self.ContentUseSysMessage, ) return output #CharÊý×éÀàÐÍSet½Ó¿Ú,ʹÓøýӿڶԴËÀàÐÍÊý¾Ý¸³Öµ£¬·ÀÖ¹¸³ÖµµÄÊý¾Ý¹ý³¤±¨´í def SetAccID(self,Str): if len(Str)<=65: self.AccID = Str else: self.AccID = Str[:65] def SetMailID(self,Str): if len(Str)<=40: self.MailID = Str else: self.MailID = Str[:40] def SetSenderName(self,Str): if len(Str)<=33: self.SenderName = Str else: self.SenderName = Str[:33] def SetTitle(self,Str): if len(Str)<=21: self.Title = Str else: self.Title = Str[:21] #------------------------------------------------------ #δÁìȡԪ±¦±í#tagDBUnclaimedGoldForm class tagDBUnclaimedGoldForm(Structure): _pack_ = 1 _fields_ = [ ('PlayerID', ctypes.c_ulong), ('DealGoldCount', ctypes.c_ulong), ('CostOfSilver', ctypes.c_ulong), ('ADOResult', ctypes.c_ulong), ] def __init__(self): Structure.__init__(self) self.clear() def clear(self): memset(addressof(self), 0, self.getLength()) def readData(self, buf, pos = 0, length = 0): if not pos <= length: msg = error.formatMsg('error', error.ERROR_NO_150, '(pos = %s)> (length = %s)'%(pos, length)) mylog.error(msg) return -1 if len(buf) < pos + self.getLength(): msg = error.formatMsg('error', error.ERROR_NO_151, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength())) mylog.error(msg) return -1 self.clear() memmove(addressof(self), buf[pos:], self.getLength()) return self.getLength() def getBuffer(self): buf = create_string_buffer(self.getLength()) memmove(addressof(buf), addressof(self), self.getLength()) return string_at(addressof(buf), self.getLength()) def getLength(self): return sizeof(tagDBUnclaimedGoldForm) def getRecord(self): '''×éÖ¯´æ´¢¼Ç¼''' rec = {} rec[u'PlayerID'] = self.PlayerID rec[u'DealGoldCount'] = self.DealGoldCount rec[u'CostOfSilver'] = self.CostOfSilver return rec def readRecord(self, rec): '''ÓÉÓÚMongoDB¶Á³öÀ´ÊÇunicode,ËùÓÐ×Ö·û´®ÐèÒª½øÐÐת»»''' self.PlayerID = rec.get(u'PlayerID', 0) self.DealGoldCount = rec.get(u'DealGoldCount', 0) self.CostOfSilver = rec.get(u'CostOfSilver', 0) #Can not implement adoLoadStr method:No key defined! def adoInsert(self, collection): '''Ö´ÐвåÈë''' trycnt = 0 rec = self.getRecord() while(True): try: collection.insert(rec, False, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_152, 'Insert failed!PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True #Can not implement adoUpdateStr method:No key defined! def adoUpdateEx(self, collection, spec): '''Ö´ÐиüÐÂ''' trycnt = 0 rec = self.getRecord() while(True): try: collection.update(spec, {'$set':rec}, False, False, True, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_154, 'Update failed!PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True #Can not implement adoCheckUpdateStr method:No key defined! #Can not implement adoCheckUpdateExStr method:No key defined! def getAdoRecords(self, resultCollection): '''²éѯ½á¹û´ò°ü³É¶þ½øÖÆÁ÷''' result = '' result = CommFunc.WriteDWORD(result, resultCollection.count()) for rec in resultCollection: self.readRecord(rec) result += self.getBuffer() return result def adoQueryIndex(self, collection): '''ÓÃË÷Òý×ֶβéÕÒ''' resultCollection = collection.find({'PlayerID':self.PlayerID}) return self.getAdoRecords(resultCollection) def adoQueryCustom(self, collection, queryDict): '''×Ô¶¨Òå²éѯ''' resultCollection = collection.find(queryDict) return self.getAdoRecords(resultCollection) def adoQueryAll(self, collection): '''²éѯËùÓÐ''' resultCollection = collection.find() return self.getAdoRecords(resultCollection) def adoDeleteByIndex(self, collection): '''¸ù¾ÝË÷Òýɾ³ý''' trycnt = 0 while(True): try: collection.remove({'PlayerID':self.PlayerID}) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:PlayerID = %s"%(self.__class__.__name__, inspect.stack()[0][3], self.PlayerID)) msg = error.formatMsg('error', error.ERROR_NO_155, 'delete failure!self.PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True def outputString(self): output = '''//δÁìȡԪ±¦±í#tagDBUnclaimedGoldForm: PlayerID = %s, DealGoldCount = %s, CostOfSilver = %s, ADOResult = %s, '''%( self.PlayerID, self.DealGoldCount, self.CostOfSilver, self.ADOResult, ) return output def dumpString(self): output = '''%1s\t%1s\t%1s'''%( self.PlayerID, self.DealGoldCount, self.CostOfSilver, ) return output #------------------------------------------------------ #½ðÇ®²¹³¥±í#tagExpiation class tagExpiation(Structure): _pack_ = 1 _fields_ = [ ('ExpiationIndex', ctypes.c_ulong), ('AccID', ctypes.c_char * 65), ('ExpiationTime', ctypes.c_double), ('Gold', ctypes.c_ulong), ('GoldPaper', ctypes.c_ulong), ('Silver', ctypes.c_ulong), ('SilverPaper', ctypes.c_ulong), ('ItemTypeID', ctypes.c_ulong), ('Count', ctypes.c_ushort), ('IsLocked', ctypes.c_ubyte), ('ItemPlaceType', ctypes.c_ubyte), ('ItemPlaceIndex', ctypes.c_ushort), ('IsBind', ctypes.c_ubyte), ('ItemStarLV', ctypes.c_ubyte), ('IdentifyPar', ctypes.c_ubyte), ('CurDurg', ctypes.c_ulong), ('MaxDurg', ctypes.c_ulong), ('CanPlaceStoneCount', ctypes.c_ubyte), ('ItemProperty', ctypes.c_ubyte), ('SoulProperty', ctypes.c_ushort), ('Maker', ctypes.c_ulong), ('MakerName', ctypes.c_char * 33), ('Stone1', ctypes.c_ulong), ('Stone2', ctypes.c_ulong), ('Stone3', ctypes.c_ulong), ('Stone4', ctypes.c_ulong), ('Stone5', ctypes.c_ulong), ('Stone6', ctypes.c_ulong), ('Stone7', ctypes.c_ulong), ('Stone8', ctypes.c_ulong), ('Stone9', ctypes.c_ulong), ('RemainHour', ctypes.c_ushort), ('CreateTime', ctypes.c_char * 30), ('ElementEffect', ctypes.c_ubyte), ('IsSuite', ctypes.c_ubyte), ('FitLV', ctypes.c_ubyte), ('EquipAddSkillCnt', ctypes.c_ubyte), ('ExpireTime', ctypes.c_ushort), ('BaseAtkPlus', ctypes.c_ulong), ('BaseDefPlus', ctypes.c_ulong), ('AddSkillData', ctypes.c_char * 300), ('BaseHP', ctypes.c_ulong), ('BaseMagicDef', ctypes.c_ulong), ('EquipMinAtkValue', ctypes.c_ulong), ('Proficiency', ctypes.c_ulong), ('RelMaxAddSkillCnt', ctypes.c_ubyte), ('FamilyActiveValue', ctypes.c_ulong), ('UserDataLen', ctypes.c_ulong), ('UserData', ctypes.c_char_p), ('ADOResult', ctypes.c_ulong), ] def __init__(self): Structure.__init__(self) self.clear() def clear(self): self.ExpiationIndex = 0 self.AccID = '' self.ExpiationTime = 0.0 self.Gold = 0 self.GoldPaper = 0 self.Silver = 0 self.SilverPaper = 0 self.ItemTypeID = 0 self.Count = 0 self.IsLocked = 0 self.ItemPlaceType = 0 self.ItemPlaceIndex = 0 self.IsBind = 0 self.ItemStarLV = 0 self.IdentifyPar = 0 self.CurDurg = 0 self.MaxDurg = 0 self.CanPlaceStoneCount = 0 self.ItemProperty = 0 self.SoulProperty = 0 self.Maker = 0 self.MakerName = '' self.Stone1 = 0 self.Stone2 = 0 self.Stone3 = 0 self.Stone4 = 0 self.Stone5 = 0 self.Stone6 = 0 self.Stone7 = 0 self.Stone8 = 0 self.Stone9 = 0 self.RemainHour = 0 self.CreateTime = '' self.ElementEffect = 0 self.IsSuite = 0 self.FitLV = 0 self.EquipAddSkillCnt = 0 self.ExpireTime = 0 self.BaseAtkPlus = 0 self.BaseDefPlus = 0 self.AddSkillData = '' self.BaseHP = 0 self.BaseMagicDef = 0 self.EquipMinAtkValue = 0 self.Proficiency = 0 self.RelMaxAddSkillCnt = 0 self.FamilyActiveValue = 0 self.UserDataLen = 0 self.UserData = '' def readData(self, buf, pos = 0, length = 0): if not pos <= length: msg = error.formatMsg('error', error.ERROR_NO_148, '(pos = %s) > (length = %s)'%(pos, length)) mylog.error(msg) return -1 if len(buf) < pos + self.getLength(): msg = error.formatMsg('error', error.ERROR_NO_149, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength())) mylog.error(msg) self.clear() self.ExpiationIndex, pos = CommFunc.ReadDWORD(buf, pos) self.AccID, pos = CommFunc.ReadString(buf, pos, 65) self.ExpiationTime, pos = CommFunc.ReadDouble(buf, pos) self.Gold, pos = CommFunc.ReadDWORD(buf, pos) self.GoldPaper, pos = CommFunc.ReadDWORD(buf, pos) self.Silver, pos = CommFunc.ReadDWORD(buf, pos) self.SilverPaper, pos = CommFunc.ReadDWORD(buf, pos) self.ItemTypeID, pos = CommFunc.ReadDWORD(buf, pos) self.Count, pos = CommFunc.ReadWORD(buf, pos) self.IsLocked, pos = CommFunc.ReadBYTE(buf, pos) self.ItemPlaceType, pos = CommFunc.ReadBYTE(buf, pos) self.ItemPlaceIndex, pos = CommFunc.ReadWORD(buf, pos) self.IsBind, pos = CommFunc.ReadBYTE(buf, pos) self.ItemStarLV, pos = CommFunc.ReadBYTE(buf, pos) self.IdentifyPar, pos = CommFunc.ReadBYTE(buf, pos) self.CurDurg, pos = CommFunc.ReadDWORD(buf, pos) self.MaxDurg, pos = CommFunc.ReadDWORD(buf, pos) self.CanPlaceStoneCount, pos = CommFunc.ReadBYTE(buf, pos) self.ItemProperty, pos = CommFunc.ReadBYTE(buf, pos) self.SoulProperty, pos = CommFunc.ReadWORD(buf, pos) self.Maker, pos = CommFunc.ReadDWORD(buf, pos) self.MakerName, pos = CommFunc.ReadString(buf, pos, 33) self.Stone1, pos = CommFunc.ReadDWORD(buf, pos) self.Stone2, pos = CommFunc.ReadDWORD(buf, pos) self.Stone3, pos = CommFunc.ReadDWORD(buf, pos) self.Stone4, pos = CommFunc.ReadDWORD(buf, pos) self.Stone5, pos = CommFunc.ReadDWORD(buf, pos) self.Stone6, pos = CommFunc.ReadDWORD(buf, pos) self.Stone7, pos = CommFunc.ReadDWORD(buf, pos) self.Stone8, pos = CommFunc.ReadDWORD(buf, pos) self.Stone9, pos = CommFunc.ReadDWORD(buf, pos) self.RemainHour, pos = CommFunc.ReadWORD(buf, pos) self.CreateTime, pos = CommFunc.ReadString(buf, pos, 30) self.ElementEffect, pos = CommFunc.ReadBYTE(buf, pos) self.IsSuite, pos = CommFunc.ReadBYTE(buf, pos) self.FitLV, pos = CommFunc.ReadBYTE(buf, pos) self.EquipAddSkillCnt, pos = CommFunc.ReadBYTE(buf, pos) self.ExpireTime, pos = CommFunc.ReadWORD(buf, pos) self.BaseAtkPlus, pos = CommFunc.ReadDWORD(buf, pos) self.BaseDefPlus, pos = CommFunc.ReadDWORD(buf, pos) self.AddSkillData, pos = CommFunc.ReadString(buf, pos, 300) self.BaseHP, pos = CommFunc.ReadDWORD(buf, pos) self.BaseMagicDef, pos = CommFunc.ReadDWORD(buf, pos) self.EquipMinAtkValue, pos = CommFunc.ReadDWORD(buf, pos) self.Proficiency, pos = CommFunc.ReadDWORD(buf, pos) self.RelMaxAddSkillCnt, pos = CommFunc.ReadBYTE(buf, pos) self.FamilyActiveValue, pos = CommFunc.ReadDWORD(buf, pos) self.UserDataLen, pos = CommFunc.ReadDWORD(buf, pos) tmp, pos = CommFunc.ReadString(buf, pos, self.UserDataLen) self.UserData = ctypes.c_char_p(tmp) return self.getLength() def getBuffer(self): buf = '' buf = CommFunc.WriteDWORD(buf, self.ExpiationIndex) buf = CommFunc.WriteString(buf, sizeof(ctypes.c_char) * 65, self.AccID) buf = CommFunc.WriteDouble(buf, self.ExpiationTime) buf = CommFunc.WriteDWORD(buf, self.Gold) buf = CommFunc.WriteDWORD(buf, self.GoldPaper) buf = CommFunc.WriteDWORD(buf, self.Silver) buf = CommFunc.WriteDWORD(buf, self.SilverPaper) buf = CommFunc.WriteDWORD(buf, self.ItemTypeID) buf = CommFunc.WriteWORD(buf, self.Count) buf = CommFunc.WriteBYTE(buf, self.IsLocked) buf = CommFunc.WriteBYTE(buf, self.ItemPlaceType) buf = CommFunc.WriteWORD(buf, self.ItemPlaceIndex) buf = CommFunc.WriteBYTE(buf, self.IsBind) buf = CommFunc.WriteBYTE(buf, self.ItemStarLV) buf = CommFunc.WriteBYTE(buf, self.IdentifyPar) buf = CommFunc.WriteDWORD(buf, self.CurDurg) buf = CommFunc.WriteDWORD(buf, self.MaxDurg) buf = CommFunc.WriteBYTE(buf, self.CanPlaceStoneCount) buf = CommFunc.WriteBYTE(buf, self.ItemProperty) buf = CommFunc.WriteWORD(buf, self.SoulProperty) buf = CommFunc.WriteDWORD(buf, self.Maker) buf = CommFunc.WriteString(buf, sizeof(ctypes.c_char) * 33, self.MakerName) buf = CommFunc.WriteDWORD(buf, self.Stone1) buf = CommFunc.WriteDWORD(buf, self.Stone2) buf = CommFunc.WriteDWORD(buf, self.Stone3) buf = CommFunc.WriteDWORD(buf, self.Stone4) buf = CommFunc.WriteDWORD(buf, self.Stone5) buf = CommFunc.WriteDWORD(buf, self.Stone6) buf = CommFunc.WriteDWORD(buf, self.Stone7) buf = CommFunc.WriteDWORD(buf, self.Stone8) buf = CommFunc.WriteDWORD(buf, self.Stone9) buf = CommFunc.WriteWORD(buf, self.RemainHour) buf = CommFunc.WriteString(buf, sizeof(ctypes.c_char) * 30, self.CreateTime) buf = CommFunc.WriteBYTE(buf, self.ElementEffect) buf = CommFunc.WriteBYTE(buf, self.IsSuite) buf = CommFunc.WriteBYTE(buf, self.FitLV) buf = CommFunc.WriteBYTE(buf, self.EquipAddSkillCnt) buf = CommFunc.WriteWORD(buf, self.ExpireTime) buf = CommFunc.WriteDWORD(buf, self.BaseAtkPlus) buf = CommFunc.WriteDWORD(buf, self.BaseDefPlus) buf = CommFunc.WriteString(buf, sizeof(ctypes.c_char) * 300, self.AddSkillData) buf = CommFunc.WriteDWORD(buf, self.BaseHP) buf = CommFunc.WriteDWORD(buf, self.BaseMagicDef) buf = CommFunc.WriteDWORD(buf, self.EquipMinAtkValue) buf = CommFunc.WriteDWORD(buf, self.Proficiency) buf = CommFunc.WriteBYTE(buf, self.RelMaxAddSkillCnt) buf = CommFunc.WriteDWORD(buf, self.FamilyActiveValue) buf = CommFunc.WriteDWORD(buf, self.UserDataLen) buf = CommFunc.WriteString(buf, self.UserDataLen, self.UserData) return buf def getLength(self): length = 0 length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_char) * 65 length += sizeof(ctypes.c_double) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ushort) length += sizeof(ctypes.c_ubyte) length += sizeof(ctypes.c_ubyte) length += sizeof(ctypes.c_ushort) length += sizeof(ctypes.c_ubyte) length += sizeof(ctypes.c_ubyte) length += sizeof(ctypes.c_ubyte) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ubyte) length += sizeof(ctypes.c_ubyte) length += sizeof(ctypes.c_ushort) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_char) * 33 length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ushort) length += sizeof(ctypes.c_char) * 30 length += sizeof(ctypes.c_ubyte) length += sizeof(ctypes.c_ubyte) length += sizeof(ctypes.c_ubyte) length += sizeof(ctypes.c_ubyte) length += sizeof(ctypes.c_ushort) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_char) * 300 length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ubyte) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += self.UserDataLen return length def getRecord(self): '''×éÖ¯´æ´¢¼Ç¼''' rec = {} rec[u'ExpiationIndex'] = self.ExpiationIndex rec[u'AccID'] = fix_incomingText(self.AccID) rec[u'ExpiationTime'] = self.ExpiationTime rec[u'Gold'] = self.Gold rec[u'GoldPaper'] = self.GoldPaper rec[u'Silver'] = self.Silver rec[u'SilverPaper'] = self.SilverPaper rec[u'ItemTypeID'] = self.ItemTypeID rec[u'Count'] = self.Count rec[u'IsLocked'] = self.IsLocked rec[u'ItemPlaceType'] = self.ItemPlaceType rec[u'ItemPlaceIndex'] = self.ItemPlaceIndex rec[u'IsBind'] = self.IsBind rec[u'ItemStarLV'] = self.ItemStarLV rec[u'IdentifyPar'] = self.IdentifyPar rec[u'CurDurg'] = self.CurDurg rec[u'MaxDurg'] = self.MaxDurg rec[u'CanPlaceStoneCount'] = self.CanPlaceStoneCount rec[u'ItemProperty'] = self.ItemProperty rec[u'SoulProperty'] = self.SoulProperty rec[u'Maker'] = self.Maker rec[u'MakerName'] = fix_incomingText(self.MakerName) rec[u'Stone1'] = self.Stone1 rec[u'Stone2'] = self.Stone2 rec[u'Stone3'] = self.Stone3 rec[u'Stone4'] = self.Stone4 rec[u'Stone5'] = self.Stone5 rec[u'Stone6'] = self.Stone6 rec[u'Stone7'] = self.Stone7 rec[u'Stone8'] = self.Stone8 rec[u'Stone9'] = self.Stone9 rec[u'RemainHour'] = self.RemainHour rec[u'CreateTime'] = fix_incomingText(self.CreateTime) rec[u'ElementEffect'] = self.ElementEffect rec[u'IsSuite'] = self.IsSuite rec[u'FitLV'] = self.FitLV rec[u'EquipAddSkillCnt'] = self.EquipAddSkillCnt rec[u'ExpireTime'] = self.ExpireTime rec[u'BaseAtkPlus'] = self.BaseAtkPlus rec[u'BaseDefPlus'] = self.BaseDefPlus rec[u'AddSkillData'] = fix_incomingText(self.AddSkillData) rec[u'BaseHP'] = self.BaseHP rec[u'BaseMagicDef'] = self.BaseMagicDef rec[u'EquipMinAtkValue'] = self.EquipMinAtkValue rec[u'Proficiency'] = self.Proficiency rec[u'RelMaxAddSkillCnt'] = self.RelMaxAddSkillCnt rec[u'FamilyActiveValue'] = self.FamilyActiveValue rec[u'UserDataLen'] = self.UserDataLen rec[u'UserData'] = fix_incomingText(self.UserData) return rec def readRecord(self, rec): '''ÓÉÓÚMongoDB¶Á³öÀ´ÊÇunicode,ËùÓÐ×Ö·û´®ÐèÒª½øÐÐת»»''' self.ExpiationIndex = rec.get(u'ExpiationIndex', 0) self.AccID = fix_outgoingText(rec.get(u'AccID', u'')) self.ExpiationTime = rec.get(u'ExpiationTime', 0) self.Gold = rec.get(u'Gold', 0) self.GoldPaper = rec.get(u'GoldPaper', 0) self.Silver = rec.get(u'Silver', 0) self.SilverPaper = rec.get(u'SilverPaper', 0) self.ItemTypeID = rec.get(u'ItemTypeID', 0) self.Count = rec.get(u'Count', 0) self.IsLocked = rec.get(u'IsLocked', 0) self.ItemPlaceType = rec.get(u'ItemPlaceType', 0) self.ItemPlaceIndex = rec.get(u'ItemPlaceIndex', 0) self.IsBind = rec.get(u'IsBind', 0) self.ItemStarLV = rec.get(u'ItemStarLV', 0) self.IdentifyPar = rec.get(u'IdentifyPar', 0) self.CurDurg = rec.get(u'CurDurg', 0) self.MaxDurg = rec.get(u'MaxDurg', 0) self.CanPlaceStoneCount = rec.get(u'CanPlaceStoneCount', 0) self.ItemProperty = rec.get(u'ItemProperty', 0) self.SoulProperty = rec.get(u'SoulProperty', 0) self.Maker = rec.get(u'Maker', 0) self.MakerName = fix_outgoingText(rec.get(u'MakerName', u'')) self.Stone1 = rec.get(u'Stone1', 0) self.Stone2 = rec.get(u'Stone2', 0) self.Stone3 = rec.get(u'Stone3', 0) self.Stone4 = rec.get(u'Stone4', 0) self.Stone5 = rec.get(u'Stone5', 0) self.Stone6 = rec.get(u'Stone6', 0) self.Stone7 = rec.get(u'Stone7', 0) self.Stone8 = rec.get(u'Stone8', 0) self.Stone9 = rec.get(u'Stone9', 0) self.RemainHour = rec.get(u'RemainHour', 0) self.CreateTime = fix_outgoingText(rec.get(u'CreateTime', u'')) self.ElementEffect = rec.get(u'ElementEffect', 0) self.IsSuite = rec.get(u'IsSuite', 0) self.FitLV = rec.get(u'FitLV', 0) self.EquipAddSkillCnt = rec.get(u'EquipAddSkillCnt', 0) self.ExpireTime = rec.get(u'ExpireTime', 0) self.BaseAtkPlus = rec.get(u'BaseAtkPlus', 0) self.BaseDefPlus = rec.get(u'BaseDefPlus', 0) self.AddSkillData = fix_outgoingText(rec.get(u'AddSkillData', u'')) self.BaseHP = rec.get(u'BaseHP', 0) self.BaseMagicDef = rec.get(u'BaseMagicDef', 0) self.EquipMinAtkValue = rec.get(u'EquipMinAtkValue', 0) self.Proficiency = rec.get(u'Proficiency', 0) self.RelMaxAddSkillCnt = rec.get(u'RelMaxAddSkillCnt', 0) self.FamilyActiveValue = rec.get(u'FamilyActiveValue', 0) self.UserDataLen = rec.get(u'UserDataLen', 0) self.UserData = fix_outgoingText(rec.get(u'UserData', u'')) def adoLoad(self, collection): '''ʹÓÃKEY²éÕÒ²¢¶ÁÈ¡''' resultCollection = collection.find({'ExpiationIndex':self.ExpiationIndex}) if resultCollection.count() <= 0: return False #ÓÉÓÚÊÇKEY²éÕÒ£¬ËùÓÐÈç¹û´æÔÚ¾ÍÖ»ÓÐÒ»Ìõ¼Ç¼ rec = resultCollection[0] #¶ÁÈ¡Êý¾Ý self.readRecord(rec) return True def adoInsert(self, collection): '''Ö´ÐвåÈë''' trycnt = 0 rec = self.getRecord() while(True): try: collection.insert(rec, False, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_152, 'Insert failed!AccID = %s, error = %s, trycnt = %d'%(self.AccID, err, trycnt)) mylog.error(msg) return False return True def adoUpdate(self, collection): '''Ö´ÐиüÐÂ''' trycnt = 0 rec = self.getRecord() while(True): try: collection.update({'ExpiationIndex':self.ExpiationIndex}, {'$set':rec}, False, False, True, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_153, 'Update failed!AccID = %s, error = %s, trycnt = %d'%(self.AccID, err, trycnt)) mylog.error(msg) return False return True def adoUpdateEx(self, collection, spec): '''Ö´ÐиüÐÂ''' trycnt = 0 rec = self.getRecord() while(True): try: collection.update(spec, {'$set':rec}, False, False, True, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_154, 'Update failed!AccID = %s, error = %s, trycnt = %d'%(self.AccID, err, trycnt)) mylog.error(msg) return False return True def adoCheckUpdate(self, collection): '''¸ù¾ÝÇé¿öÖ´ÐвåÈë»ò¸üÐÂ''' resultCollection = collection.find({'ExpiationIndex':self.ExpiationIndex}) if resultCollection.count() <= 0: return self.adoInsert(collection) return self.adoUpdate(collection) def adoCheckUpdateEx(self, collection, spec): '''¸ù¾ÝÇé¿öÖ´ÐвåÈë»ò¸üÐÂ''' resultCollection = collection.find(spec) if resultCollection.count() <= 0: return self.adoInsert(collection) return self.adoUpdateEx(collection, spec) def getAdoRecords(self, resultCollection): '''²éѯ½á¹û´ò°ü³É¶þ½øÖÆÁ÷''' result = '' result = CommFunc.WriteDWORD(result, resultCollection.count()) for rec in resultCollection: self.readRecord(rec) result += self.getBuffer() return result def adoQueryIndex(self, collection): '''ÓÃË÷Òý×ֶβéÕÒ''' resultCollection = collection.find({'AccID':fix_incomingText(self.AccID)}) return self.getAdoRecords(resultCollection) def adoQueryCustom(self, collection, queryDict): '''×Ô¶¨Òå²éѯ''' resultCollection = collection.find(queryDict) return self.getAdoRecords(resultCollection) def adoQueryAll(self, collection): '''²éѯËùÓÐ''' resultCollection = collection.find() return self.getAdoRecords(resultCollection) def adoDeleteByIndex(self, collection): '''¸ù¾ÝË÷Òýɾ³ý''' trycnt = 0 while(True): try: collection.remove({'AccID':fix_incomingText(self.AccID)}) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:AccID = %s"%(self.__class__.__name__, inspect.stack()[0][3], self.AccID)) msg = error.formatMsg('error', error.ERROR_NO_155, 'delete failure!self.AccID = %s, error = %s, trycnt = %d'%(self.AccID, err, trycnt)) mylog.error(msg) return False return True def outputString(self): output = '''//½ðÇ®²¹³¥±í#tagExpiation: ExpiationIndex = %s, AccID = %s, ExpiationTime = %s, Gold = %s, GoldPaper = %s, Silver = %s, SilverPaper = %s, ItemTypeID = %s, Count = %s, IsLocked = %s, ItemPlaceType = %s, ItemPlaceIndex = %s, IsBind = %s, ItemStarLV = %s, IdentifyPar = %s, CurDurg = %s, MaxDurg = %s, CanPlaceStoneCount = %s, ItemProperty = %s, SoulProperty = %s, Maker = %s, MakerName = %s, Stone1 = %s, Stone2 = %s, Stone3 = %s, Stone4 = %s, Stone5 = %s, Stone6 = %s, Stone7 = %s, Stone8 = %s, Stone9 = %s, RemainHour = %s, CreateTime = %s, ElementEffect = %s, IsSuite = %s, FitLV = %s, EquipAddSkillCnt = %s, ExpireTime = %s, BaseAtkPlus = %s, BaseDefPlus = %s, AddSkillData = %s, BaseHP = %s, BaseMagicDef = %s, EquipMinAtkValue = %s, Proficiency = %s, RelMaxAddSkillCnt = %s, FamilyActiveValue = %s, UserDataLen = %s, UserData = %s, ADOResult = %s, '''%( self.ExpiationIndex, self.AccID, self.ExpiationTime, self.Gold, self.GoldPaper, self.Silver, self.SilverPaper, self.ItemTypeID, self.Count, self.IsLocked, self.ItemPlaceType, self.ItemPlaceIndex, self.IsBind, self.ItemStarLV, self.IdentifyPar, self.CurDurg, self.MaxDurg, self.CanPlaceStoneCount, self.ItemProperty, self.SoulProperty, self.Maker, self.MakerName, self.Stone1, self.Stone2, self.Stone3, self.Stone4, self.Stone5, self.Stone6, self.Stone7, self.Stone8, self.Stone9, self.RemainHour, self.CreateTime, self.ElementEffect, self.IsSuite, self.FitLV, self.EquipAddSkillCnt, self.ExpireTime, self.BaseAtkPlus, self.BaseDefPlus, self.AddSkillData, self.BaseHP, self.BaseMagicDef, self.EquipMinAtkValue, self.Proficiency, self.RelMaxAddSkillCnt, self.FamilyActiveValue, self.UserDataLen, self.UserData, self.ADOResult, ) return output def dumpString(self): output = '''%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s'''%( self.ExpiationIndex, self.AccID, self.ExpiationTime, self.Gold, self.GoldPaper, self.Silver, self.SilverPaper, self.ItemTypeID, self.Count, self.IsLocked, self.ItemPlaceType, self.ItemPlaceIndex, self.IsBind, self.ItemStarLV, self.IdentifyPar, self.CurDurg, self.MaxDurg, self.CanPlaceStoneCount, self.ItemProperty, self.SoulProperty, self.Maker, self.MakerName, self.Stone1, self.Stone2, self.Stone3, self.Stone4, self.Stone5, self.Stone6, self.Stone7, self.Stone8, self.Stone9, self.RemainHour, self.CreateTime, self.ElementEffect, self.IsSuite, self.FitLV, self.EquipAddSkillCnt, self.ExpireTime, self.BaseAtkPlus, self.BaseDefPlus, self.AddSkillData, self.BaseHP, self.BaseMagicDef, self.EquipMinAtkValue, self.Proficiency, self.RelMaxAddSkillCnt, self.FamilyActiveValue, self.UserDataLen, self.UserData, ) return output #CharÊý×éÀàÐÍSet½Ó¿Ú,ʹÓøýӿڶԴËÀàÐÍÊý¾Ý¸³Öµ£¬·ÀÖ¹¸³ÖµµÄÊý¾Ý¹ý³¤±¨´í def SetAccID(self,Str): if len(Str)<=65: self.AccID = Str else: self.AccID = Str[:65] def SetMakerName(self,Str): if len(Str)<=33: self.MakerName = Str else: self.MakerName = Str[:33] def SetCreateTime(self,Str): if len(Str)<=30: self.CreateTime = Str else: self.CreateTime = Str[:30] def SetAddSkillData(self,Str): if len(Str)<=300: self.AddSkillData = Str else: self.AddSkillData = Str[:300] #------------------------------------------------------ #¼Ò×å±í#tagFamilyInfo class tagFamilyInfo(Structure): _pack_ = 1 _fields_ = [ ('ID', ctypes.c_ulong), ('Name', ctypes.c_char * 33), ('LeaderID', ctypes.c_ulong), ('LeaderName', ctypes.c_char * 33), ('LeaderOfficialRank', ctypes.c_ubyte), ('Broadcast', ctypes.c_char * 200), ('LV', ctypes.c_ubyte), ('Money', ctypes.c_ulong), ('Hornor', ctypes.c_ulong), ('BillboardPlace', ctypes.c_ushort), ('AcceptJoin', ctypes.c_ubyte), ('CreateTime', ctypes.c_char * 30), ('Point', ctypes.c_ulong), ('FamilyActiveValue', ctypes.c_ulong), ('LastWeekFamilyActiveValue', ctypes.c_ulong), ('BeChallengedTime', ctypes.c_char * 20), ('Extra1', ctypes.c_ulong), ('Extra2', ctypes.c_ulong), ('Extra3', ctypes.c_ulong), ('Extra4', ctypes.c_ulong), ('Extra5', ctypes.c_ulong), ('Extra6', ctypes.c_ulong), ('Extra7', ctypes.c_ulong), ('Extra8', ctypes.c_ulong), ('Extra9', ctypes.c_ulong), ('Extra10', ctypes.c_ulong), ('ServerID', ctypes.c_ulong), ('ADOResult', ctypes.c_ulong), ] def __init__(self): Structure.__init__(self) self.clear() def clear(self): memset(addressof(self), 0, self.getLength()) def readData(self, buf, pos = 0, length = 0): if not pos <= length: msg = error.formatMsg('error', error.ERROR_NO_148, '(pos = %s) > (length = %s)'%(pos, length)) mylog.error(msg) return -1 if len(buf) < pos + self.getLength(): msg = error.formatMsg('error', error.ERROR_NO_149, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength())) mylog.error(msg) self.clear() self.ID, pos = CommFunc.ReadDWORD(buf, pos) self.Name, pos = CommFunc.ReadString(buf, pos, 33) self.LeaderID, pos = CommFunc.ReadDWORD(buf, pos) self.LeaderName, pos = CommFunc.ReadString(buf, pos, 33) self.LeaderOfficialRank, pos = CommFunc.ReadBYTE(buf, pos) self.Broadcast, pos = CommFunc.ReadString(buf, pos, 200) self.LV, pos = CommFunc.ReadBYTE(buf, pos) self.Money, pos = CommFunc.ReadDWORD(buf, pos) self.Hornor, pos = CommFunc.ReadDWORD(buf, pos) self.BillboardPlace, pos = CommFunc.ReadWORD(buf, pos) self.AcceptJoin, pos = CommFunc.ReadBYTE(buf, pos) self.CreateTime, pos = CommFunc.ReadString(buf, pos, 30) self.Point, pos = CommFunc.ReadDWORD(buf, pos) self.FamilyActiveValue, pos = CommFunc.ReadDWORD(buf, pos) self.LastWeekFamilyActiveValue, pos = CommFunc.ReadDWORD(buf, pos) self.BeChallengedTime, pos = CommFunc.ReadString(buf, pos, 20) self.Extra1, pos = CommFunc.ReadDWORD(buf, pos) self.Extra2, pos = CommFunc.ReadDWORD(buf, pos) self.Extra3, pos = CommFunc.ReadDWORD(buf, pos) self.Extra4, pos = CommFunc.ReadDWORD(buf, pos) self.Extra5, pos = CommFunc.ReadDWORD(buf, pos) self.Extra6, pos = CommFunc.ReadDWORD(buf, pos) self.Extra7, pos = CommFunc.ReadDWORD(buf, pos) self.Extra8, pos = CommFunc.ReadDWORD(buf, pos) self.Extra9, pos = CommFunc.ReadDWORD(buf, pos) self.Extra10, pos = CommFunc.ReadDWORD(buf, pos) self.ServerID, pos = CommFunc.ReadDWORD(buf, pos) return self.getLength() def getBuffer(self): buf = create_string_buffer(self.getLength()) memmove(addressof(buf), addressof(self), self.getLength()) return string_at(addressof(buf), self.getLength()) def getLength(self): return sizeof(tagFamilyInfo) def getRecord(self): '''×éÖ¯´æ´¢¼Ç¼''' rec = {} rec[u'ID'] = self.ID rec[u'Name'] = fix_incomingText(self.Name) rec[u'LeaderID'] = self.LeaderID rec[u'LeaderName'] = fix_incomingText(self.LeaderName) rec[u'LeaderOfficialRank'] = self.LeaderOfficialRank rec[u'Broadcast'] = fix_incomingText(self.Broadcast) rec[u'LV'] = self.LV rec[u'Money'] = self.Money rec[u'Hornor'] = self.Hornor rec[u'BillboardPlace'] = self.BillboardPlace rec[u'AcceptJoin'] = self.AcceptJoin rec[u'CreateTime'] = fix_incomingText(self.CreateTime) rec[u'Point'] = self.Point rec[u'FamilyActiveValue'] = self.FamilyActiveValue rec[u'LastWeekFamilyActiveValue'] = self.LastWeekFamilyActiveValue rec[u'BeChallengedTime'] = fix_incomingText(self.BeChallengedTime) rec[u'Extra1'] = self.Extra1 rec[u'Extra2'] = self.Extra2 rec[u'Extra3'] = self.Extra3 rec[u'Extra4'] = self.Extra4 rec[u'Extra5'] = self.Extra5 rec[u'Extra6'] = self.Extra6 rec[u'Extra7'] = self.Extra7 rec[u'Extra8'] = self.Extra8 rec[u'Extra9'] = self.Extra9 rec[u'Extra10'] = self.Extra10 rec[u'ServerID'] = self.ServerID return rec def readRecord(self, rec): '''ÓÉÓÚMongoDB¶Á³öÀ´ÊÇunicode,ËùÓÐ×Ö·û´®ÐèÒª½øÐÐת»»''' self.ID = rec.get(u'ID', 0) self.Name = fix_outgoingText(rec.get(u'Name', u'')) self.LeaderID = rec.get(u'LeaderID', 0) self.LeaderName = fix_outgoingText(rec.get(u'LeaderName', u'')) self.LeaderOfficialRank = rec.get(u'LeaderOfficialRank', 0) self.Broadcast = fix_outgoingText(rec.get(u'Broadcast', u'')) self.LV = rec.get(u'LV', 0) self.Money = rec.get(u'Money', 0) self.Hornor = rec.get(u'Hornor', 0) self.BillboardPlace = rec.get(u'BillboardPlace', 0) self.AcceptJoin = rec.get(u'AcceptJoin', 0) self.CreateTime = fix_outgoingText(rec.get(u'CreateTime', u'')) self.Point = rec.get(u'Point', 0) self.FamilyActiveValue = rec.get(u'FamilyActiveValue', 0) self.LastWeekFamilyActiveValue = rec.get(u'LastWeekFamilyActiveValue', 0) self.BeChallengedTime = fix_outgoingText(rec.get(u'BeChallengedTime', u'')) self.Extra1 = rec.get(u'Extra1', 0) self.Extra2 = rec.get(u'Extra2', 0) self.Extra3 = rec.get(u'Extra3', 0) self.Extra4 = rec.get(u'Extra4', 0) self.Extra5 = rec.get(u'Extra5', 0) self.Extra6 = rec.get(u'Extra6', 0) self.Extra7 = rec.get(u'Extra7', 0) self.Extra8 = rec.get(u'Extra8', 0) self.Extra9 = rec.get(u'Extra9', 0) self.Extra10 = rec.get(u'Extra10', 0) self.ServerID = rec.get(u'ServerID', 0) def adoLoad(self, collection): '''ʹÓÃKEY²éÕÒ²¢¶ÁÈ¡''' resultCollection = collection.find({'ID':self.ID}) if resultCollection.count() <= 0: return False #ÓÉÓÚÊÇKEY²éÕÒ£¬ËùÓÐÈç¹û´æÔÚ¾ÍÖ»ÓÐÒ»Ìõ¼Ç¼ rec = resultCollection[0] #¶ÁÈ¡Êý¾Ý self.readRecord(rec) return True def adoInsert(self, collection): '''Ö´ÐвåÈë''' trycnt = 0 rec = self.getRecord() while(True): try: collection.insert(rec, False, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_152, 'Insert failed!ID = %s, error = %s, trycnt = %d'%(self.ID, err, trycnt)) mylog.error(msg) return False return True def adoUpdate(self, collection): '''Ö´ÐиüÐÂ''' trycnt = 0 rec = self.getRecord() while(True): try: collection.update({'ID':self.ID}, {'$set':rec}, False, False, True, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_153, 'Update failed!ID = %s, error = %s, trycnt = %d'%(self.ID, err, trycnt)) mylog.error(msg) return False return True def adoUpdateEx(self, collection, spec): '''Ö´ÐиüÐÂ''' trycnt = 0 rec = self.getRecord() while(True): try: collection.update(spec, {'$set':rec}, False, False, True, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_154, 'Update failed!ID = %s, error = %s, trycnt = %d'%(self.ID, err, trycnt)) mylog.error(msg) return False return True def adoCheckUpdate(self, collection): '''¸ù¾ÝÇé¿öÖ´ÐвåÈë»ò¸üÐÂ''' resultCollection = collection.find({'ID':self.ID}) if resultCollection.count() <= 0: return self.adoInsert(collection) return self.adoUpdate(collection) def adoCheckUpdateEx(self, collection, spec): '''¸ù¾ÝÇé¿öÖ´ÐвåÈë»ò¸üÐÂ''' resultCollection = collection.find(spec) if resultCollection.count() <= 0: return self.adoInsert(collection) return self.adoUpdateEx(collection, spec) def getAdoRecords(self, resultCollection): '''²éѯ½á¹û´ò°ü³É¶þ½øÖÆÁ÷''' result = '' result = CommFunc.WriteDWORD(result, resultCollection.count()) for rec in resultCollection: self.readRecord(rec) result += self.getBuffer() return result def adoQueryIndex(self, collection): '''ÓÃË÷Òý×ֶβéÕÒ''' resultCollection = collection.find({'ID':self.ID}) return self.getAdoRecords(resultCollection) def adoQueryCustom(self, collection, queryDict): '''×Ô¶¨Òå²éѯ''' resultCollection = collection.find(queryDict) return self.getAdoRecords(resultCollection) def adoQueryAll(self, collection): '''²éѯËùÓÐ''' resultCollection = collection.find() return self.getAdoRecords(resultCollection) def adoDeleteByIndex(self, collection): '''¸ù¾ÝË÷Òýɾ³ý''' trycnt = 0 while(True): try: collection.remove({'ID':self.ID}) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:ID = %s"%(self.__class__.__name__, inspect.stack()[0][3], self.ID)) msg = error.formatMsg('error', error.ERROR_NO_155, 'delete failure!self.ID = %s, error = %s, trycnt = %d'%(self.ID, err, trycnt)) mylog.error(msg) return False return True def outputString(self): output = '''//¼Ò×å±í#tagFamilyInfo: ID = %s, Name = %s, LeaderID = %s, LeaderName = %s, LeaderOfficialRank = %s, Broadcast = %s, LV = %s, Money = %s, Hornor = %s, BillboardPlace = %s, AcceptJoin = %s, CreateTime = %s, Point = %s, FamilyActiveValue = %s, LastWeekFamilyActiveValue = %s, BeChallengedTime = %s, Extra1 = %s, Extra2 = %s, Extra3 = %s, Extra4 = %s, Extra5 = %s, Extra6 = %s, Extra7 = %s, Extra8 = %s, Extra9 = %s, Extra10 = %s, ServerID = %s, ADOResult = %s, '''%( self.ID, self.Name, self.LeaderID, self.LeaderName, self.LeaderOfficialRank, self.Broadcast, self.LV, self.Money, self.Hornor, self.BillboardPlace, self.AcceptJoin, self.CreateTime, self.Point, self.FamilyActiveValue, self.LastWeekFamilyActiveValue, self.BeChallengedTime, self.Extra1, self.Extra2, self.Extra3, self.Extra4, self.Extra5, self.Extra6, self.Extra7, self.Extra8, self.Extra9, self.Extra10, self.ServerID, self.ADOResult, ) return output def dumpString(self): output = '''%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s'''%( self.ID, self.Name, self.LeaderID, self.LeaderName, self.LeaderOfficialRank, self.Broadcast, self.LV, self.Money, self.Hornor, self.BillboardPlace, self.AcceptJoin, self.CreateTime, self.Point, self.FamilyActiveValue, self.LastWeekFamilyActiveValue, self.BeChallengedTime, self.Extra1, self.Extra2, self.Extra3, self.Extra4, self.Extra5, self.Extra6, self.Extra7, self.Extra8, self.Extra9, self.Extra10, self.ServerID, ) return output #CharÊý×éÀàÐÍSet½Ó¿Ú,ʹÓøýӿڶԴËÀàÐÍÊý¾Ý¸³Öµ£¬·ÀÖ¹¸³ÖµµÄÊý¾Ý¹ý³¤±¨´í def SetName(self,Str): if len(Str)<=33: self.Name = Str else: self.Name = Str[:33] def SetLeaderName(self,Str): if len(Str)<=33: self.LeaderName = Str else: self.LeaderName = Str[:33] def SetBroadcast(self,Str): if len(Str)<=200: self.Broadcast = Str else: self.Broadcast = Str[:200] def SetCreateTime(self,Str): if len(Str)<=30: self.CreateTime = Str else: self.CreateTime = Str[:30] def SetBeChallengedTime(self,Str): if len(Str)<=20: self.BeChallengedTime = Str else: self.BeChallengedTime = Str[:20] #------------------------------------------------------ #·þÎñÆ÷»î¶¯#tagGameWorldEvent class tagGameWorldEvent(Structure): _pack_ = 1 _fields_ = [ ('EventID', ctypes.c_ulong), ('StartTime', ctypes.c_char * 30), ('EndTime', ctypes.c_char * 30), ('IsProcessing', ctypes.c_ubyte), ('AccID', ctypes.c_char * 65), ('Par', ctypes.c_char * 201), ('ADOResult', ctypes.c_ulong), ] def __init__(self): Structure.__init__(self) self.clear() def clear(self): memset(addressof(self), 0, self.getLength()) def readData(self, buf, pos = 0, length = 0): if not pos <= length: msg = error.formatMsg('error', error.ERROR_NO_150, '(pos = %s)> (length = %s)'%(pos, length)) mylog.error(msg) return -1 if len(buf) < pos + self.getLength(): msg = error.formatMsg('error', error.ERROR_NO_151, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength())) mylog.error(msg) return -1 self.clear() memmove(addressof(self), buf[pos:], self.getLength()) return self.getLength() def getBuffer(self): buf = create_string_buffer(self.getLength()) memmove(addressof(buf), addressof(self), self.getLength()) return string_at(addressof(buf), self.getLength()) def getLength(self): return sizeof(tagGameWorldEvent) def getRecord(self): '''×éÖ¯´æ´¢¼Ç¼''' rec = {} rec[u'EventID'] = self.EventID rec[u'StartTime'] = fix_incomingText(self.StartTime) rec[u'EndTime'] = fix_incomingText(self.EndTime) rec[u'IsProcessing'] = self.IsProcessing rec[u'AccID'] = fix_incomingText(self.AccID) rec[u'Par'] = fix_incomingText(self.Par) return rec def readRecord(self, rec): '''ÓÉÓÚMongoDB¶Á³öÀ´ÊÇunicode,ËùÓÐ×Ö·û´®ÐèÒª½øÐÐת»»''' self.EventID = rec.get(u'EventID', 0) self.StartTime = fix_outgoingText(rec.get(u'StartTime', u'')) self.EndTime = fix_outgoingText(rec.get(u'EndTime', u'')) self.IsProcessing = rec.get(u'IsProcessing', 0) self.AccID = fix_outgoingText(rec.get(u'AccID', u'')) self.Par = fix_outgoingText(rec.get(u'Par', u'')) def adoLoad(self, collection): '''ʹÓÃKEY²éÕÒ²¢¶ÁÈ¡''' resultCollection = collection.find({'EventID':self.EventID}) if resultCollection.count() <= 0: return False #ÓÉÓÚÊÇKEY²éÕÒ£¬ËùÓÐÈç¹û´æÔÚ¾ÍÖ»ÓÐÒ»Ìõ¼Ç¼ rec = resultCollection[0] #¶ÁÈ¡Êý¾Ý self.readRecord(rec) return True def adoInsert(self, collection): '''Ö´ÐвåÈë''' trycnt = 0 rec = self.getRecord() while(True): try: collection.insert(rec, False, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_152, 'Insert failed!EventID = %s, error = %s, trycnt = %d'%(self.EventID, err, trycnt)) mylog.error(msg) return False return True def adoUpdate(self, collection): '''Ö´ÐиüÐÂ''' trycnt = 0 rec = self.getRecord() while(True): try: collection.update({'EventID':self.EventID}, {'$set':rec}, False, False, True, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_153, 'Update failed!EventID = %s, error = %s, trycnt = %d'%(self.EventID, err, trycnt)) mylog.error(msg) return False return True def adoUpdateEx(self, collection, spec): '''Ö´ÐиüÐÂ''' trycnt = 0 rec = self.getRecord() while(True): try: collection.update(spec, {'$set':rec}, False, False, True, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_154, 'Update failed!EventID = %s, error = %s, trycnt = %d'%(self.EventID, err, trycnt)) mylog.error(msg) return False return True def adoCheckUpdate(self, collection): '''¸ù¾ÝÇé¿öÖ´ÐвåÈë»ò¸üÐÂ''' resultCollection = collection.find({'EventID':self.EventID}) if resultCollection.count() <= 0: return self.adoInsert(collection) return self.adoUpdate(collection) def adoCheckUpdateEx(self, collection, spec): '''¸ù¾ÝÇé¿öÖ´ÐвåÈë»ò¸üÐÂ''' resultCollection = collection.find(spec) if resultCollection.count() <= 0: return self.adoInsert(collection) return self.adoUpdateEx(collection, spec) def getAdoRecords(self, resultCollection): '''²éѯ½á¹û´ò°ü³É¶þ½øÖÆÁ÷''' result = '' result = CommFunc.WriteDWORD(result, resultCollection.count()) for rec in resultCollection: self.readRecord(rec) result += self.getBuffer() return result def adoQueryIndex(self, collection): '''ÓÃË÷Òý×ֶβéÕÒ''' resultCollection = collection.find({'EventID':self.EventID}) return self.getAdoRecords(resultCollection) def adoQueryCustom(self, collection, queryDict): '''×Ô¶¨Òå²éѯ''' resultCollection = collection.find(queryDict) return self.getAdoRecords(resultCollection) def adoQueryAll(self, collection): '''²éѯËùÓÐ''' resultCollection = collection.find() return self.getAdoRecords(resultCollection) def adoDeleteByIndex(self, collection): '''¸ù¾ÝË÷Òýɾ³ý''' trycnt = 0 while(True): try: collection.remove({'EventID':self.EventID}) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:EventID = %s"%(self.__class__.__name__, inspect.stack()[0][3], self.EventID)) msg = error.formatMsg('error', error.ERROR_NO_155, 'delete failure!self.EventID = %s, error = %s, trycnt = %d'%(self.EventID, err, trycnt)) mylog.error(msg) return False return True def outputString(self): output = '''//·þÎñÆ÷»î¶¯#tagGameWorldEvent: EventID = %s, StartTime = %s, EndTime = %s, IsProcessing = %s, AccID = %s, Par = %s, ADOResult = %s, '''%( self.EventID, self.StartTime, self.EndTime, self.IsProcessing, self.AccID, self.Par, self.ADOResult, ) return output def dumpString(self): output = '''%1s\t%1s\t%1s\t%1s\t%1s\t%1s'''%( self.EventID, self.StartTime, self.EndTime, self.IsProcessing, self.AccID, self.Par, ) return output #CharÊý×éÀàÐÍSet½Ó¿Ú,ʹÓøýӿڶԴËÀàÐÍÊý¾Ý¸³Öµ£¬·ÀÖ¹¸³ÖµµÄÊý¾Ý¹ý³¤±¨´í def SetStartTime(self,Str): if len(Str)<=30: self.StartTime = Str else: self.StartTime = Str[:30] def SetEndTime(self,Str): if len(Str)<=30: self.EndTime = Str else: self.EndTime = Str[:30] def SetAccID(self,Str): if len(Str)<=65: self.AccID = Str else: self.AccID = Str[:65] def SetPar(self,Str): if len(Str)<=201: self.Par = Str else: self.Par = Str[:201] #------------------------------------------------------ #GM¶ÔÍæ¼ÒµÄ²Ù×÷#tagGMOper class tagGMOper(Structure): _pack_ = 1 _fields_ = [ ('PlayerID', ctypes.c_ulong), ('Oper', ctypes.c_ubyte), ('StartTime', ctypes.c_double), ('EndTime', ctypes.c_double), ('GMAccID', ctypes.c_char * 65), ('Msg', ctypes.c_char * 100), ('ADOResult', ctypes.c_ulong), ] def __init__(self): Structure.__init__(self) self.clear() def clear(self): memset(addressof(self), 0, self.getLength()) def readData(self, buf, pos = 0, length = 0): if not pos <= length: msg = error.formatMsg('error', error.ERROR_NO_150, '(pos = %s)> (length = %s)'%(pos, length)) mylog.error(msg) return -1 if len(buf) < pos + self.getLength(): msg = error.formatMsg('error', error.ERROR_NO_151, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength())) mylog.error(msg) return -1 self.clear() memmove(addressof(self), buf[pos:], self.getLength()) return self.getLength() def getBuffer(self): buf = create_string_buffer(self.getLength()) memmove(addressof(buf), addressof(self), self.getLength()) return string_at(addressof(buf), self.getLength()) def getLength(self): return sizeof(tagGMOper) def getRecord(self): '''×éÖ¯´æ´¢¼Ç¼''' rec = {} rec[u'PlayerID'] = self.PlayerID rec[u'Oper'] = self.Oper rec[u'StartTime'] = self.StartTime rec[u'EndTime'] = self.EndTime rec[u'GMAccID'] = fix_incomingText(self.GMAccID) rec[u'Msg'] = fix_incomingText(self.Msg) return rec def readRecord(self, rec): '''ÓÉÓÚMongoDB¶Á³öÀ´ÊÇunicode,ËùÓÐ×Ö·û´®ÐèÒª½øÐÐת»»''' self.PlayerID = rec.get(u'PlayerID', 0) self.Oper = rec.get(u'Oper', 0) self.StartTime = rec.get(u'StartTime', 0) self.EndTime = rec.get(u'EndTime', 0) self.GMAccID = fix_outgoingText(rec.get(u'GMAccID', u'')) self.Msg = fix_outgoingText(rec.get(u'Msg', u'')) #Can not implement adoLoadStr method:No key defined! def adoInsert(self, collection): '''Ö´ÐвåÈë''' trycnt = 0 rec = self.getRecord() while(True): try: collection.insert(rec, False, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_152, 'Insert failed!PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True #Can not implement adoUpdateStr method:No key defined! def adoUpdateEx(self, collection, spec): '''Ö´ÐиüÐÂ''' trycnt = 0 rec = self.getRecord() while(True): try: collection.update(spec, {'$set':rec}, False, False, True, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_154, 'Update failed!PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True #Can not implement adoCheckUpdateStr method:No key defined! #Can not implement adoCheckUpdateExStr method:No key defined! def getAdoRecords(self, resultCollection): '''²éѯ½á¹û´ò°ü³É¶þ½øÖÆÁ÷''' result = '' result = CommFunc.WriteDWORD(result, resultCollection.count()) for rec in resultCollection: self.readRecord(rec) result += self.getBuffer() return result def adoQueryIndex(self, collection): '''ÓÃË÷Òý×ֶβéÕÒ''' resultCollection = collection.find({'PlayerID':self.PlayerID}) return self.getAdoRecords(resultCollection) def adoQueryCustom(self, collection, queryDict): '''×Ô¶¨Òå²éѯ''' resultCollection = collection.find(queryDict) return self.getAdoRecords(resultCollection) def adoQueryAll(self, collection): '''²éѯËùÓÐ''' resultCollection = collection.find() return self.getAdoRecords(resultCollection) def adoDeleteByIndex(self, collection): '''¸ù¾ÝË÷Òýɾ³ý''' trycnt = 0 while(True): try: collection.remove({'PlayerID':self.PlayerID}) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:PlayerID = %s"%(self.__class__.__name__, inspect.stack()[0][3], self.PlayerID)) msg = error.formatMsg('error', error.ERROR_NO_155, 'delete failure!self.PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True def outputString(self): output = '''//GM¶ÔÍæ¼ÒµÄ²Ù×÷#tagGMOper: PlayerID = %s, Oper = %s, StartTime = %s, EndTime = %s, GMAccID = %s, Msg = %s, ADOResult = %s, '''%( self.PlayerID, self.Oper, self.StartTime, self.EndTime, self.GMAccID, self.Msg, self.ADOResult, ) return output def dumpString(self): output = '''%1s\t%1s\t%1s\t%1s\t%1s\t%1s'''%( self.PlayerID, self.Oper, self.StartTime, self.EndTime, self.GMAccID, self.Msg, ) return output #CharÊý×éÀàÐÍSet½Ó¿Ú,ʹÓøýӿڶԴËÀàÐÍÊý¾Ý¸³Öµ£¬·ÀÖ¹¸³ÖµµÄÊý¾Ý¹ý³¤±¨´í def SetGMAccID(self,Str): if len(Str)<=65: self.GMAccID = Str else: self.GMAccID = Str[:65] def SetMsg(self,Str): if len(Str)<=100: self.Msg = Str else: self.Msg = Str[:100] #------------------------------------------------------ #³èÎï²¹³¥±í#tagPetExpiation class tagPetExpiation(Structure): _pack_ = 1 _fields_ = [ ('ExpiationIndex', ctypes.c_ulong), ('AccID', ctypes.c_char * 65), ('ExpiationTime', ctypes.c_double), ('NPCID', ctypes.c_ulong), ('Lv', ctypes.c_ushort), ('Exp', ctypes.c_ulong), ('Friendliness', ctypes.c_ushort), ('BindType', ctypes.c_ubyte), ('UseCreatorDrugCnt', ctypes.c_ubyte), ('SkillIDList', ctypes.c_char * 300), ('HPTalent', ctypes.c_ushort), ('PhysicAtkTalent', ctypes.c_ushort), ('MagicAtkTalent', ctypes.c_ushort), ('PhysicDefTalent', ctypes.c_ushort), ('MagicDefTalent', ctypes.c_ushort), ('ADOResult', ctypes.c_ulong), ] def __init__(self): Structure.__init__(self) self.clear() def clear(self): memset(addressof(self), 0, self.getLength()) def readData(self, buf, pos = 0, length = 0): if not pos <= length: msg = error.formatMsg('error', error.ERROR_NO_150, '(pos = %s)> (length = %s)'%(pos, length)) mylog.error(msg) return -1 if len(buf) < pos + self.getLength(): msg = error.formatMsg('error', error.ERROR_NO_151, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength())) mylog.error(msg) return -1 self.clear() memmove(addressof(self), buf[pos:], self.getLength()) return self.getLength() def getBuffer(self): buf = create_string_buffer(self.getLength()) memmove(addressof(buf), addressof(self), self.getLength()) return string_at(addressof(buf), self.getLength()) def getLength(self): return sizeof(tagPetExpiation) def getRecord(self): '''×éÖ¯´æ´¢¼Ç¼''' rec = {} rec[u'ExpiationIndex'] = self.ExpiationIndex rec[u'AccID'] = fix_incomingText(self.AccID) rec[u'ExpiationTime'] = self.ExpiationTime rec[u'NPCID'] = self.NPCID rec[u'Lv'] = self.Lv rec[u'Exp'] = self.Exp rec[u'Friendliness'] = self.Friendliness rec[u'BindType'] = self.BindType rec[u'UseCreatorDrugCnt'] = self.UseCreatorDrugCnt rec[u'SkillIDList'] = fix_incomingText(self.SkillIDList) rec[u'HPTalent'] = self.HPTalent rec[u'PhysicAtkTalent'] = self.PhysicAtkTalent rec[u'MagicAtkTalent'] = self.MagicAtkTalent rec[u'PhysicDefTalent'] = self.PhysicDefTalent rec[u'MagicDefTalent'] = self.MagicDefTalent return rec def readRecord(self, rec): '''ÓÉÓÚMongoDB¶Á³öÀ´ÊÇunicode,ËùÓÐ×Ö·û´®ÐèÒª½øÐÐת»»''' self.ExpiationIndex = rec.get(u'ExpiationIndex', 0) self.AccID = fix_outgoingText(rec.get(u'AccID', u'')) self.ExpiationTime = rec.get(u'ExpiationTime', 0) self.NPCID = rec.get(u'NPCID', 0) self.Lv = rec.get(u'Lv', 0) self.Exp = rec.get(u'Exp', 0) self.Friendliness = rec.get(u'Friendliness', 0) self.BindType = rec.get(u'BindType', 0) self.UseCreatorDrugCnt = rec.get(u'UseCreatorDrugCnt', 0) self.SkillIDList = fix_outgoingText(rec.get(u'SkillIDList', u'')) self.HPTalent = rec.get(u'HPTalent', 0) self.PhysicAtkTalent = rec.get(u'PhysicAtkTalent', 0) self.MagicAtkTalent = rec.get(u'MagicAtkTalent', 0) self.PhysicDefTalent = rec.get(u'PhysicDefTalent', 0) self.MagicDefTalent = rec.get(u'MagicDefTalent', 0) def adoLoad(self, collection): '''ʹÓÃKEY²éÕÒ²¢¶ÁÈ¡''' resultCollection = collection.find({'ExpiationIndex':self.ExpiationIndex}) if resultCollection.count() <= 0: return False #ÓÉÓÚÊÇKEY²éÕÒ£¬ËùÓÐÈç¹û´æÔÚ¾ÍÖ»ÓÐÒ»Ìõ¼Ç¼ rec = resultCollection[0] #¶ÁÈ¡Êý¾Ý self.readRecord(rec) return True def adoInsert(self, collection): '''Ö´ÐвåÈë''' trycnt = 0 rec = self.getRecord() while(True): try: collection.insert(rec, False, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_152, 'Insert failed!AccID = %s, error = %s, trycnt = %d'%(self.AccID, err, trycnt)) mylog.error(msg) return False return True def adoUpdate(self, collection): '''Ö´ÐиüÐÂ''' trycnt = 0 rec = self.getRecord() while(True): try: collection.update({'ExpiationIndex':self.ExpiationIndex}, {'$set':rec}, False, False, True, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_153, 'Update failed!AccID = %s, error = %s, trycnt = %d'%(self.AccID, err, trycnt)) mylog.error(msg) return False return True def adoUpdateEx(self, collection, spec): '''Ö´ÐиüÐÂ''' trycnt = 0 rec = self.getRecord() while(True): try: collection.update(spec, {'$set':rec}, False, False, True, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_154, 'Update failed!AccID = %s, error = %s, trycnt = %d'%(self.AccID, err, trycnt)) mylog.error(msg) return False return True def adoCheckUpdate(self, collection): '''¸ù¾ÝÇé¿öÖ´ÐвåÈë»ò¸üÐÂ''' resultCollection = collection.find({'ExpiationIndex':self.ExpiationIndex}) if resultCollection.count() <= 0: return self.adoInsert(collection) return self.adoUpdate(collection) def adoCheckUpdateEx(self, collection, spec): '''¸ù¾ÝÇé¿öÖ´ÐвåÈë»ò¸üÐÂ''' resultCollection = collection.find(spec) if resultCollection.count() <= 0: return self.adoInsert(collection) return self.adoUpdateEx(collection, spec) def getAdoRecords(self, resultCollection): '''²éѯ½á¹û´ò°ü³É¶þ½øÖÆÁ÷''' result = '' result = CommFunc.WriteDWORD(result, resultCollection.count()) for rec in resultCollection: self.readRecord(rec) result += self.getBuffer() return result def adoQueryIndex(self, collection): '''ÓÃË÷Òý×ֶβéÕÒ''' resultCollection = collection.find({'AccID':fix_incomingText(self.AccID)}) return self.getAdoRecords(resultCollection) def adoQueryCustom(self, collection, queryDict): '''×Ô¶¨Òå²éѯ''' resultCollection = collection.find(queryDict) return self.getAdoRecords(resultCollection) def adoQueryAll(self, collection): '''²éѯËùÓÐ''' resultCollection = collection.find() return self.getAdoRecords(resultCollection) def adoDeleteByIndex(self, collection): '''¸ù¾ÝË÷Òýɾ³ý''' trycnt = 0 while(True): try: collection.remove({'AccID':fix_incomingText(self.AccID)}) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:AccID = %s"%(self.__class__.__name__, inspect.stack()[0][3], self.AccID)) msg = error.formatMsg('error', error.ERROR_NO_155, 'delete failure!self.AccID = %s, error = %s, trycnt = %d'%(self.AccID, err, trycnt)) mylog.error(msg) return False return True def outputString(self): output = '''//³èÎï²¹³¥±í#tagPetExpiation: ExpiationIndex = %s, AccID = %s, ExpiationTime = %s, NPCID = %s, Lv = %s, Exp = %s, Friendliness = %s, BindType = %s, UseCreatorDrugCnt = %s, SkillIDList = %s, HPTalent = %s, PhysicAtkTalent = %s, MagicAtkTalent = %s, PhysicDefTalent = %s, MagicDefTalent = %s, ADOResult = %s, '''%( self.ExpiationIndex, self.AccID, self.ExpiationTime, self.NPCID, self.Lv, self.Exp, self.Friendliness, self.BindType, self.UseCreatorDrugCnt, self.SkillIDList, self.HPTalent, self.PhysicAtkTalent, self.MagicAtkTalent, self.PhysicDefTalent, self.MagicDefTalent, self.ADOResult, ) return output def dumpString(self): output = '''%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s'''%( self.ExpiationIndex, self.AccID, self.ExpiationTime, self.NPCID, self.Lv, self.Exp, self.Friendliness, self.BindType, self.UseCreatorDrugCnt, self.SkillIDList, self.HPTalent, self.PhysicAtkTalent, self.MagicAtkTalent, self.PhysicDefTalent, self.MagicDefTalent, ) return output #CharÊý×éÀàÐÍSet½Ó¿Ú,ʹÓøýӿڶԴËÀàÐÍÊý¾Ý¸³Öµ£¬·ÀÖ¹¸³ÖµµÄÊý¾Ý¹ý³¤±¨´í def SetAccID(self,Str): if len(Str)<=65: self.AccID = Str else: self.AccID = Str[:65] def SetSkillIDList(self,Str): if len(Str)<=300: self.SkillIDList = Str else: self.SkillIDList = Str[:300] #------------------------------------------------------ #Íæ¼Ò³èÎï¼¼Äܱí#tagPetSkill class tagPetSkill(Structure): _pack_ = 1 _fields_ = [ ('PetID', ctypes.c_ulong), ('PlayerID', ctypes.c_ulong), ('SkillID', ctypes.c_ushort), ('RemainTime', ctypes.c_ulong), ('ADOResult', ctypes.c_ulong), ] def __init__(self): Structure.__init__(self) self.clear() def clear(self): memset(addressof(self), 0, self.getLength()) def readData(self, buf, pos = 0, length = 0): if not pos <= length: msg = error.formatMsg('error', error.ERROR_NO_150, '(pos = %s)> (length = %s)'%(pos, length)) mylog.error(msg) return -1 if len(buf) < pos + self.getLength(): msg = error.formatMsg('error', error.ERROR_NO_151, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength())) mylog.error(msg) return -1 self.clear() memmove(addressof(self), buf[pos:], self.getLength()) return self.getLength() def getBuffer(self): buf = create_string_buffer(self.getLength()) memmove(addressof(buf), addressof(self), self.getLength()) return string_at(addressof(buf), self.getLength()) def getLength(self): return sizeof(tagPetSkill) def getRecord(self): '''×éÖ¯´æ´¢¼Ç¼''' rec = {} rec[u'PetID'] = self.PetID rec[u'PlayerID'] = self.PlayerID rec[u'SkillID'] = self.SkillID rec[u'RemainTime'] = self.RemainTime return rec def readRecord(self, rec): '''ÓÉÓÚMongoDB¶Á³öÀ´ÊÇunicode,ËùÓÐ×Ö·û´®ÐèÒª½øÐÐת»»''' self.PetID = rec.get(u'PetID', 0) self.PlayerID = rec.get(u'PlayerID', 0) self.SkillID = rec.get(u'SkillID', 0) self.RemainTime = rec.get(u'RemainTime', 0) def adoLoad(self, collection): '''ʹÓÃKEY²éÕÒ²¢¶ÁÈ¡''' resultCollection = collection.find({'PetID':self.PetID,'SkillID':self.SkillID,}) if resultCollection.count() <= 0: return False #ÓÉÓÚÊÇKEY²éÕÒ£¬ËùÓÐÈç¹û´æÔÚ¾ÍÖ»ÓÐÒ»Ìõ¼Ç¼ rec = resultCollection[0] #¶ÁÈ¡Êý¾Ý self.readRecord(rec) return True def adoInsert(self, collection): '''Ö´ÐвåÈë''' trycnt = 0 rec = self.getRecord() while(True): try: collection.insert(rec, False, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_152, 'Insert failed!PetID = %s, error = %s, trycnt = %d'%(self.PetID, err, trycnt)) mylog.error(msg) return False return True def adoUpdate(self, collection): '''Ö´ÐиüÐÂ''' trycnt = 0 rec = self.getRecord() while(True): try: collection.update({'PetID':self.PetID,'SkillID':self.SkillID,}, {'$set':rec}, False, False, True, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_153, 'Update failed!PetID = %s, error = %s, trycnt = %d'%(self.PetID, err, trycnt)) mylog.error(msg) return False return True def adoUpdateEx(self, collection, spec): '''Ö´ÐиüÐÂ''' trycnt = 0 rec = self.getRecord() while(True): try: collection.update(spec, {'$set':rec}, False, False, True, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_154, 'Update failed!PetID = %s, error = %s, trycnt = %d'%(self.PetID, err, trycnt)) mylog.error(msg) return False return True def adoCheckUpdate(self, collection): '''¸ù¾ÝÇé¿öÖ´ÐвåÈë»ò¸üÐÂ''' resultCollection = collection.find({'PetID':self.PetID,'SkillID':self.SkillID,}) if resultCollection.count() <= 0: return self.adoInsert(collection) return self.adoUpdate(collection) def adoCheckUpdateEx(self, collection, spec): '''¸ù¾ÝÇé¿öÖ´ÐвåÈë»ò¸üÐÂ''' resultCollection = collection.find(spec) if resultCollection.count() <= 0: return self.adoInsert(collection) return self.adoUpdateEx(collection, spec) def getAdoRecords(self, resultCollection): '''²éѯ½á¹û´ò°ü³É¶þ½øÖÆÁ÷''' result = '' result = CommFunc.WriteDWORD(result, resultCollection.count()) for rec in resultCollection: self.readRecord(rec) result += self.getBuffer() return result def adoQueryIndex(self, collection): '''ÓÃË÷Òý×ֶβéÕÒ''' resultCollection = collection.find({'PetID':self.PetID}) return self.getAdoRecords(resultCollection) def adoQueryCustom(self, collection, queryDict): '''×Ô¶¨Òå²éѯ''' resultCollection = collection.find(queryDict) return self.getAdoRecords(resultCollection) def adoQueryAll(self, collection): '''²éѯËùÓÐ''' resultCollection = collection.find() return self.getAdoRecords(resultCollection) def adoDeleteByIndex(self, collection): '''¸ù¾ÝË÷Òýɾ³ý''' trycnt = 0 while(True): try: collection.remove({'PetID':self.PetID}) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:PetID = %s"%(self.__class__.__name__, inspect.stack()[0][3], self.PetID)) msg = error.formatMsg('error', error.ERROR_NO_155, 'delete failure!self.PetID = %s, error = %s, trycnt = %d'%(self.PetID, err, trycnt)) mylog.error(msg) return False return True def outputString(self): output = '''//Íæ¼Ò³èÎï¼¼Äܱí#tagPetSkill: PetID = %s, PlayerID = %s, SkillID = %s, RemainTime = %s, ADOResult = %s, '''%( self.PetID, self.PlayerID, self.SkillID, self.RemainTime, self.ADOResult, ) return output def dumpString(self): output = '''%1s\t%1s\t%1s\t%1s'''%( self.PetID, self.PlayerID, self.SkillID, self.RemainTime, ) return output #------------------------------------------------------ #Íæ¼Ò¼Ò×å±í#tagPlayerFamily class tagPlayerFamily(Structure): _pack_ = 1 _fields_ = [ ('PlayerID', ctypes.c_ulong), ('FamilyID', ctypes.c_ulong), ('Name', ctypes.c_char * 33), ('Sex', ctypes.c_ubyte), ('LV', ctypes.c_ushort), ('Job', ctypes.c_ubyte), ('Face', ctypes.c_ulong), ('FacePic', ctypes.c_ulong), ('FamilyLV', ctypes.c_ubyte), ('FamilyName', ctypes.c_char * 33), ('FamilyActiveValue', ctypes.c_ulong), ('OfficialRank', ctypes.c_ubyte), ('Exattr1', ctypes.c_ulong), ('Exattr2', ctypes.c_ulong), ('Exattr3', ctypes.c_ulong), ('Exattr4', ctypes.c_ulong), ('Exattr5', ctypes.c_ulong), ('Exattr6', ctypes.c_ulong), ('Exattr7', ctypes.c_ulong), ('Exattr8', ctypes.c_ulong), ('ReincarnationLv', ctypes.c_ushort), ('OperateInfo', ctypes.c_ulong), ('ADOResult', ctypes.c_ulong), ] def __init__(self): Structure.__init__(self) self.clear() def clear(self): memset(addressof(self), 0, self.getLength()) def readData(self, buf, pos = 0, length = 0): if not pos <= length: msg = error.formatMsg('error', error.ERROR_NO_148, '(pos = %s) > (length = %s)'%(pos, length)) mylog.error(msg) return -1 if len(buf) < pos + self.getLength(): msg = error.formatMsg('error', error.ERROR_NO_149, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength())) mylog.error(msg) self.clear() self.PlayerID, pos = CommFunc.ReadDWORD(buf, pos) self.FamilyID, pos = CommFunc.ReadDWORD(buf, pos) self.Name, pos = CommFunc.ReadString(buf, pos, 33) self.Sex, pos = CommFunc.ReadBYTE(buf, pos) self.LV, pos = CommFunc.ReadWORD(buf, pos) self.Job, pos = CommFunc.ReadBYTE(buf, pos) self.Face, pos = CommFunc.ReadDWORD(buf, pos) self.FacePic, pos = CommFunc.ReadDWORD(buf, pos) self.FamilyLV, pos = CommFunc.ReadBYTE(buf, pos) self.FamilyName, pos = CommFunc.ReadString(buf, pos, 33) self.FamilyActiveValue, pos = CommFunc.ReadDWORD(buf, pos) self.OfficialRank, pos = CommFunc.ReadBYTE(buf, pos) self.Exattr1, pos = CommFunc.ReadDWORD(buf, pos) self.Exattr2, pos = CommFunc.ReadDWORD(buf, pos) self.Exattr3, pos = CommFunc.ReadDWORD(buf, pos) self.Exattr4, pos = CommFunc.ReadDWORD(buf, pos) self.Exattr5, pos = CommFunc.ReadDWORD(buf, pos) self.Exattr6, pos = CommFunc.ReadDWORD(buf, pos) self.Exattr7, pos = CommFunc.ReadDWORD(buf, pos) self.Exattr8, pos = CommFunc.ReadDWORD(buf, pos) self.ReincarnationLv, pos = CommFunc.ReadWORD(buf, pos) self.OperateInfo, pos = CommFunc.ReadDWORD(buf, pos) return self.getLength() def getBuffer(self): buf = create_string_buffer(self.getLength()) memmove(addressof(buf), addressof(self), self.getLength()) return string_at(addressof(buf), self.getLength()) def getLength(self): return sizeof(tagPlayerFamily) def getRecord(self): '''×éÖ¯´æ´¢¼Ç¼''' rec = {} rec[u'PlayerID'] = self.PlayerID rec[u'FamilyID'] = self.FamilyID rec[u'Name'] = fix_incomingText(self.Name) rec[u'Sex'] = self.Sex rec[u'LV'] = self.LV rec[u'Job'] = self.Job rec[u'Face'] = self.Face rec[u'FacePic'] = self.FacePic rec[u'FamilyLV'] = self.FamilyLV rec[u'FamilyName'] = fix_incomingText(self.FamilyName) rec[u'FamilyActiveValue'] = self.FamilyActiveValue rec[u'OfficialRank'] = self.OfficialRank rec[u'Exattr1'] = self.Exattr1 rec[u'Exattr2'] = self.Exattr2 rec[u'Exattr3'] = self.Exattr3 rec[u'Exattr4'] = self.Exattr4 rec[u'Exattr5'] = self.Exattr5 rec[u'Exattr6'] = self.Exattr6 rec[u'Exattr7'] = self.Exattr7 rec[u'Exattr8'] = self.Exattr8 rec[u'ReincarnationLv'] = self.ReincarnationLv rec[u'OperateInfo'] = self.OperateInfo return rec def readRecord(self, rec): '''ÓÉÓÚMongoDB¶Á³öÀ´ÊÇunicode,ËùÓÐ×Ö·û´®ÐèÒª½øÐÐת»»''' self.PlayerID = rec.get(u'PlayerID', 0) self.FamilyID = rec.get(u'FamilyID', 0) self.Name = fix_outgoingText(rec.get(u'Name', u'')) self.Sex = rec.get(u'Sex', 0) self.LV = rec.get(u'LV', 0) self.Job = rec.get(u'Job', 0) self.Face = rec.get(u'Face', 0) self.FacePic = rec.get(u'FacePic', 0) self.FamilyLV = rec.get(u'FamilyLV', 0) self.FamilyName = fix_outgoingText(rec.get(u'FamilyName', u'')) self.FamilyActiveValue = rec.get(u'FamilyActiveValue', 0) self.OfficialRank = rec.get(u'OfficialRank', 0) self.Exattr1 = rec.get(u'Exattr1', 0) self.Exattr2 = rec.get(u'Exattr2', 0) self.Exattr3 = rec.get(u'Exattr3', 0) self.Exattr4 = rec.get(u'Exattr4', 0) self.Exattr5 = rec.get(u'Exattr5', 0) self.Exattr6 = rec.get(u'Exattr6', 0) self.Exattr7 = rec.get(u'Exattr7', 0) self.Exattr8 = rec.get(u'Exattr8', 0) self.ReincarnationLv = rec.get(u'ReincarnationLv', 0) self.OperateInfo = rec.get(u'OperateInfo', 0) def adoLoad(self, collection): '''ʹÓÃKEY²éÕÒ²¢¶ÁÈ¡''' resultCollection = collection.find({'PlayerID':self.PlayerID}) if resultCollection.count() <= 0: return False #ÓÉÓÚÊÇKEY²éÕÒ£¬ËùÓÐÈç¹û´æÔÚ¾ÍÖ»ÓÐÒ»Ìõ¼Ç¼ rec = resultCollection[0] #¶ÁÈ¡Êý¾Ý self.readRecord(rec) return True def adoInsert(self, collection): '''Ö´ÐвåÈë''' trycnt = 0 rec = self.getRecord() while(True): try: collection.insert(rec, False, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_152, 'Insert failed!PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True def adoUpdate(self, collection): '''Ö´ÐиüÐÂ''' trycnt = 0 rec = self.getRecord() while(True): try: collection.update({'PlayerID':self.PlayerID}, {'$set':rec}, False, False, True, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_153, 'Update failed!PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True def adoUpdateEx(self, collection, spec): '''Ö´ÐиüÐÂ''' trycnt = 0 rec = self.getRecord() while(True): try: collection.update(spec, {'$set':rec}, False, False, True, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_154, 'Update failed!PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True def adoCheckUpdate(self, collection): '''¸ù¾ÝÇé¿öÖ´ÐвåÈë»ò¸üÐÂ''' resultCollection = collection.find({'PlayerID':self.PlayerID}) if resultCollection.count() <= 0: return self.adoInsert(collection) return self.adoUpdate(collection) def adoCheckUpdateEx(self, collection, spec): '''¸ù¾ÝÇé¿öÖ´ÐвåÈë»ò¸üÐÂ''' resultCollection = collection.find(spec) if resultCollection.count() <= 0: return self.adoInsert(collection) return self.adoUpdateEx(collection, spec) def getAdoRecords(self, resultCollection): '''²éѯ½á¹û´ò°ü³É¶þ½øÖÆÁ÷''' result = '' result = CommFunc.WriteDWORD(result, resultCollection.count()) for rec in resultCollection: self.readRecord(rec) result += self.getBuffer() return result def adoQueryIndex(self, collection): '''ÓÃË÷Òý×ֶβéÕÒ''' resultCollection = collection.find({'PlayerID':self.PlayerID}) return self.getAdoRecords(resultCollection) def adoQueryCustom(self, collection, queryDict): '''×Ô¶¨Òå²éѯ''' resultCollection = collection.find(queryDict) return self.getAdoRecords(resultCollection) def adoQueryAll(self, collection): '''²éѯËùÓÐ''' resultCollection = collection.find() return self.getAdoRecords(resultCollection) def adoDeleteByIndex(self, collection): '''¸ù¾ÝË÷Òýɾ³ý''' trycnt = 0 while(True): try: collection.remove({'PlayerID':self.PlayerID}) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:PlayerID = %s"%(self.__class__.__name__, inspect.stack()[0][3], self.PlayerID)) msg = error.formatMsg('error', error.ERROR_NO_155, 'delete failure!self.PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True def outputString(self): output = '''//Íæ¼Ò¼Ò×å±í#tagPlayerFamily: PlayerID = %s, FamilyID = %s, Name = %s, Sex = %s, LV = %s, Job = %s, Face = %s, FacePic = %s, FamilyLV = %s, FamilyName = %s, FamilyActiveValue = %s, OfficialRank = %s, Exattr1 = %s, Exattr2 = %s, Exattr3 = %s, Exattr4 = %s, Exattr5 = %s, Exattr6 = %s, Exattr7 = %s, Exattr8 = %s, ReincarnationLv = %s, OperateInfo = %s, ADOResult = %s, '''%( self.PlayerID, self.FamilyID, self.Name, self.Sex, self.LV, self.Job, self.Face, self.FacePic, self.FamilyLV, self.FamilyName, self.FamilyActiveValue, self.OfficialRank, self.Exattr1, self.Exattr2, self.Exattr3, self.Exattr4, self.Exattr5, self.Exattr6, self.Exattr7, self.Exattr8, self.ReincarnationLv, self.OperateInfo, self.ADOResult, ) return output def dumpString(self): output = '''%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s'''%( self.PlayerID, self.FamilyID, self.Name, self.Sex, self.LV, self.Job, self.Face, self.FacePic, self.FamilyLV, self.FamilyName, self.FamilyActiveValue, self.OfficialRank, self.Exattr1, self.Exattr2, self.Exattr3, self.Exattr4, self.Exattr5, self.Exattr6, self.Exattr7, self.Exattr8, self.ReincarnationLv, self.OperateInfo, ) return output #CharÊý×éÀàÐÍSet½Ó¿Ú,ʹÓøýӿڶԴËÀàÐÍÊý¾Ý¸³Öµ£¬·ÀÖ¹¸³ÖµµÄÊý¾Ý¹ý³¤±¨´í def SetName(self,Str): if len(Str)<=33: self.Name = Str else: self.Name = Str[:33] def SetFamilyName(self,Str): if len(Str)<=33: self.FamilyName = Str else: self.FamilyName = Str[:33] #------------------------------------------------------ #Íæ¼Òæô³µÂíÆ¥±í#tagPlayerHorseTable class tagPlayerHorseTable(Structure): _pack_ = 1 _fields_ = [ ('PlayerID', ctypes.c_ulong), ('TruckID', ctypes.c_ulong), ('EventID', ctypes.c_ulong), ('HorseLV', ctypes.c_ubyte), ('RemainTime', ctypes.c_ulong), ('TruckState', ctypes.c_ubyte), ('TruckMoney', ctypes.c_ulong), ('TruckMoneyType', ctypes.c_ubyte), ('ADOResult', ctypes.c_ulong), ] def __init__(self): Structure.__init__(self) self.clear() def clear(self): memset(addressof(self), 0, self.getLength()) def readData(self, buf, pos = 0, length = 0): if not pos <= length: msg = error.formatMsg('error', error.ERROR_NO_150, '(pos = %s)> (length = %s)'%(pos, length)) mylog.error(msg) return -1 if len(buf) < pos + self.getLength(): msg = error.formatMsg('error', error.ERROR_NO_151, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength())) mylog.error(msg) return -1 self.clear() memmove(addressof(self), buf[pos:], self.getLength()) return self.getLength() def getBuffer(self): buf = create_string_buffer(self.getLength()) memmove(addressof(buf), addressof(self), self.getLength()) return string_at(addressof(buf), self.getLength()) def getLength(self): return sizeof(tagPlayerHorseTable) def getRecord(self): '''×éÖ¯´æ´¢¼Ç¼''' rec = {} rec[u'PlayerID'] = self.PlayerID rec[u'TruckID'] = self.TruckID rec[u'EventID'] = self.EventID rec[u'HorseLV'] = self.HorseLV rec[u'RemainTime'] = self.RemainTime rec[u'TruckState'] = self.TruckState rec[u'TruckMoney'] = self.TruckMoney rec[u'TruckMoneyType'] = self.TruckMoneyType return rec def readRecord(self, rec): '''ÓÉÓÚMongoDB¶Á³öÀ´ÊÇunicode,ËùÓÐ×Ö·û´®ÐèÒª½øÐÐת»»''' self.PlayerID = rec.get(u'PlayerID', 0) self.TruckID = rec.get(u'TruckID', 0) self.EventID = rec.get(u'EventID', 0) self.HorseLV = rec.get(u'HorseLV', 0) self.RemainTime = rec.get(u'RemainTime', 0) self.TruckState = rec.get(u'TruckState', 0) self.TruckMoney = rec.get(u'TruckMoney', 0) self.TruckMoneyType = rec.get(u'TruckMoneyType', 0) #Can not implement adoLoadStr method:No key defined! def adoInsert(self, collection): '''Ö´ÐвåÈë''' trycnt = 0 rec = self.getRecord() while(True): try: collection.insert(rec, False, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_152, 'Insert failed!PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True #Can not implement adoUpdateStr method:No key defined! def adoUpdateEx(self, collection, spec): '''Ö´ÐиüÐÂ''' trycnt = 0 rec = self.getRecord() while(True): try: collection.update(spec, {'$set':rec}, False, False, True, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_154, 'Update failed!PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True #Can not implement adoCheckUpdateStr method:No key defined! #Can not implement adoCheckUpdateExStr method:No key defined! def getAdoRecords(self, resultCollection): '''²éѯ½á¹û´ò°ü³É¶þ½øÖÆÁ÷''' result = '' result = CommFunc.WriteDWORD(result, resultCollection.count()) for rec in resultCollection: self.readRecord(rec) result += self.getBuffer() return result def adoQueryIndex(self, collection): '''ÓÃË÷Òý×ֶβéÕÒ''' resultCollection = collection.find({'PlayerID':self.PlayerID}) return self.getAdoRecords(resultCollection) def adoQueryCustom(self, collection, queryDict): '''×Ô¶¨Òå²éѯ''' resultCollection = collection.find(queryDict) return self.getAdoRecords(resultCollection) def adoQueryAll(self, collection): '''²éѯËùÓÐ''' resultCollection = collection.find() return self.getAdoRecords(resultCollection) def adoDeleteByIndex(self, collection): '''¸ù¾ÝË÷Òýɾ³ý''' trycnt = 0 while(True): try: collection.remove({'PlayerID':self.PlayerID}) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:PlayerID = %s"%(self.__class__.__name__, inspect.stack()[0][3], self.PlayerID)) msg = error.formatMsg('error', error.ERROR_NO_155, 'delete failure!self.PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True def outputString(self): output = '''//Íæ¼Òæô³µÂíÆ¥±í#tagPlayerHorseTable: PlayerID = %s, TruckID = %s, EventID = %s, HorseLV = %s, RemainTime = %s, TruckState = %s, TruckMoney = %s, TruckMoneyType = %s, ADOResult = %s, '''%( self.PlayerID, self.TruckID, self.EventID, self.HorseLV, self.RemainTime, self.TruckState, self.TruckMoney, self.TruckMoneyType, self.ADOResult, ) return output def dumpString(self): output = '''%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s'''%( self.PlayerID, self.TruckID, self.EventID, self.HorseLV, self.RemainTime, self.TruckState, self.TruckMoney, self.TruckMoneyType, ) return output #------------------------------------------------------ #Íæ¼Ò¶ÓÎé±í#tagPlayerTeamTable class tagPlayerTeamTable(Structure): _pack_ = 1 _fields_ = [ ('TeamID', ctypes.c_ulong), ('TeamType', ctypes.c_ubyte), ('TagMapID', ctypes.c_ulong), ('TagMapEx', ctypes.c_ushort), ('ReqMinLV', ctypes.c_ushort), ('ReqMaxLV', ctypes.c_ushort), ('ADOResult', ctypes.c_ulong), ] def __init__(self): Structure.__init__(self) self.clear() def clear(self): memset(addressof(self), 0, self.getLength()) def readData(self, buf, pos = 0, length = 0): if not pos <= length: msg = error.formatMsg('error', error.ERROR_NO_150, '(pos = %s)> (length = %s)'%(pos, length)) mylog.error(msg) return -1 if len(buf) < pos + self.getLength(): msg = error.formatMsg('error', error.ERROR_NO_151, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength())) mylog.error(msg) return -1 self.clear() memmove(addressof(self), buf[pos:], self.getLength()) return self.getLength() def getBuffer(self): buf = create_string_buffer(self.getLength()) memmove(addressof(buf), addressof(self), self.getLength()) return string_at(addressof(buf), self.getLength()) def getLength(self): return sizeof(tagPlayerTeamTable) def getRecord(self): '''×éÖ¯´æ´¢¼Ç¼''' rec = {} rec[u'TeamID'] = self.TeamID rec[u'TeamType'] = self.TeamType rec[u'TagMapID'] = self.TagMapID rec[u'TagMapEx'] = self.TagMapEx rec[u'ReqMinLV'] = self.ReqMinLV rec[u'ReqMaxLV'] = self.ReqMaxLV return rec def readRecord(self, rec): '''ÓÉÓÚMongoDB¶Á³öÀ´ÊÇunicode,ËùÓÐ×Ö·û´®ÐèÒª½øÐÐת»»''' self.TeamID = rec.get(u'TeamID', 0) self.TeamType = rec.get(u'TeamType', 0) self.TagMapID = rec.get(u'TagMapID', 0) self.TagMapEx = rec.get(u'TagMapEx', 0) self.ReqMinLV = rec.get(u'ReqMinLV', 0) self.ReqMaxLV = rec.get(u'ReqMaxLV', 0) def adoLoad(self, collection): '''ʹÓÃKEY²éÕÒ²¢¶ÁÈ¡''' resultCollection = collection.find({'TeamID':self.TeamID}) if resultCollection.count() <= 0: return False #ÓÉÓÚÊÇKEY²éÕÒ£¬ËùÓÐÈç¹û´æÔÚ¾ÍÖ»ÓÐÒ»Ìõ¼Ç¼ rec = resultCollection[0] #¶ÁÈ¡Êý¾Ý self.readRecord(rec) return True def adoInsert(self, collection): '''Ö´ÐвåÈë''' trycnt = 0 rec = self.getRecord() while(True): try: collection.insert(rec, False, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_152, 'Insert failed!TeamID = %s, error = %s, trycnt = %d'%(self.TeamID, err, trycnt)) mylog.error(msg) return False return True def adoUpdate(self, collection): '''Ö´ÐиüÐÂ''' trycnt = 0 rec = self.getRecord() while(True): try: collection.update({'TeamID':self.TeamID}, {'$set':rec}, False, False, True, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_153, 'Update failed!TeamID = %s, error = %s, trycnt = %d'%(self.TeamID, err, trycnt)) mylog.error(msg) return False return True def adoUpdateEx(self, collection, spec): '''Ö´ÐиüÐÂ''' trycnt = 0 rec = self.getRecord() while(True): try: collection.update(spec, {'$set':rec}, False, False, True, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_154, 'Update failed!TeamID = %s, error = %s, trycnt = %d'%(self.TeamID, err, trycnt)) mylog.error(msg) return False return True def adoCheckUpdate(self, collection): '''¸ù¾ÝÇé¿öÖ´ÐвåÈë»ò¸üÐÂ''' resultCollection = collection.find({'TeamID':self.TeamID}) if resultCollection.count() <= 0: return self.adoInsert(collection) return self.adoUpdate(collection) def adoCheckUpdateEx(self, collection, spec): '''¸ù¾ÝÇé¿öÖ´ÐвåÈë»ò¸üÐÂ''' resultCollection = collection.find(spec) if resultCollection.count() <= 0: return self.adoInsert(collection) return self.adoUpdateEx(collection, spec) def getAdoRecords(self, resultCollection): '''²éѯ½á¹û´ò°ü³É¶þ½øÖÆÁ÷''' result = '' result = CommFunc.WriteDWORD(result, resultCollection.count()) for rec in resultCollection: self.readRecord(rec) result += self.getBuffer() return result def adoQueryIndex(self, collection): '''ÓÃË÷Òý×ֶβéÕÒ''' resultCollection = collection.find({'TeamID':self.TeamID}) return self.getAdoRecords(resultCollection) def adoQueryCustom(self, collection, queryDict): '''×Ô¶¨Òå²éѯ''' resultCollection = collection.find(queryDict) return self.getAdoRecords(resultCollection) def adoQueryAll(self, collection): '''²éѯËùÓÐ''' resultCollection = collection.find() return self.getAdoRecords(resultCollection) def adoDeleteByIndex(self, collection): '''¸ù¾ÝË÷Òýɾ³ý''' trycnt = 0 while(True): try: collection.remove({'TeamID':self.TeamID}) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:TeamID = %s"%(self.__class__.__name__, inspect.stack()[0][3], self.TeamID)) msg = error.formatMsg('error', error.ERROR_NO_155, 'delete failure!self.TeamID = %s, error = %s, trycnt = %d'%(self.TeamID, err, trycnt)) mylog.error(msg) return False return True def outputString(self): output = '''//Íæ¼Ò¶ÓÎé±í#tagPlayerTeamTable: TeamID = %s, TeamType = %s, TagMapID = %s, TagMapEx = %s, ReqMinLV = %s, ReqMaxLV = %s, ADOResult = %s, '''%( self.TeamID, self.TeamType, self.TagMapID, self.TagMapEx, self.ReqMinLV, self.ReqMaxLV, self.ADOResult, ) return output def dumpString(self): output = '''%1s\t%1s\t%1s\t%1s\t%1s\t%1s'''%( self.TeamID, self.TeamType, self.TagMapID, self.TagMapEx, self.ReqMinLV, self.ReqMaxLV, ) return output #------------------------------------------------------ #Íæ¼ÒBuff±í#tagRoleBuff class tagRoleBuff(Structure): _pack_ = 1 _fields_ = [ ('PlayerID', ctypes.c_ulong), ('BuffType', ctypes.c_ubyte), ('BuffID', ctypes.c_ushort), ('RemainTime', ctypes.c_ulong), ('Value', ctypes.c_ulong), ('OwnerID', ctypes.c_ulong), ('OwnerType', ctypes.c_ulong), ('Value1', ctypes.c_ulong), ('Value2', ctypes.c_ulong), ('Layer', ctypes.c_ubyte), ('ADOResult', ctypes.c_ulong), ] def __init__(self): Structure.__init__(self) self.clear() def clear(self): memset(addressof(self), 0, self.getLength()) def readData(self, buf, pos = 0, length = 0): if not pos <= length: msg = error.formatMsg('error', error.ERROR_NO_150, '(pos = %s)> (length = %s)'%(pos, length)) mylog.error(msg) return -1 if len(buf) < pos + self.getLength(): msg = error.formatMsg('error', error.ERROR_NO_151, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength())) mylog.error(msg) return -1 self.clear() memmove(addressof(self), buf[pos:], self.getLength()) return self.getLength() def getBuffer(self): buf = create_string_buffer(self.getLength()) memmove(addressof(buf), addressof(self), self.getLength()) return string_at(addressof(buf), self.getLength()) def getLength(self): return sizeof(tagRoleBuff) def getRecord(self): '''×éÖ¯´æ´¢¼Ç¼''' rec = {} rec[u'PlayerID'] = self.PlayerID rec[u'BuffType'] = self.BuffType rec[u'BuffID'] = self.BuffID rec[u'RemainTime'] = self.RemainTime rec[u'Value'] = self.Value rec[u'OwnerID'] = self.OwnerID rec[u'OwnerType'] = self.OwnerType rec[u'Value1'] = self.Value1 rec[u'Value2'] = self.Value2 rec[u'Layer'] = self.Layer return rec def readRecord(self, rec): '''ÓÉÓÚMongoDB¶Á³öÀ´ÊÇunicode,ËùÓÐ×Ö·û´®ÐèÒª½øÐÐת»»''' self.PlayerID = rec.get(u'PlayerID', 0) self.BuffType = rec.get(u'BuffType', 0) self.BuffID = rec.get(u'BuffID', 0) self.RemainTime = rec.get(u'RemainTime', 0) self.Value = rec.get(u'Value', 0) self.OwnerID = rec.get(u'OwnerID', 0) self.OwnerType = rec.get(u'OwnerType', 0) self.Value1 = rec.get(u'Value1', 0) self.Value2 = rec.get(u'Value2', 0) self.Layer = rec.get(u'Layer', 0) #Can not implement adoLoadStr method:No key defined! def adoInsert(self, collection): '''Ö´ÐвåÈë''' trycnt = 0 rec = self.getRecord() while(True): try: collection.insert(rec, False, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_152, 'Insert failed!PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True #Can not implement adoUpdateStr method:No key defined! def adoUpdateEx(self, collection, spec): '''Ö´ÐиüÐÂ''' trycnt = 0 rec = self.getRecord() while(True): try: collection.update(spec, {'$set':rec}, False, False, True, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_154, 'Update failed!PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True #Can not implement adoCheckUpdateStr method:No key defined! #Can not implement adoCheckUpdateExStr method:No key defined! def getAdoRecords(self, resultCollection): '''²éѯ½á¹û´ò°ü³É¶þ½øÖÆÁ÷''' result = '' result = CommFunc.WriteDWORD(result, resultCollection.count()) for rec in resultCollection: self.readRecord(rec) result += self.getBuffer() return result def adoQueryIndex(self, collection): '''ÓÃË÷Òý×ֶβéÕÒ''' resultCollection = collection.find({'PlayerID':self.PlayerID}) return self.getAdoRecords(resultCollection) def adoQueryCustom(self, collection, queryDict): '''×Ô¶¨Òå²éѯ''' resultCollection = collection.find(queryDict) return self.getAdoRecords(resultCollection) def adoQueryAll(self, collection): '''²éѯËùÓÐ''' resultCollection = collection.find() return self.getAdoRecords(resultCollection) def adoDeleteByIndex(self, collection): '''¸ù¾ÝË÷Òýɾ³ý''' trycnt = 0 while(True): try: collection.remove({'PlayerID':self.PlayerID}) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:PlayerID = %s"%(self.__class__.__name__, inspect.stack()[0][3], self.PlayerID)) msg = error.formatMsg('error', error.ERROR_NO_155, 'delete failure!self.PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True def outputString(self): output = '''//Íæ¼ÒBuff±í#tagRoleBuff: PlayerID = %s, BuffType = %s, BuffID = %s, RemainTime = %s, Value = %s, OwnerID = %s, OwnerType = %s, Value1 = %s, Value2 = %s, Layer = %s, ADOResult = %s, '''%( self.PlayerID, self.BuffType, self.BuffID, self.RemainTime, self.Value, self.OwnerID, self.OwnerType, self.Value1, self.Value2, self.Layer, self.ADOResult, ) return output def dumpString(self): output = '''%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s'''%( self.PlayerID, self.BuffType, self.BuffID, self.RemainTime, self.Value, self.OwnerID, self.OwnerType, self.Value1, self.Value2, self.Layer, ) return output #------------------------------------------------------ #Íæ¼ÒÈÎÎñ±í#tagRoleMission class tagRoleMission(Structure): _pack_ = 1 _fields_ = [ ('PlayerID', ctypes.c_ulong), ('MissionID', ctypes.c_ulong), ('State', ctypes.c_int), ('MissionState', ctypes.c_ushort), ('DescriptionIndex', ctypes.c_ushort), ('ADOResult', ctypes.c_ulong), ] def __init__(self): Structure.__init__(self) self.clear() def clear(self): memset(addressof(self), 0, self.getLength()) def readData(self, buf, pos = 0, length = 0): if not pos <= length: msg = error.formatMsg('error', error.ERROR_NO_150, '(pos = %s)> (length = %s)'%(pos, length)) mylog.error(msg) return -1 if len(buf) < pos + self.getLength(): msg = error.formatMsg('error', error.ERROR_NO_151, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength())) mylog.error(msg) return -1 self.clear() memmove(addressof(self), buf[pos:], self.getLength()) return self.getLength() def getBuffer(self): buf = create_string_buffer(self.getLength()) memmove(addressof(buf), addressof(self), self.getLength()) return string_at(addressof(buf), self.getLength()) def getLength(self): return sizeof(tagRoleMission) def getRecord(self): '''×éÖ¯´æ´¢¼Ç¼''' rec = {} rec[u'PlayerID'] = self.PlayerID rec[u'MissionID'] = self.MissionID rec[u'State'] = self.State rec[u'MissionState'] = self.MissionState rec[u'DescriptionIndex'] = self.DescriptionIndex return rec def readRecord(self, rec): '''ÓÉÓÚMongoDB¶Á³öÀ´ÊÇunicode,ËùÓÐ×Ö·û´®ÐèÒª½øÐÐת»»''' self.PlayerID = rec.get(u'PlayerID', 0) self.MissionID = rec.get(u'MissionID', 0) self.State = rec.get(u'State', 0) self.MissionState = rec.get(u'MissionState', 0) self.DescriptionIndex = rec.get(u'DescriptionIndex', 0) #Can not implement adoLoadStr method:No key defined! def adoInsert(self, collection): '''Ö´ÐвåÈë''' trycnt = 0 rec = self.getRecord() while(True): try: collection.insert(rec, False, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_152, 'Insert failed!PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True #Can not implement adoUpdateStr method:No key defined! def adoUpdateEx(self, collection, spec): '''Ö´ÐиüÐÂ''' trycnt = 0 rec = self.getRecord() while(True): try: collection.update(spec, {'$set':rec}, False, False, True, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_154, 'Update failed!PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True #Can not implement adoCheckUpdateStr method:No key defined! #Can not implement adoCheckUpdateExStr method:No key defined! def getAdoRecords(self, resultCollection): '''²éѯ½á¹û´ò°ü³É¶þ½øÖÆÁ÷''' result = '' result = CommFunc.WriteDWORD(result, resultCollection.count()) for rec in resultCollection: self.readRecord(rec) result += self.getBuffer() return result def adoQueryIndex(self, collection): '''ÓÃË÷Òý×ֶβéÕÒ''' resultCollection = collection.find({'PlayerID':self.PlayerID}) return self.getAdoRecords(resultCollection) def adoQueryCustom(self, collection, queryDict): '''×Ô¶¨Òå²éѯ''' resultCollection = collection.find(queryDict) return self.getAdoRecords(resultCollection) def adoQueryAll(self, collection): '''²éѯËùÓÐ''' resultCollection = collection.find() return self.getAdoRecords(resultCollection) def adoDeleteByIndex(self, collection): '''¸ù¾ÝË÷Òýɾ³ý''' trycnt = 0 while(True): try: collection.remove({'PlayerID':self.PlayerID}) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:PlayerID = %s"%(self.__class__.__name__, inspect.stack()[0][3], self.PlayerID)) msg = error.formatMsg('error', error.ERROR_NO_155, 'delete failure!self.PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True def outputString(self): output = '''//Íæ¼ÒÈÎÎñ±í#tagRoleMission: PlayerID = %s, MissionID = %s, State = %s, MissionState = %s, DescriptionIndex = %s, ADOResult = %s, '''%( self.PlayerID, self.MissionID, self.State, self.MissionState, self.DescriptionIndex, self.ADOResult, ) return output def dumpString(self): output = '''%1s\t%1s\t%1s\t%1s\t%1s'''%( self.PlayerID, self.MissionID, self.State, self.MissionState, self.DescriptionIndex, ) return output #------------------------------------------------------ #ÈÎÎñÏêÇé±í#tagRoleMissionDict class tagRoleMissionDict(Structure): _pack_ = 1 _fields_ = [ ('PlayerID', ctypes.c_ulong), ('MissionID', ctypes.c_ulong), ('DictName', ctypes.c_char * 30), ('DictValue', ctypes.c_ulong), ('ADOResult', ctypes.c_ulong), ] def __init__(self): Structure.__init__(self) self.clear() def clear(self): memset(addressof(self), 0, self.getLength()) def readData(self, buf, pos = 0, length = 0): if not pos <= length: msg = error.formatMsg('error', error.ERROR_NO_150, '(pos = %s)> (length = %s)'%(pos, length)) mylog.error(msg) return -1 if len(buf) < pos + self.getLength(): msg = error.formatMsg('error', error.ERROR_NO_151, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength())) mylog.error(msg) return -1 self.clear() memmove(addressof(self), buf[pos:], self.getLength()) return self.getLength() def getBuffer(self): buf = create_string_buffer(self.getLength()) memmove(addressof(buf), addressof(self), self.getLength()) return string_at(addressof(buf), self.getLength()) def getLength(self): return sizeof(tagRoleMissionDict) def getRecord(self): '''×éÖ¯´æ´¢¼Ç¼''' rec = {} rec[u'PlayerID'] = self.PlayerID rec[u'MissionID'] = self.MissionID rec[u'DictName'] = fix_incomingText(self.DictName) rec[u'DictValue'] = self.DictValue return rec def readRecord(self, rec): '''ÓÉÓÚMongoDB¶Á³öÀ´ÊÇunicode,ËùÓÐ×Ö·û´®ÐèÒª½øÐÐת»»''' self.PlayerID = rec.get(u'PlayerID', 0) self.MissionID = rec.get(u'MissionID', 0) self.DictName = fix_outgoingText(rec.get(u'DictName', u'')) self.DictValue = rec.get(u'DictValue', 0) #Can not implement adoLoadStr method:No key defined! def adoInsert(self, collection): '''Ö´ÐвåÈë''' trycnt = 0 rec = self.getRecord() while(True): try: collection.insert(rec, False, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_152, 'Insert failed!PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True #Can not implement adoUpdateStr method:No key defined! def adoUpdateEx(self, collection, spec): '''Ö´ÐиüÐÂ''' trycnt = 0 rec = self.getRecord() while(True): try: collection.update(spec, {'$set':rec}, False, False, True, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_154, 'Update failed!PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True #Can not implement adoCheckUpdateStr method:No key defined! #Can not implement adoCheckUpdateExStr method:No key defined! def getAdoRecords(self, resultCollection): '''²éѯ½á¹û´ò°ü³É¶þ½øÖÆÁ÷''' result = '' result = CommFunc.WriteDWORD(result, resultCollection.count()) for rec in resultCollection: self.readRecord(rec) result += self.getBuffer() return result def adoQueryIndex(self, collection): '''ÓÃË÷Òý×ֶβéÕÒ''' resultCollection = collection.find({'PlayerID':self.PlayerID}) return self.getAdoRecords(resultCollection) def adoQueryCustom(self, collection, queryDict): '''×Ô¶¨Òå²éѯ''' resultCollection = collection.find(queryDict) return self.getAdoRecords(resultCollection) def adoQueryAll(self, collection): '''²éѯËùÓÐ''' resultCollection = collection.find() return self.getAdoRecords(resultCollection) def adoDeleteByIndex(self, collection): '''¸ù¾ÝË÷Òýɾ³ý''' trycnt = 0 while(True): try: collection.remove({'PlayerID':self.PlayerID}) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:PlayerID = %s"%(self.__class__.__name__, inspect.stack()[0][3], self.PlayerID)) msg = error.formatMsg('error', error.ERROR_NO_155, 'delete failure!self.PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True def outputString(self): output = '''//ÈÎÎñÏêÇé±í#tagRoleMissionDict: PlayerID = %s, MissionID = %s, DictName = %s, DictValue = %s, ADOResult = %s, '''%( self.PlayerID, self.MissionID, self.DictName, self.DictValue, self.ADOResult, ) return output def dumpString(self): output = '''%1s\t%1s\t%1s\t%1s'''%( self.PlayerID, self.MissionID, self.DictName, self.DictValue, ) return output #CharÊý×éÀàÐÍSet½Ó¿Ú,ʹÓøýӿڶԴËÀàÐÍÊý¾Ý¸³Öµ£¬·ÀÖ¹¸³ÖµµÄÊý¾Ý¹ý³¤±¨´í def SetDictName(self,Str): if len(Str)<=30: self.DictName = Str else: self.DictName = Str[:30] #------------------------------------------------------ #Íæ¼Ò×Öµä±í#tagRoleNomalDict class tagRoleNomalDict(Structure): _pack_ = 1 _fields_ = [ ('PlayerID', ctypes.c_ulong), ('DictName', ctypes.c_char * 30), ('DictValue', ctypes.c_ulong), ('Type', ctypes.c_ulong), ('ADOResult', ctypes.c_ulong), ] def __init__(self): Structure.__init__(self) self.clear() def clear(self): memset(addressof(self), 0, self.getLength()) def readData(self, buf, pos = 0, length = 0): if not pos <= length: msg = error.formatMsg('error', error.ERROR_NO_150, '(pos = %s)> (length = %s)'%(pos, length)) mylog.error(msg) return -1 if len(buf) < pos + self.getLength(): msg = error.formatMsg('error', error.ERROR_NO_151, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength())) mylog.error(msg) return -1 self.clear() memmove(addressof(self), buf[pos:], self.getLength()) return self.getLength() def getBuffer(self): buf = create_string_buffer(self.getLength()) memmove(addressof(buf), addressof(self), self.getLength()) return string_at(addressof(buf), self.getLength()) def getLength(self): return sizeof(tagRoleNomalDict) def getRecord(self): '''×éÖ¯´æ´¢¼Ç¼''' rec = {} rec[u'PlayerID'] = self.PlayerID rec[u'DictName'] = fix_incomingText(self.DictName) rec[u'DictValue'] = self.DictValue rec[u'Type'] = self.Type return rec def readRecord(self, rec): '''ÓÉÓÚMongoDB¶Á³öÀ´ÊÇunicode,ËùÓÐ×Ö·û´®ÐèÒª½øÐÐת»»''' self.PlayerID = rec.get(u'PlayerID', 0) self.DictName = fix_outgoingText(rec.get(u'DictName', u'')) self.DictValue = rec.get(u'DictValue', 0) self.Type = rec.get(u'Type', 0) #Can not implement adoLoadStr method:No key defined! def adoInsert(self, collection): '''Ö´ÐвåÈë''' trycnt = 0 rec = self.getRecord() while(True): try: collection.insert(rec, False, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_152, 'Insert failed!PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True #Can not implement adoUpdateStr method:No key defined! def adoUpdateEx(self, collection, spec): '''Ö´ÐиüÐÂ''' trycnt = 0 rec = self.getRecord() while(True): try: collection.update(spec, {'$set':rec}, False, False, True, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_154, 'Update failed!PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True #Can not implement adoCheckUpdateStr method:No key defined! #Can not implement adoCheckUpdateExStr method:No key defined! def getAdoRecords(self, resultCollection): '''²éѯ½á¹û´ò°ü³É¶þ½øÖÆÁ÷''' result = '' result = CommFunc.WriteDWORD(result, resultCollection.count()) for rec in resultCollection: self.readRecord(rec) result += self.getBuffer() return result def adoQueryIndex(self, collection): '''ÓÃË÷Òý×ֶβéÕÒ''' resultCollection = collection.find({'PlayerID':self.PlayerID}) return self.getAdoRecords(resultCollection) def adoQueryCustom(self, collection, queryDict): '''×Ô¶¨Òå²éѯ''' resultCollection = collection.find(queryDict) return self.getAdoRecords(resultCollection) def adoQueryAll(self, collection): '''²éѯËùÓÐ''' resultCollection = collection.find() return self.getAdoRecords(resultCollection) def adoDeleteByIndex(self, collection): '''¸ù¾ÝË÷Òýɾ³ý''' trycnt = 0 while(True): try: collection.remove({'PlayerID':fix_incomingText(self.PlayerID)}) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:PlayerID = %s"%(self.__class__.__name__, inspect.stack()[0][3], self.PlayerID)) msg = error.formatMsg('error', error.ERROR_NO_155, 'delete failure!self.PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True def outputString(self): output = '''//Íæ¼Ò×Öµä±í#tagRoleNomalDict: PlayerID = %s, DictName = %s, DictValue = %s, Type = %s, ADOResult = %s, '''%( self.PlayerID, self.DictName, self.DictValue, self.Type, self.ADOResult, ) return output def dumpString(self): output = '''%1s\t%1s\t%1s\t%1s'''%( self.PlayerID, self.DictName, self.DictValue, self.Type, ) return output #CharÊý×éÀàÐÍSet½Ó¿Ú,ʹÓøýӿڶԴËÀàÐÍÊý¾Ý¸³Öµ£¬·ÀÖ¹¸³ÖµµÄÊý¾Ý¹ý³¤±¨´í def SetDictName(self,Str): if len(Str)<=30: self.DictName = Str else: self.DictName = Str[:30] #------------------------------------------------------ #------------------------------------------------------ #Íæ¼Ò³èÎï±í#tagRolePet class tagRolePet(Structure): _pack_ = 1 _fields_ = [ ('PetID', ctypes.c_ulong), ('PlayerID', ctypes.c_ulong), ('NPCID', ctypes.c_ulong), ('Name', ctypes.c_char * 24), ('Friendliness', ctypes.c_ushort), ('HP', ctypes.c_ulong), ('HPEx', ctypes.c_ulong), ('MP', ctypes.c_ulong), ('Lv', ctypes.c_ushort), ('Exp', ctypes.c_ulong), ('HPTalent', ctypes.c_ushort), ('MPTalent', ctypes.c_ushort), ('PhysicAtkTalent', ctypes.c_ushort), ('MagicAtkTalent', ctypes.c_ushort), ('PhysicDefTalent', ctypes.c_ushort), ('MagicDefTalent', ctypes.c_ushort), ('BindType', ctypes.c_ubyte), ('STR', ctypes.c_ulong), ('PNE', ctypes.c_ulong), ('PHY', ctypes.c_ulong), ('CON', ctypes.c_ulong), ('Pos', ctypes.c_ubyte), ('DailyTrainCnt', ctypes.c_ubyte), ('RemainTrainTime', ctypes.c_ulong), ('UseCreatorDrugCnt', ctypes.c_ubyte), ('LeftPoints', ctypes.c_ushort), ('AIMode', ctypes.c_ubyte), ('IsBattle', ctypes.c_ubyte), ('BattlePower', ctypes.c_ulong), ('IncreateSkillCnt', ctypes.c_ubyte), ('TrainType', ctypes.c_ubyte), ('PetIndex', ctypes.c_ubyte), ('ADOResult', ctypes.c_ulong), ] def __init__(self): Structure.__init__(self) self.clear() def clear(self): memset(addressof(self), 0, self.getLength()) def readData(self, buf, pos = 0, length = 0): if not pos <= length: msg = error.formatMsg('error', error.ERROR_NO_148, '(pos = %s) > (length = %s)'%(pos, length)) mylog.error(msg) return -1 if len(buf) < pos + self.getLength(): msg = error.formatMsg('error', error.ERROR_NO_149, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength())) mylog.error(msg) self.clear() self.PetID, pos = CommFunc.ReadDWORD(buf, pos) self.PlayerID, pos = CommFunc.ReadDWORD(buf, pos) self.NPCID, pos = CommFunc.ReadDWORD(buf, pos) self.Name, pos = CommFunc.ReadString(buf, pos, 24) self.Friendliness, pos = CommFunc.ReadWORD(buf, pos) self.HP, pos = CommFunc.ReadDWORD(buf, pos) self.HPEx, pos = CommFunc.ReadDWORD(buf, pos) self.MP, pos = CommFunc.ReadDWORD(buf, pos) self.Lv, pos = CommFunc.ReadWORD(buf, pos) self.Exp, pos = CommFunc.ReadDWORD(buf, pos) self.HPTalent, pos = CommFunc.ReadWORD(buf, pos) self.MPTalent, pos = CommFunc.ReadWORD(buf, pos) self.PhysicAtkTalent, pos = CommFunc.ReadWORD(buf, pos) self.MagicAtkTalent, pos = CommFunc.ReadWORD(buf, pos) self.PhysicDefTalent, pos = CommFunc.ReadWORD(buf, pos) self.MagicDefTalent, pos = CommFunc.ReadWORD(buf, pos) self.BindType, pos = CommFunc.ReadBYTE(buf, pos) self.STR, pos = CommFunc.ReadDWORD(buf, pos) self.PNE, pos = CommFunc.ReadDWORD(buf, pos) self.PHY, pos = CommFunc.ReadDWORD(buf, pos) self.CON, pos = CommFunc.ReadDWORD(buf, pos) self.Pos, pos = CommFunc.ReadBYTE(buf, pos) self.DailyTrainCnt, pos = CommFunc.ReadBYTE(buf, pos) self.RemainTrainTime, pos = CommFunc.ReadDWORD(buf, pos) self.UseCreatorDrugCnt, pos = CommFunc.ReadBYTE(buf, pos) self.LeftPoints, pos = CommFunc.ReadWORD(buf, pos) self.AIMode, pos = CommFunc.ReadBYTE(buf, pos) self.IsBattle, pos = CommFunc.ReadBYTE(buf, pos) self.BattlePower, pos = CommFunc.ReadDWORD(buf, pos) self.IncreateSkillCnt, pos = CommFunc.ReadBYTE(buf, pos) self.TrainType, pos = CommFunc.ReadBYTE(buf, pos) self.PetIndex, pos = CommFunc.ReadBYTE(buf, pos) return self.getLength() def getBuffer(self): buf = create_string_buffer(self.getLength()) memmove(addressof(buf), addressof(self), self.getLength()) return string_at(addressof(buf), self.getLength()) def getLength(self): return sizeof(tagRolePet) def getRecord(self): '''×éÖ¯´æ´¢¼Ç¼''' rec = {} rec[u'PetID'] = self.PetID rec[u'PlayerID'] = self.PlayerID rec[u'NPCID'] = self.NPCID rec[u'Name'] = fix_incomingText(self.Name) rec[u'Friendliness'] = self.Friendliness rec[u'HP'] = self.HP rec[u'HPEx'] = self.HPEx rec[u'MP'] = self.MP rec[u'Lv'] = self.Lv rec[u'Exp'] = self.Exp rec[u'HPTalent'] = self.HPTalent rec[u'MPTalent'] = self.MPTalent rec[u'PhysicAtkTalent'] = self.PhysicAtkTalent rec[u'MagicAtkTalent'] = self.MagicAtkTalent rec[u'PhysicDefTalent'] = self.PhysicDefTalent rec[u'MagicDefTalent'] = self.MagicDefTalent rec[u'BindType'] = self.BindType rec[u'STR'] = self.STR rec[u'PNE'] = self.PNE rec[u'PHY'] = self.PHY rec[u'CON'] = self.CON rec[u'Pos'] = self.Pos rec[u'DailyTrainCnt'] = self.DailyTrainCnt rec[u'RemainTrainTime'] = self.RemainTrainTime rec[u'UseCreatorDrugCnt'] = self.UseCreatorDrugCnt rec[u'LeftPoints'] = self.LeftPoints rec[u'AIMode'] = self.AIMode rec[u'IsBattle'] = self.IsBattle rec[u'BattlePower'] = self.BattlePower rec[u'IncreateSkillCnt'] = self.IncreateSkillCnt rec[u'TrainType'] = self.TrainType rec[u'PetIndex'] = self.PetIndex return rec def readRecord(self, rec): '''ÓÉÓÚMongoDB¶Á³öÀ´ÊÇunicode,ËùÓÐ×Ö·û´®ÐèÒª½øÐÐת»»''' self.PetID = rec.get(u'PetID', 0) self.PlayerID = rec.get(u'PlayerID', 0) self.NPCID = rec.get(u'NPCID', 0) self.Name = fix_outgoingText(rec.get(u'Name', u'')) self.Friendliness = rec.get(u'Friendliness', 0) self.HP = rec.get(u'HP', 0) self.HPEx = rec.get(u'HPEx', 0) self.MP = rec.get(u'MP', 0) self.Lv = rec.get(u'Lv', 0) self.Exp = rec.get(u'Exp', 0) self.HPTalent = rec.get(u'HPTalent', 0) self.MPTalent = rec.get(u'MPTalent', 0) self.PhysicAtkTalent = rec.get(u'PhysicAtkTalent', 0) self.MagicAtkTalent = rec.get(u'MagicAtkTalent', 0) self.PhysicDefTalent = rec.get(u'PhysicDefTalent', 0) self.MagicDefTalent = rec.get(u'MagicDefTalent', 0) self.BindType = rec.get(u'BindType', 0) self.STR = rec.get(u'STR', 0) self.PNE = rec.get(u'PNE', 0) self.PHY = rec.get(u'PHY', 0) self.CON = rec.get(u'CON', 0) self.Pos = rec.get(u'Pos', 0) self.DailyTrainCnt = rec.get(u'DailyTrainCnt', 0) self.RemainTrainTime = rec.get(u'RemainTrainTime', 0) self.UseCreatorDrugCnt = rec.get(u'UseCreatorDrugCnt', 0) self.LeftPoints = rec.get(u'LeftPoints', 0) self.AIMode = rec.get(u'AIMode', 0) self.IsBattle = rec.get(u'IsBattle', 0) self.BattlePower = rec.get(u'BattlePower', 0) self.IncreateSkillCnt = rec.get(u'IncreateSkillCnt', 0) self.TrainType = rec.get(u'TrainType', 0) self.PetIndex = rec.get(u'PetIndex', 0) def adoLoad(self, collection): '''ʹÓÃKEY²éÕÒ²¢¶ÁÈ¡''' resultCollection = collection.find({'PetID':self.PetID}) if resultCollection.count() <= 0: return False #ÓÉÓÚÊÇKEY²éÕÒ£¬ËùÓÐÈç¹û´æÔÚ¾ÍÖ»ÓÐÒ»Ìõ¼Ç¼ rec = resultCollection[0] #¶ÁÈ¡Êý¾Ý self.readRecord(rec) return True def adoInsert(self, collection): '''Ö´ÐвåÈë''' trycnt = 0 rec = self.getRecord() while(True): try: collection.insert(rec, False, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_152, 'Insert failed!PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True def adoUpdate(self, collection): '''Ö´ÐиüÐÂ''' trycnt = 0 rec = self.getRecord() while(True): try: collection.update({'PetID':self.PetID}, {'$set':rec}, False, False, True, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_153, 'Update failed!PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True def adoUpdateEx(self, collection, spec): '''Ö´ÐиüÐÂ''' trycnt = 0 rec = self.getRecord() while(True): try: collection.update(spec, {'$set':rec}, False, False, True, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_154, 'Update failed!PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True def adoCheckUpdate(self, collection): '''¸ù¾ÝÇé¿öÖ´ÐвåÈë»ò¸üÐÂ''' resultCollection = collection.find({'PetID':self.PetID}) if resultCollection.count() <= 0: return self.adoInsert(collection) return self.adoUpdate(collection) def adoCheckUpdateEx(self, collection, spec): '''¸ù¾ÝÇé¿öÖ´ÐвåÈë»ò¸üÐÂ''' resultCollection = collection.find(spec) if resultCollection.count() <= 0: return self.adoInsert(collection) return self.adoUpdateEx(collection, spec) def getAdoRecords(self, resultCollection): '''²éѯ½á¹û´ò°ü³É¶þ½øÖÆÁ÷''' result = '' result = CommFunc.WriteDWORD(result, resultCollection.count()) for rec in resultCollection: self.readRecord(rec) result += self.getBuffer() return result def adoQueryIndex(self, collection): '''ÓÃË÷Òý×ֶβéÕÒ''' resultCollection = collection.find({'PlayerID':self.PlayerID}) return self.getAdoRecords(resultCollection) def adoQueryCustom(self, collection, queryDict): '''×Ô¶¨Òå²éѯ''' resultCollection = collection.find(queryDict) return self.getAdoRecords(resultCollection) def adoQueryAll(self, collection): '''²éѯËùÓÐ''' resultCollection = collection.find() return self.getAdoRecords(resultCollection) def adoDeleteByIndex(self, collection): '''¸ù¾ÝË÷Òýɾ³ý''' trycnt = 0 while(True): try: collection.remove({'PlayerID':self.PlayerID}) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:PlayerID = %s"%(self.__class__.__name__, inspect.stack()[0][3], self.PlayerID)) msg = error.formatMsg('error', error.ERROR_NO_155, 'delete failure!self.PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True def outputString(self): output = '''//Íæ¼Ò³èÎï±í#tagRolePet: PetID = %s, PlayerID = %s, NPCID = %s, Name = %s, Friendliness = %s, HP = %s, HPEx = %s, MP = %s, Lv = %s, Exp = %s, HPTalent = %s, MPTalent = %s, PhysicAtkTalent = %s, MagicAtkTalent = %s, PhysicDefTalent = %s, MagicDefTalent = %s, BindType = %s, STR = %s, PNE = %s, PHY = %s, CON = %s, Pos = %s, DailyTrainCnt = %s, RemainTrainTime = %s, UseCreatorDrugCnt = %s, LeftPoints = %s, AIMode = %s, IsBattle = %s, BattlePower = %s, IncreateSkillCnt = %s, TrainType = %s, PetIndex = %s, ADOResult = %s, '''%( self.PetID, self.PlayerID, self.NPCID, self.Name, self.Friendliness, self.HP, self.HPEx, self.MP, self.Lv, self.Exp, self.HPTalent, self.MPTalent, self.PhysicAtkTalent, self.MagicAtkTalent, self.PhysicDefTalent, self.MagicDefTalent, self.BindType, self.STR, self.PNE, self.PHY, self.CON, self.Pos, self.DailyTrainCnt, self.RemainTrainTime, self.UseCreatorDrugCnt, self.LeftPoints, self.AIMode, self.IsBattle, self.BattlePower, self.IncreateSkillCnt, self.TrainType, self.PetIndex, self.ADOResult, ) return output def dumpString(self): output = '''%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s'''%( self.PetID, self.PlayerID, self.NPCID, self.Name, self.Friendliness, self.HP, self.HPEx, self.MP, self.Lv, self.Exp, self.HPTalent, self.MPTalent, self.PhysicAtkTalent, self.MagicAtkTalent, self.PhysicDefTalent, self.MagicDefTalent, self.BindType, self.STR, self.PNE, self.PHY, self.CON, self.Pos, self.DailyTrainCnt, self.RemainTrainTime, self.UseCreatorDrugCnt, self.LeftPoints, self.AIMode, self.IsBattle, self.BattlePower, self.IncreateSkillCnt, self.TrainType, self.PetIndex, ) return output #CharÊý×éÀàÐÍSet½Ó¿Ú,ʹÓøýӿڶԴËÀàÐÍÊý¾Ý¸³Öµ£¬·ÀÖ¹¸³ÖµµÄÊý¾Ý¹ý³¤±¨´í def SetName(self,Str): if len(Str)<=24: self.Name = Str else: self.Name = Str[:24] #------------------------------------------------------ #Íæ¼ÒÖØ¸´Ê¼þ±í#tagRoleRepeatTime class tagRoleRepeatTime(Structure): _pack_ = 1 _fields_ = [ ('PlayerID', ctypes.c_ulong), ('EventID', ctypes.c_ushort), ('CurrentTime', ctypes.c_ushort), ('ADOResult', ctypes.c_ulong), ] def __init__(self): Structure.__init__(self) self.clear() def clear(self): memset(addressof(self), 0, self.getLength()) def readData(self, buf, pos = 0, length = 0): if not pos <= length: msg = error.formatMsg('error', error.ERROR_NO_150, '(pos = %s)> (length = %s)'%(pos, length)) mylog.error(msg) return -1 if len(buf) < pos + self.getLength(): msg = error.formatMsg('error', error.ERROR_NO_151, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength())) mylog.error(msg) return -1 self.clear() memmove(addressof(self), buf[pos:], self.getLength()) return self.getLength() def getBuffer(self): buf = create_string_buffer(self.getLength()) memmove(addressof(buf), addressof(self), self.getLength()) return string_at(addressof(buf), self.getLength()) def getLength(self): return sizeof(tagRoleRepeatTime) def getRecord(self): '''×éÖ¯´æ´¢¼Ç¼''' rec = {} rec[u'PlayerID'] = self.PlayerID rec[u'EventID'] = self.EventID rec[u'CurrentTime'] = self.CurrentTime return rec def readRecord(self, rec): '''ÓÉÓÚMongoDB¶Á³öÀ´ÊÇunicode,ËùÓÐ×Ö·û´®ÐèÒª½øÐÐת»»''' self.PlayerID = rec.get(u'PlayerID', 0) self.EventID = rec.get(u'EventID', 0) self.CurrentTime = rec.get(u'CurrentTime', 0) #Can not implement adoLoadStr method:No key defined! def adoInsert(self, collection): '''Ö´ÐвåÈë''' trycnt = 0 rec = self.getRecord() while(True): try: collection.insert(rec, False, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_152, 'Insert failed!PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True #Can not implement adoUpdateStr method:No key defined! def adoUpdateEx(self, collection, spec): '''Ö´ÐиüÐÂ''' trycnt = 0 rec = self.getRecord() while(True): try: collection.update(spec, {'$set':rec}, False, False, True, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_154, 'Update failed!PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True #Can not implement adoCheckUpdateStr method:No key defined! #Can not implement adoCheckUpdateExStr method:No key defined! def getAdoRecords(self, resultCollection): '''²éѯ½á¹û´ò°ü³É¶þ½øÖÆÁ÷''' result = '' result = CommFunc.WriteDWORD(result, resultCollection.count()) for rec in resultCollection: self.readRecord(rec) result += self.getBuffer() return result def adoQueryIndex(self, collection): '''ÓÃË÷Òý×ֶβéÕÒ''' resultCollection = collection.find({'PlayerID':self.PlayerID}) return self.getAdoRecords(resultCollection) def adoQueryCustom(self, collection, queryDict): '''×Ô¶¨Òå²éѯ''' resultCollection = collection.find(queryDict) return self.getAdoRecords(resultCollection) def adoQueryAll(self, collection): '''²éѯËùÓÐ''' resultCollection = collection.find() return self.getAdoRecords(resultCollection) def adoDeleteByIndex(self, collection): '''¸ù¾ÝË÷Òýɾ³ý''' trycnt = 0 while(True): try: collection.remove({'PlayerID':self.PlayerID}) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:PlayerID = %s"%(self.__class__.__name__, inspect.stack()[0][3], self.PlayerID)) msg = error.formatMsg('error', error.ERROR_NO_155, 'delete failure!self.PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True def outputString(self): output = '''//Íæ¼ÒÖØ¸´Ê¼þ±í#tagRoleRepeatTime: PlayerID = %s, EventID = %s, CurrentTime = %s, ADOResult = %s, '''%( self.PlayerID, self.EventID, self.CurrentTime, self.ADOResult, ) return output def dumpString(self): output = '''%1s\t%1s\t%1s'''%( self.PlayerID, self.EventID, self.CurrentTime, ) return output #------------------------------------------------------ #Íæ¼Ò¼¼Äܱí#tagRoleSkill class tagRoleSkill(Structure): _pack_ = 1 _fields_ = [ ('PlayerID', ctypes.c_ulong), ('SkillID', ctypes.c_ushort), ('RemainTime', ctypes.c_ulong), ('Proficiency', ctypes.c_ulong), ('ADOResult', ctypes.c_ulong), ] def __init__(self): Structure.__init__(self) self.clear() def clear(self): memset(addressof(self), 0, self.getLength()) def readData(self, buf, pos = 0, length = 0): if not pos <= length: msg = error.formatMsg('error', error.ERROR_NO_150, '(pos = %s)> (length = %s)'%(pos, length)) mylog.error(msg) return -1 if len(buf) < pos + self.getLength(): msg = error.formatMsg('error', error.ERROR_NO_151, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength())) mylog.error(msg) return -1 self.clear() memmove(addressof(self), buf[pos:], self.getLength()) return self.getLength() def getBuffer(self): buf = create_string_buffer(self.getLength()) memmove(addressof(buf), addressof(self), self.getLength()) return string_at(addressof(buf), self.getLength()) def getLength(self): return sizeof(tagRoleSkill) def getRecord(self): '''×éÖ¯´æ´¢¼Ç¼''' rec = {} rec[u'PlayerID'] = self.PlayerID rec[u'SkillID'] = self.SkillID rec[u'RemainTime'] = self.RemainTime rec[u'Proficiency'] = self.Proficiency return rec def readRecord(self, rec): '''ÓÉÓÚMongoDB¶Á³öÀ´ÊÇunicode,ËùÓÐ×Ö·û´®ÐèÒª½øÐÐת»»''' self.PlayerID = rec.get(u'PlayerID', 0) self.SkillID = rec.get(u'SkillID', 0) self.RemainTime = rec.get(u'RemainTime', 0) self.Proficiency = rec.get(u'Proficiency', 0) #Can not implement adoLoadStr method:No key defined! def adoInsert(self, collection): '''Ö´ÐвåÈë''' trycnt = 0 rec = self.getRecord() while(True): try: collection.insert(rec, False, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_152, 'Insert failed!PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True #Can not implement adoUpdateStr method:No key defined! def adoUpdateEx(self, collection, spec): '''Ö´ÐиüÐÂ''' trycnt = 0 rec = self.getRecord() while(True): try: collection.update(spec, {'$set':rec}, False, False, True, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_154, 'Update failed!PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True #Can not implement adoCheckUpdateStr method:No key defined! #Can not implement adoCheckUpdateExStr method:No key defined! def getAdoRecords(self, resultCollection): '''²éѯ½á¹û´ò°ü³É¶þ½øÖÆÁ÷''' result = '' result = CommFunc.WriteDWORD(result, resultCollection.count()) for rec in resultCollection: self.readRecord(rec) result += self.getBuffer() return result def adoQueryIndex(self, collection): '''ÓÃË÷Òý×ֶβéÕÒ''' resultCollection = collection.find({'PlayerID':self.PlayerID}) return self.getAdoRecords(resultCollection) def adoQueryCustom(self, collection, queryDict): '''×Ô¶¨Òå²éѯ''' resultCollection = collection.find(queryDict) return self.getAdoRecords(resultCollection) def adoQueryAll(self, collection): '''²éѯËùÓÐ''' resultCollection = collection.find() return self.getAdoRecords(resultCollection) def adoDeleteByIndex(self, collection): '''¸ù¾ÝË÷Òýɾ³ý''' trycnt = 0 while(True): try: collection.remove({'PlayerID':self.PlayerID}) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:PlayerID = %s"%(self.__class__.__name__, inspect.stack()[0][3], self.PlayerID)) msg = error.formatMsg('error', error.ERROR_NO_155, 'delete failure!self.PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True def outputString(self): output = '''//Íæ¼Ò¼¼Äܱí#tagRoleSkill: PlayerID = %s, SkillID = %s, RemainTime = %s, Proficiency = %s, ADOResult = %s, '''%( self.PlayerID, self.SkillID, self.RemainTime, self.Proficiency, self.ADOResult, ) return output def dumpString(self): output = '''%1s\t%1s\t%1s\t%1s'''%( self.PlayerID, self.SkillID, self.RemainTime, self.Proficiency, ) return output #------------------------------------------------------ #±£´æ·þÎñÆ÷¶ËÊý¾Ý¿â°æ±¾#tagServerDataVersionNO class tagServerDataVersionNO(Structure): _pack_ = 1 _fields_ = [ ('Type', ctypes.c_ubyte), ('ServerDataVersionNO', ctypes.c_ulong), ('GameServerDataVersionNO', ctypes.c_ulong), ('ADOResult', ctypes.c_ulong), ] def __init__(self): Structure.__init__(self) self.clear() def clear(self): memset(addressof(self), 0, self.getLength()) def readData(self, buf, pos = 0, length = 0): if not pos <= length: msg = error.formatMsg('error', error.ERROR_NO_150, '(pos = %s)> (length = %s)'%(pos, length)) mylog.error(msg) return -1 if len(buf) < pos + self.getLength(): msg = error.formatMsg('error', error.ERROR_NO_151, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength())) mylog.error(msg) return -1 self.clear() memmove(addressof(self), buf[pos:], self.getLength()) return self.getLength() def getBuffer(self): buf = create_string_buffer(self.getLength()) memmove(addressof(buf), addressof(self), self.getLength()) return string_at(addressof(buf), self.getLength()) def getLength(self): return sizeof(tagServerDataVersionNO) def getRecord(self): '''×éÖ¯´æ´¢¼Ç¼''' rec = {} rec[u'Type'] = self.Type rec[u'ServerDataVersionNO'] = self.ServerDataVersionNO rec[u'GameServerDataVersionNO'] = self.GameServerDataVersionNO return rec def readRecord(self, rec): '''ÓÉÓÚMongoDB¶Á³öÀ´ÊÇunicode,ËùÓÐ×Ö·û´®ÐèÒª½øÐÐת»»''' self.Type = rec.get(u'Type', 0) self.ServerDataVersionNO = rec.get(u'ServerDataVersionNO', 0) self.GameServerDataVersionNO = rec.get(u'GameServerDataVersionNO', 0) #Can not implement adoLoadStr method:No key defined! def adoInsert(self, collection): '''Ö´ÐвåÈë''' trycnt = 0 rec = self.getRecord() while(True): try: collection.insert(rec, False, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_152, 'Insert failed!Type = %s, error = %s, trycnt = %d'%(self.Type, err, trycnt)) mylog.error(msg) return False return True #Can not implement adoUpdateStr method:No key defined! def adoUpdateEx(self, collection, spec): '''Ö´ÐиüÐÂ''' trycnt = 0 rec = self.getRecord() while(True): try: collection.update(spec, {'$set':rec}, False, False, True, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_154, 'Update failed!Type = %s, error = %s, trycnt = %d'%(self.Type, err, trycnt)) mylog.error(msg) return False return True #Can not implement adoCheckUpdateStr method:No key defined! #Can not implement adoCheckUpdateExStr method:No key defined! def getAdoRecords(self, resultCollection): '''²éѯ½á¹û´ò°ü³É¶þ½øÖÆÁ÷''' result = '' result = CommFunc.WriteDWORD(result, resultCollection.count()) for rec in resultCollection: self.readRecord(rec) result += self.getBuffer() return result def adoQueryIndex(self, collection): '''ÓÃË÷Òý×ֶβéÕÒ''' resultCollection = collection.find({'Type':self.Type}) return self.getAdoRecords(resultCollection) def adoQueryCustom(self, collection, queryDict): '''×Ô¶¨Òå²éѯ''' resultCollection = collection.find(queryDict) return self.getAdoRecords(resultCollection) def adoQueryAll(self, collection): '''²éѯËùÓÐ''' resultCollection = collection.find() return self.getAdoRecords(resultCollection) def adoDeleteByIndex(self, collection): '''¸ù¾ÝË÷Òýɾ³ý''' trycnt = 0 while(True): try: collection.remove({'Type':self.Type}) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:Type = %s"%(self.__class__.__name__, inspect.stack()[0][3], self.Type)) msg = error.formatMsg('error', error.ERROR_NO_155, 'delete failure!self.Type = %s, error = %s, trycnt = %d'%(self.Type, err, trycnt)) mylog.error(msg) return False return True def outputString(self): output = '''//±£´æ·þÎñÆ÷¶ËÊý¾Ý¿â°æ±¾#tagServerDataVersionNO: Type = %s, ServerDataVersionNO = %s, GameServerDataVersionNO = %s, ADOResult = %s, '''%( self.Type, self.ServerDataVersionNO, self.GameServerDataVersionNO, self.ADOResult, ) return output def dumpString(self): output = '''%1s\t%1s\t%1s'''%( self.Type, self.ServerDataVersionNO, self.GameServerDataVersionNO, ) return output #------------------------------------------------------ #¶ÓÎé³ÉÔ±±í#tagTeamMemberTable class tagTeamMemberTable(Structure): _pack_ = 1 _fields_ = [ ('TeamID', ctypes.c_ulong), ('PlayerID', ctypes.c_ulong), ('TeamIndex', ctypes.c_ubyte), ('TeamLV', ctypes.c_ubyte), ('PlayerName', ctypes.c_char * 33), ('Job', ctypes.c_ubyte), ('JobLevel', ctypes.c_ubyte), ('LV', ctypes.c_ushort), ('RealmLV', ctypes.c_ushort), ('Face', ctypes.c_ulong), ('FacePic', ctypes.c_ulong), ('ADOResult', ctypes.c_ulong), ] def __init__(self): Structure.__init__(self) self.clear() def clear(self): memset(addressof(self), 0, self.getLength()) def readData(self, buf, pos = 0, length = 0): if not pos <= length: msg = error.formatMsg('error', error.ERROR_NO_148, '(pos = %s) > (length = %s)'%(pos, length)) mylog.error(msg) return -1 if len(buf) < pos + self.getLength(): msg = error.formatMsg('error', error.ERROR_NO_149, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength())) mylog.error(msg) self.clear() self.TeamID, pos = CommFunc.ReadDWORD(buf, pos) self.PlayerID, pos = CommFunc.ReadDWORD(buf, pos) self.TeamIndex, pos = CommFunc.ReadBYTE(buf, pos) self.TeamLV, pos = CommFunc.ReadBYTE(buf, pos) self.PlayerName, pos = CommFunc.ReadString(buf, pos, 33) self.Job, pos = CommFunc.ReadBYTE(buf, pos) self.JobLevel, pos = CommFunc.ReadBYTE(buf, pos) self.LV, pos = CommFunc.ReadWORD(buf, pos) self.RealmLV, pos = CommFunc.ReadWORD(buf, pos) self.Face, pos = CommFunc.ReadDWORD(buf, pos) self.FacePic, pos = CommFunc.ReadDWORD(buf, pos) return self.getLength() def getBuffer(self): buf = create_string_buffer(self.getLength()) memmove(addressof(buf), addressof(self), self.getLength()) return string_at(addressof(buf), self.getLength()) def getLength(self): return sizeof(tagTeamMemberTable) def getRecord(self): '''×éÖ¯´æ´¢¼Ç¼''' rec = {} rec[u'TeamID'] = self.TeamID rec[u'PlayerID'] = self.PlayerID rec[u'TeamIndex'] = self.TeamIndex rec[u'TeamLV'] = self.TeamLV rec[u'PlayerName'] = fix_incomingText(self.PlayerName) rec[u'Job'] = self.Job rec[u'JobLevel'] = self.JobLevel rec[u'LV'] = self.LV rec[u'RealmLV'] = self.RealmLV rec[u'Face'] = self.Face rec[u'FacePic'] = self.FacePic return rec def readRecord(self, rec): '''ÓÉÓÚMongoDB¶Á³öÀ´ÊÇunicode,ËùÓÐ×Ö·û´®ÐèÒª½øÐÐת»»''' self.TeamID = rec.get(u'TeamID', 0) self.PlayerID = rec.get(u'PlayerID', 0) self.TeamIndex = rec.get(u'TeamIndex', 0) self.TeamLV = rec.get(u'TeamLV', 0) self.PlayerName = fix_outgoingText(rec.get(u'PlayerName', u'')) self.Job = rec.get(u'Job', 0) self.JobLevel = rec.get(u'JobLevel', 0) self.LV = rec.get(u'LV', 0) self.RealmLV = rec.get(u'RealmLV', 0) self.Face = rec.get(u'Face', 0) self.FacePic = rec.get(u'FacePic', 0) #Can not implement adoLoadStr method:No key defined! def adoInsert(self, collection): '''Ö´ÐвåÈë''' trycnt = 0 rec = self.getRecord() while(True): try: collection.insert(rec, False, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_152, 'Insert failed!TeamID = %s, error = %s, trycnt = %d'%(self.TeamID, err, trycnt)) mylog.error(msg) return False return True #Can not implement adoUpdateStr method:No key defined! def adoUpdateEx(self, collection, spec): '''Ö´ÐиüÐÂ''' trycnt = 0 rec = self.getRecord() while(True): try: collection.update(spec, {'$set':rec}, False, False, True, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_154, 'Update failed!TeamID = %s, error = %s, trycnt = %d'%(self.TeamID, err, trycnt)) mylog.error(msg) return False return True #Can not implement adoCheckUpdateStr method:No key defined! #Can not implement adoCheckUpdateExStr method:No key defined! def getAdoRecords(self, resultCollection): '''²éѯ½á¹û´ò°ü³É¶þ½øÖÆÁ÷''' result = '' result = CommFunc.WriteDWORD(result, resultCollection.count()) for rec in resultCollection: self.readRecord(rec) result += self.getBuffer() return result def adoQueryIndex(self, collection): '''ÓÃË÷Òý×ֶβéÕÒ''' resultCollection = collection.find({'TeamID':self.TeamID}) return self.getAdoRecords(resultCollection) def adoQueryCustom(self, collection, queryDict): '''×Ô¶¨Òå²éѯ''' resultCollection = collection.find(queryDict) return self.getAdoRecords(resultCollection) def adoQueryAll(self, collection): '''²éѯËùÓÐ''' resultCollection = collection.find() return self.getAdoRecords(resultCollection) def adoDeleteByIndex(self, collection): '''¸ù¾ÝË÷Òýɾ³ý''' trycnt = 0 while(True): try: collection.remove({'TeamID':self.TeamID}) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:TeamID = %s"%(self.__class__.__name__, inspect.stack()[0][3], self.TeamID)) msg = error.formatMsg('error', error.ERROR_NO_155, 'delete failure!self.TeamID = %s, error = %s, trycnt = %d'%(self.TeamID, err, trycnt)) mylog.error(msg) return False return True def outputString(self): output = '''//¶ÓÎé³ÉÔ±±í#tagTeamMemberTable: TeamID = %s, PlayerID = %s, TeamIndex = %s, TeamLV = %s, PlayerName = %s, Job = %s, JobLevel = %s, LV = %s, RealmLV = %s, Face = %s, FacePic = %s, ADOResult = %s, '''%( self.TeamID, self.PlayerID, self.TeamIndex, self.TeamLV, self.PlayerName, self.Job, self.JobLevel, self.LV, self.RealmLV, self.Face, self.FacePic, self.ADOResult, ) return output def dumpString(self): output = '''%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s'''%( self.TeamID, self.PlayerID, self.TeamIndex, self.TeamLV, self.PlayerName, self.Job, self.JobLevel, self.LV, self.RealmLV, self.Face, self.FacePic, ) return output #CharÊý×éÀàÐÍSet½Ó¿Ú,ʹÓøýӿڶԴËÀàÐÍÊý¾Ý¸³Öµ£¬·ÀÖ¹¸³ÖµµÄÊý¾Ý¹ý³¤±¨´í def SetPlayerName(self,Str): if len(Str)<=33: self.PlayerName = Str else: self.PlayerName = Str[:33] #ͨÓüǼ±í#tagUniversalGameRec class tagUniversalGameRec(Structure): _pack_ = 1 _fields_ = [ ('Type', ctypes.c_ubyte), ('Time', ctypes.c_double), ('StrValue1', ctypes.c_char * 33), ('StrValue2', ctypes.c_char * 33), ('Value1', ctypes.c_ulong), ('Value2', ctypes.c_ulong), ('Value3', ctypes.c_ulong), ('Value4', ctypes.c_ulong), ('Value5', ctypes.c_ulong), ('StrValue3', ctypes.c_char * 256), ('ADOResult', ctypes.c_ulong), ] def __init__(self): Structure.__init__(self) self.clear() def clear(self): memset(addressof(self), 0, self.getLength()) def readData(self, buf, pos = 0, length = 0): if not pos <= length: msg = error.formatMsg('error', error.ERROR_NO_148, '(pos = %s) > (length = %s)'%(pos, length)) mylog.error(msg) return -1 if len(buf) < pos + self.getLength(): msg = error.formatMsg('error', error.ERROR_NO_149, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength())) mylog.error(msg) self.clear() self.Type, pos = CommFunc.ReadBYTE(buf, pos) self.Time, pos = CommFunc.ReadDouble(buf, pos) self.StrValue1, pos = CommFunc.ReadString(buf, pos, 33) self.StrValue2, pos = CommFunc.ReadString(buf, pos, 33) self.Value1, pos = CommFunc.ReadDWORD(buf, pos) self.Value2, pos = CommFunc.ReadDWORD(buf, pos) self.Value3, pos = CommFunc.ReadDWORD(buf, pos) self.Value4, pos = CommFunc.ReadDWORD(buf, pos) self.Value5, pos = CommFunc.ReadDWORD(buf, pos) self.StrValue3, pos = CommFunc.ReadString(buf, pos, 256) return self.getLength() def getBuffer(self): buf = create_string_buffer(self.getLength()) memmove(addressof(buf), addressof(self), self.getLength()) return string_at(addressof(buf), self.getLength()) def getLength(self): return sizeof(tagUniversalGameRec) def getRecord(self): '''×éÖ¯´æ´¢¼Ç¼''' rec = {} rec[u'Type'] = self.Type rec[u'Time'] = self.Time rec[u'StrValue1'] = fix_incomingText(self.StrValue1) rec[u'StrValue2'] = fix_incomingText(self.StrValue2) rec[u'Value1'] = self.Value1 rec[u'Value2'] = self.Value2 rec[u'Value3'] = self.Value3 rec[u'Value4'] = self.Value4 rec[u'Value5'] = self.Value5 rec[u'StrValue3'] = fix_incomingText(self.StrValue3) return rec def readRecord(self, rec): '''ÓÉÓÚMongoDB¶Á³öÀ´ÊÇunicode,ËùÓÐ×Ö·û´®ÐèÒª½øÐÐת»»''' self.Type = rec.get(u'Type', 0) self.Time = rec.get(u'Time', 0) self.StrValue1 = fix_outgoingText(rec.get(u'StrValue1', u'')) self.StrValue2 = fix_outgoingText(rec.get(u'StrValue2', u'')) self.Value1 = rec.get(u'Value1', 0) self.Value2 = rec.get(u'Value2', 0) self.Value3 = rec.get(u'Value3', 0) self.Value4 = rec.get(u'Value4', 0) self.Value5 = rec.get(u'Value5', 0) self.StrValue3 = fix_outgoingText(rec.get(u'StrValue3', u'')) #Can not implement adoLoadStr method:No key defined! def adoInsert(self, collection): '''Ö´ÐвåÈë''' trycnt = 0 rec = self.getRecord() while(True): try: collection.insert(rec, False, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_152, 'Insert failed!Type = %s, error = %s, trycnt = %d'%(self.Type, err, trycnt)) mylog.error(msg) return False return True #Can not implement adoUpdateStr method:No key defined! def adoUpdateEx(self, collection, spec): '''Ö´ÐиüÐÂ''' trycnt = 0 rec = self.getRecord() while(True): try: collection.update(spec, {'$set':rec}, False, False, True, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_154, 'Update failed!Type = %s, error = %s, trycnt = %d'%(self.Type, err, trycnt)) mylog.error(msg) return False return True #Can not implement adoCheckUpdateStr method:No key defined! #Can not implement adoCheckUpdateExStr method:No key defined! def getAdoRecords(self, resultCollection): '''²éѯ½á¹û´ò°ü³É¶þ½øÖÆÁ÷''' result = '' result = CommFunc.WriteDWORD(result, resultCollection.count()) for rec in resultCollection: self.readRecord(rec) result += self.getBuffer() return result def adoQueryIndex(self, collection): '''ÓÃË÷Òý×ֶβéÕÒ''' resultCollection = collection.find({'Type':self.Type}) return self.getAdoRecords(resultCollection) def adoQueryCustom(self, collection, queryDict): '''×Ô¶¨Òå²éѯ''' resultCollection = collection.find(queryDict) return self.getAdoRecords(resultCollection) def adoQueryAll(self, collection): '''²éѯËùÓÐ''' resultCollection = collection.find() return self.getAdoRecords(resultCollection) def adoDeleteByIndex(self, collection): '''¸ù¾ÝË÷Òýɾ³ý''' trycnt = 0 while(True): try: collection.remove({'Type':self.Type}) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:Type = %s"%(self.__class__.__name__, inspect.stack()[0][3], self.Type)) msg = error.formatMsg('error', error.ERROR_NO_155, 'delete failure!self.Type = %s, error = %s, trycnt = %d'%(self.Type, err, trycnt)) mylog.error(msg) return False return True def outputString(self): output = '''//ͨÓüǼ±í#tagUniversalGameRec: Type = %s, Time = %s, StrValue1 = %s, StrValue2 = %s, Value1 = %s, Value2 = %s, Value3 = %s, Value4 = %s, Value5 = %s, StrValue3 = %s, ADOResult = %s, '''%( self.Type, self.Time, self.StrValue1, self.StrValue2, self.Value1, self.Value2, self.Value3, self.Value4, self.Value5, self.StrValue3, self.ADOResult, ) return output def dumpString(self): output = '''%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s'''%( self.Type, self.Time, self.StrValue1, self.StrValue2, self.Value1, self.Value2, self.Value3, self.Value4, self.Value5, self.StrValue3, ) return output #CharÊý×éÀàÐÍSet½Ó¿Ú,ʹÓøýӿڶԴËÀàÐÍÊý¾Ý¸³Öµ£¬·ÀÖ¹¸³ÖµµÄÊý¾Ý¹ý³¤±¨´í def SetStrValue1(self,Str): if len(Str)<=33: self.StrValue1 = Str else: self.StrValue1 = Str[:33] def SetStrValue2(self,Str): if len(Str)<=33: self.StrValue2 = Str else: self.StrValue2 = Str[:33] def SetStrValue3(self,Str): if len(Str)<=256: self.StrValue3 = Str else: self.StrValue3 = Str[:256] #Õó·¨#tagBattleFormation class tagBattleFormation(Structure): _pack_ = 1 _fields_ = [ ('FormationID', ctypes.c_ulong), ('PlayerID', ctypes.c_ulong), ('IsActive', ctypes.c_ubyte), ('LV', ctypes.c_ushort), ('Pos1', ctypes.c_ulong), ('Pos2', ctypes.c_ulong), ('Pos3', ctypes.c_ulong), ('Pos4', ctypes.c_ulong), ('Pos5', ctypes.c_ulong), ('ADOResult', ctypes.c_ulong), ] def __init__(self): Structure.__init__(self) self.clear() def clear(self): memset(addressof(self), 0, self.getLength()) def readData(self, buf, pos = 0, length = 0): if not pos <= length: msg = error.formatMsg('error', error.ERROR_NO_150, '(pos = %s)> (length = %s)'%(pos, length)) mylog.error(msg) return -1 if len(buf) < pos + self.getLength(): msg = error.formatMsg('error', error.ERROR_NO_151, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength())) mylog.error(msg) return -1 self.clear() memmove(addressof(self), buf[pos:], self.getLength()) return self.getLength() def getBuffer(self): buf = create_string_buffer(self.getLength()) memmove(addressof(buf), addressof(self), self.getLength()) return string_at(addressof(buf), self.getLength()) def getLength(self): return sizeof(tagBattleFormation) def getRecord(self): '''×éÖ¯´æ´¢¼Ç¼''' rec = {} rec[u'FormationID'] = self.FormationID rec[u'PlayerID'] = self.PlayerID rec[u'IsActive'] = self.IsActive rec[u'LV'] = self.LV rec[u'Pos1'] = self.Pos1 rec[u'Pos2'] = self.Pos2 rec[u'Pos3'] = self.Pos3 rec[u'Pos4'] = self.Pos4 rec[u'Pos5'] = self.Pos5 return rec def readRecord(self, rec): '''ÓÉÓÚMongoDB¶Á³öÀ´ÊÇunicode,ËùÓÐ×Ö·û´®ÐèÒª½øÐÐת»»''' self.FormationID = rec.get(u'FormationID', 0) self.PlayerID = rec.get(u'PlayerID', 0) self.IsActive = rec.get(u'IsActive', 0) self.LV = rec.get(u'LV', 0) self.Pos1 = rec.get(u'Pos1', 0) self.Pos2 = rec.get(u'Pos2', 0) self.Pos3 = rec.get(u'Pos3', 0) self.Pos4 = rec.get(u'Pos4', 0) self.Pos5 = rec.get(u'Pos5', 0) #Can not implement adoLoadStr method:No key defined! #Can not implement adoInsertStr method:No key defined! #Can not implement adoUpdateStr method:No key defined! #Can not implement adoUpdateStr method:No key defined! #Can not implement adoCheckUpdateStr method:No key defined! #Can not implement adoCheckUpdateExStr method:No key defined! def getAdoRecords(self, resultCollection): '''²éѯ½á¹û´ò°ü³É¶þ½øÖÆÁ÷''' result = '' result = CommFunc.WriteDWORD(result, resultCollection.count()) for rec in resultCollection: self.readRecord(rec) result += self.getBuffer() return result #Can not implement adoQueryIndexStr method:No key defined! def adoQueryCustom(self, collection, queryDict): '''×Ô¶¨Òå²éѯ''' resultCollection = collection.find(queryDict) return self.getAdoRecords(resultCollection) def adoQueryAll(self, collection): '''²éѯËùÓÐ''' resultCollection = collection.find() return self.getAdoRecords(resultCollection) #Can not implement adoDeleteByIndexStr method:No key defined! def outputString(self): output = '''//Õó·¨#tagBattleFormation: FormationID = %s, PlayerID = %s, IsActive = %s, LV = %s, Pos1 = %s, Pos2 = %s, Pos3 = %s, Pos4 = %s, Pos5 = %s, ADOResult = %s, '''%( self.FormationID, self.PlayerID, self.IsActive, self.LV, self.Pos1, self.Pos2, self.Pos3, self.Pos4, self.Pos5, self.ADOResult, ) return output def dumpString(self): output = '''%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s'''%( self.FormationID, self.PlayerID, self.IsActive, self.LV, self.Pos1, self.Pos2, self.Pos3, self.Pos4, self.Pos5, ) return output #½»Ò×ËùÎïÆ·#tagGameBourseItem class tagGameBourseItem(Structure): _pack_ = 1 _fields_ = [ ('ItemGUID', ctypes.c_char * 40), ('PlayerID', ctypes.c_ulong), ('ItemTypeID', ctypes.c_ulong), ('PlayerName', ctypes.c_char * 33), ('IsSoldOut', ctypes.c_ubyte), ('CustomerPlayerID', ctypes.c_ulong), ('CustomerPlayerName', ctypes.c_char * 33), ('PriceType', ctypes.c_ubyte), ('PriceCount', ctypes.c_ulong), ('OnSaleTime', ctypes.c_char * 30), ('SoldOutTime', ctypes.c_char * 30), ('Type', ctypes.c_ulong), ('EquipPlace', ctypes.c_ubyte), ('LV', ctypes.c_ushort), ('UseLV', ctypes.c_ushort), ('JobLimit', ctypes.c_ulong), ('ItemQuality', ctypes.c_ubyte), ('Count', ctypes.c_ushort), ('ItemColor', ctypes.c_ubyte), ('UserDataLen', ctypes.c_ulong), ('UserData', ctypes.c_char_p), ('OperateInfo', ctypes.c_ulong), ('Pwd', ctypes.c_char * 8), ('EquipGS', ctypes.c_ulong), ('ItemName', ctypes.c_char * 33), ('ADOResult', ctypes.c_ulong), ] def __init__(self): Structure.__init__(self) self.clear() def clear(self): self.ItemGUID = '' self.PlayerID = 0 self.ItemTypeID = 0 self.PlayerName = '' self.IsSoldOut = 0 self.CustomerPlayerID = 0 self.CustomerPlayerName = '' self.PriceType = 0 self.PriceCount = 0 self.OnSaleTime = '' self.SoldOutTime = '' self.Type = 0 self.EquipPlace = 0 self.LV = 0 self.UseLV = 0 self.JobLimit = 0 self.ItemQuality = 0 self.Count = 0 self.ItemColor = 0 self.UserDataLen = 0 self.UserData = '' self.OperateInfo = 0 self.Pwd = '' self.EquipGS = 0 self.ItemName = '' def readData(self, buf, pos = 0, length = 0): if not pos <= length: msg = error.formatMsg('error', error.ERROR_NO_148, '(pos = %s) > (length = %s)'%(pos, length)) mylog.error(msg) return -1 if len(buf) < pos + self.getLength(): msg = error.formatMsg('error', error.ERROR_NO_149, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength())) mylog.error(msg) self.clear() self.ItemGUID, pos = CommFunc.ReadString(buf, pos, 40) self.PlayerID, pos = CommFunc.ReadDWORD(buf, pos) self.ItemTypeID, pos = CommFunc.ReadDWORD(buf, pos) self.PlayerName, pos = CommFunc.ReadString(buf, pos, 33) self.IsSoldOut, pos = CommFunc.ReadBYTE(buf, pos) self.CustomerPlayerID, pos = CommFunc.ReadDWORD(buf, pos) self.CustomerPlayerName, pos = CommFunc.ReadString(buf, pos, 33) self.PriceType, pos = CommFunc.ReadBYTE(buf, pos) self.PriceCount, pos = CommFunc.ReadDWORD(buf, pos) self.OnSaleTime, pos = CommFunc.ReadString(buf, pos, 30) self.SoldOutTime, pos = CommFunc.ReadString(buf, pos, 30) self.Type, pos = CommFunc.ReadDWORD(buf, pos) self.EquipPlace, pos = CommFunc.ReadBYTE(buf, pos) self.LV, pos = CommFunc.ReadWORD(buf, pos) self.UseLV, pos = CommFunc.ReadWORD(buf, pos) self.JobLimit, pos = CommFunc.ReadDWORD(buf, pos) self.ItemQuality, pos = CommFunc.ReadBYTE(buf, pos) self.Count, pos = CommFunc.ReadWORD(buf, pos) self.ItemColor, pos = CommFunc.ReadBYTE(buf, pos) self.UserDataLen, pos = CommFunc.ReadDWORD(buf, pos) tmp, pos = CommFunc.ReadString(buf, pos, self.UserDataLen) self.UserData = ctypes.c_char_p(tmp) self.OperateInfo, pos = CommFunc.ReadDWORD(buf, pos) self.Pwd, pos = CommFunc.ReadString(buf, pos, 8) self.EquipGS, pos = CommFunc.ReadDWORD(buf, pos) self.ItemName, pos = CommFunc.ReadString(buf, pos, 33) return self.getLength() def getBuffer(self): buf = '' buf = CommFunc.WriteString(buf, sizeof(ctypes.c_char) * 40, self.ItemGUID) buf = CommFunc.WriteDWORD(buf, self.PlayerID) buf = CommFunc.WriteDWORD(buf, self.ItemTypeID) buf = CommFunc.WriteString(buf, sizeof(ctypes.c_char) * 33, self.PlayerName) buf = CommFunc.WriteBYTE(buf, self.IsSoldOut) buf = CommFunc.WriteDWORD(buf, self.CustomerPlayerID) buf = CommFunc.WriteString(buf, sizeof(ctypes.c_char) * 33, self.CustomerPlayerName) buf = CommFunc.WriteBYTE(buf, self.PriceType) buf = CommFunc.WriteDWORD(buf, self.PriceCount) buf = CommFunc.WriteString(buf, sizeof(ctypes.c_char) * 30, self.OnSaleTime) buf = CommFunc.WriteString(buf, sizeof(ctypes.c_char) * 30, self.SoldOutTime) buf = CommFunc.WriteDWORD(buf, self.Type) buf = CommFunc.WriteBYTE(buf, self.EquipPlace) buf = CommFunc.WriteWORD(buf, self.LV) buf = CommFunc.WriteWORD(buf, self.UseLV) buf = CommFunc.WriteDWORD(buf, self.JobLimit) buf = CommFunc.WriteBYTE(buf, self.ItemQuality) buf = CommFunc.WriteWORD(buf, self.Count) buf = CommFunc.WriteBYTE(buf, self.ItemColor) buf = CommFunc.WriteDWORD(buf, self.UserDataLen) buf = CommFunc.WriteString(buf, self.UserDataLen, self.UserData) buf = CommFunc.WriteDWORD(buf, self.OperateInfo) buf = CommFunc.WriteString(buf, sizeof(ctypes.c_char) * 8, self.Pwd) buf = CommFunc.WriteDWORD(buf, self.EquipGS) buf = CommFunc.WriteString(buf, sizeof(ctypes.c_char) * 33, self.ItemName) return buf def getLength(self): length = 0 length += sizeof(ctypes.c_char) * 40 length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_char) * 33 length += sizeof(ctypes.c_ubyte) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_char) * 33 length += sizeof(ctypes.c_ubyte) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_char) * 30 length += sizeof(ctypes.c_char) * 30 length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ubyte) length += sizeof(ctypes.c_ushort) length += sizeof(ctypes.c_ushort) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ubyte) length += sizeof(ctypes.c_ushort) length += sizeof(ctypes.c_ubyte) length += sizeof(ctypes.c_ulong) length += self.UserDataLen length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_char) * 8 length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_char) * 33 return length def getRecord(self): '''×éÖ¯´æ´¢¼Ç¼''' rec = {} rec[u'ItemGUID'] = fix_incomingText(self.ItemGUID) rec[u'PlayerID'] = self.PlayerID rec[u'ItemTypeID'] = self.ItemTypeID rec[u'PlayerName'] = fix_incomingText(self.PlayerName) rec[u'IsSoldOut'] = self.IsSoldOut rec[u'CustomerPlayerID'] = self.CustomerPlayerID rec[u'CustomerPlayerName'] = fix_incomingText(self.CustomerPlayerName) rec[u'PriceType'] = self.PriceType rec[u'PriceCount'] = self.PriceCount rec[u'OnSaleTime'] = fix_incomingText(self.OnSaleTime) rec[u'SoldOutTime'] = fix_incomingText(self.SoldOutTime) rec[u'Type'] = self.Type rec[u'EquipPlace'] = self.EquipPlace rec[u'LV'] = self.LV rec[u'UseLV'] = self.UseLV rec[u'JobLimit'] = self.JobLimit rec[u'ItemQuality'] = self.ItemQuality rec[u'Count'] = self.Count rec[u'ItemColor'] = self.ItemColor rec[u'UserDataLen'] = self.UserDataLen rec[u'UserData'] = fix_incomingText(self.UserData) rec[u'OperateInfo'] = self.OperateInfo rec[u'Pwd'] = fix_incomingText(self.Pwd) rec[u'EquipGS'] = self.EquipGS rec[u'ItemName'] = fix_incomingText(self.ItemName) return rec def readRecord(self, rec): '''ÓÉÓÚMongoDB¶Á³öÀ´ÊÇunicode,ËùÓÐ×Ö·û´®ÐèÒª½øÐÐת»»''' self.ItemGUID = fix_outgoingText(rec.get(u'ItemGUID', u'')) self.PlayerID = rec.get(u'PlayerID', 0) self.ItemTypeID = rec.get(u'ItemTypeID', 0) self.PlayerName = fix_outgoingText(rec.get(u'PlayerName', u'')) self.IsSoldOut = rec.get(u'IsSoldOut', 0) self.CustomerPlayerID = rec.get(u'CustomerPlayerID', 0) self.CustomerPlayerName = fix_outgoingText(rec.get(u'CustomerPlayerName', u'')) self.PriceType = rec.get(u'PriceType', 0) self.PriceCount = rec.get(u'PriceCount', 0) self.OnSaleTime = fix_outgoingText(rec.get(u'OnSaleTime', u'')) self.SoldOutTime = fix_outgoingText(rec.get(u'SoldOutTime', u'')) self.Type = rec.get(u'Type', 0) self.EquipPlace = rec.get(u'EquipPlace', 0) self.LV = rec.get(u'LV', 0) self.UseLV = rec.get(u'UseLV', 0) self.JobLimit = rec.get(u'JobLimit', 0) self.ItemQuality = rec.get(u'ItemQuality', 0) self.Count = rec.get(u'Count', 0) self.ItemColor = rec.get(u'ItemColor', 0) self.UserDataLen = rec.get(u'UserDataLen', 0) self.UserData = fix_outgoingText(rec.get(u'UserData', u'')) self.OperateInfo = rec.get(u'OperateInfo', 0) self.Pwd = fix_outgoingText(rec.get(u'Pwd', u'')) self.EquipGS = rec.get(u'EquipGS', 0) self.ItemName = fix_outgoingText(rec.get(u'ItemName', u'')) #Can not implement adoLoadStr method:No key defined! def adoInsert(self, collection): '''Ö´ÐвåÈë''' trycnt = 0 rec = self.getRecord() while(True): try: collection.insert(rec, False, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_152, 'Insert failed!ItemGUID = %s, error = %s, trycnt = %d'%(self.ItemGUID, err, trycnt)) mylog.error(msg) return False return True #Can not implement adoUpdateStr method:No key defined! def adoUpdateEx(self, collection, spec): '''Ö´ÐиüÐÂ''' trycnt = 0 rec = self.getRecord() while(True): try: collection.update(spec, {'$set':rec}, False, False, True, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_154, 'Update failed!ItemGUID = %s, error = %s, trycnt = %d'%(self.ItemGUID, err, trycnt)) mylog.error(msg) return False return True #Can not implement adoCheckUpdateStr method:No key defined! #Can not implement adoCheckUpdateExStr method:No key defined! def getAdoRecords(self, resultCollection): '''²éѯ½á¹û´ò°ü³É¶þ½øÖÆÁ÷''' result = '' result = CommFunc.WriteDWORD(result, resultCollection.count()) for rec in resultCollection: self.readRecord(rec) result += self.getBuffer() return result def adoQueryIndex(self, collection): '''ÓÃË÷Òý×ֶβéÕÒ''' resultCollection = collection.find({'ItemGUID':fix_incomingText(self.ItemGUID)}) return self.getAdoRecords(resultCollection) def adoQueryCustom(self, collection, queryDict): '''×Ô¶¨Òå²éѯ''' resultCollection = collection.find(queryDict) return self.getAdoRecords(resultCollection) def adoQueryAll(self, collection): '''²éѯËùÓÐ''' resultCollection = collection.find() return self.getAdoRecords(resultCollection) def adoDeleteByIndex(self, collection): '''¸ù¾ÝË÷Òýɾ³ý''' trycnt = 0 while(True): try: collection.remove({'ItemGUID':fix_incomingText(self.ItemGUID)}) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:ItemGUID = %s"%(self.__class__.__name__, inspect.stack()[0][3], self.ItemGUID)) msg = error.formatMsg('error', error.ERROR_NO_155, 'delete failure!self.ItemGUID = %s, error = %s, trycnt = %d'%(self.ItemGUID, err, trycnt)) mylog.error(msg) return False return True def outputString(self): output = '''//½»Ò×ËùÎïÆ·#tagGameBourseItem: ItemGUID = %s, PlayerID = %s, ItemTypeID = %s, PlayerName = %s, IsSoldOut = %s, CustomerPlayerID = %s, CustomerPlayerName = %s, PriceType = %s, PriceCount = %s, OnSaleTime = %s, SoldOutTime = %s, Type = %s, EquipPlace = %s, LV = %s, UseLV = %s, JobLimit = %s, ItemQuality = %s, Count = %s, ItemColor = %s, UserDataLen = %s, UserData = %s, OperateInfo = %s, Pwd = %s, EquipGS = %s, ItemName = %s, ADOResult = %s, '''%( self.ItemGUID, self.PlayerID, self.ItemTypeID, self.PlayerName, self.IsSoldOut, self.CustomerPlayerID, self.CustomerPlayerName, self.PriceType, self.PriceCount, self.OnSaleTime, self.SoldOutTime, self.Type, self.EquipPlace, self.LV, self.UseLV, self.JobLimit, self.ItemQuality, self.Count, self.ItemColor, self.UserDataLen, self.UserData, self.OperateInfo, self.Pwd, self.EquipGS, self.ItemName, self.ADOResult, ) return output def dumpString(self): output = '''%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s'''%( self.ItemGUID, self.PlayerID, self.ItemTypeID, self.PlayerName, self.IsSoldOut, self.CustomerPlayerID, self.CustomerPlayerName, self.PriceType, self.PriceCount, self.OnSaleTime, self.SoldOutTime, self.Type, self.EquipPlace, self.LV, self.UseLV, self.JobLimit, self.ItemQuality, self.Count, self.ItemColor, self.UserDataLen, self.UserData, self.OperateInfo, self.Pwd, self.EquipGS, self.ItemName, ) return output #CharÊý×éÀàÐÍSet½Ó¿Ú,ʹÓøýӿڶԴËÀàÐÍÊý¾Ý¸³Öµ£¬·ÀÖ¹¸³ÖµµÄÊý¾Ý¹ý³¤±¨´í def SetItemGUID(self,Str): if len(Str)<=40: self.ItemGUID = Str else: self.ItemGUID = Str[:40] def SetPlayerName(self,Str): if len(Str)<=33: self.PlayerName = Str else: self.PlayerName = Str[:33] def SetCustomerPlayerName(self,Str): if len(Str)<=33: self.CustomerPlayerName = Str else: self.CustomerPlayerName = Str[:33] def SetOnSaleTime(self,Str): if len(Str)<=30: self.OnSaleTime = Str else: self.OnSaleTime = Str[:30] def SetSoldOutTime(self,Str): if len(Str)<=30: self.SoldOutTime = Str else: self.SoldOutTime = Str[:30] def SetPwd(self,Str): if len(Str)<=8: self.Pwd = Str else: self.Pwd = Str[:8] def SetItemName(self,Str): if len(Str)<=33: self.ItemName = Str else: self.ItemName = Str[:33] #ÌìÌݾº¼¼³¡Íæ¼Ò¼Ç¼±í#tagHighLadderPlayer class tagHighLadderPlayer(Structure): _pack_ = 1 _fields_ = [ ('PlayerID', ctypes.c_ulong), ('Oreder', ctypes.c_ushort), ('PlayerName', ctypes.c_char * 33), ('PlayerLV', ctypes.c_ushort), ('FightPower', ctypes.c_ulong), ('FightPropertyDataLen', ctypes.c_ulong), ('FightPropertyData', ctypes.c_char_p), ('ADOResult', ctypes.c_ulong), ] def __init__(self): Structure.__init__(self) self.clear() def clear(self): self.PlayerID = 0 self.Oreder = 0 self.PlayerName = '' self.PlayerLV = 0 self.FightPower = 0 self.FightPropertyDataLen = 0 self.FightPropertyData = '' def readData(self, buf, pos = 0, length = 0): if not pos <= length: msg = error.formatMsg('error', error.ERROR_NO_148, '(pos = %s) > (length = %s)'%(pos, length)) mylog.error(msg) return -1 if len(buf) < pos + self.getLength(): msg = error.formatMsg('error', error.ERROR_NO_149, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength())) mylog.error(msg) self.clear() self.PlayerID, pos = CommFunc.ReadDWORD(buf, pos) self.Oreder, pos = CommFunc.ReadWORD(buf, pos) self.PlayerName, pos = CommFunc.ReadString(buf, pos, 33) self.PlayerLV, pos = CommFunc.ReadWORD(buf, pos) self.FightPower, pos = CommFunc.ReadDWORD(buf, pos) self.FightPropertyDataLen, pos = CommFunc.ReadDWORD(buf, pos) tmp, pos = CommFunc.ReadString(buf, pos, self.FightPropertyDataLen) self.FightPropertyData = ctypes.c_char_p(tmp) return self.getLength() def getBuffer(self): buf = '' buf = CommFunc.WriteDWORD(buf, self.PlayerID) buf = CommFunc.WriteWORD(buf, self.Oreder) buf = CommFunc.WriteString(buf, sizeof(ctypes.c_char) * 33, self.PlayerName) buf = CommFunc.WriteWORD(buf, self.PlayerLV) buf = CommFunc.WriteDWORD(buf, self.FightPower) buf = CommFunc.WriteDWORD(buf, self.FightPropertyDataLen) buf = CommFunc.WriteString(buf, self.FightPropertyDataLen, self.FightPropertyData) return buf def getLength(self): length = 0 length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ushort) length += sizeof(ctypes.c_char) * 33 length += sizeof(ctypes.c_ushort) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += self.FightPropertyDataLen return length def getRecord(self): '''×éÖ¯´æ´¢¼Ç¼''' rec = {} rec[u'PlayerID'] = self.PlayerID rec[u'Oreder'] = self.Oreder rec[u'PlayerName'] = fix_incomingText(self.PlayerName) rec[u'PlayerLV'] = self.PlayerLV rec[u'FightPower'] = self.FightPower rec[u'FightPropertyDataLen'] = self.FightPropertyDataLen rec[u'FightPropertyData'] = fix_incomingText(self.FightPropertyData) return rec def readRecord(self, rec): '''ÓÉÓÚMongoDB¶Á³öÀ´ÊÇunicode,ËùÓÐ×Ö·û´®ÐèÒª½øÐÐת»»''' self.PlayerID = rec.get(u'PlayerID', 0) self.Oreder = rec.get(u'Oreder', 0) self.PlayerName = fix_outgoingText(rec.get(u'PlayerName', u'')) self.PlayerLV = rec.get(u'PlayerLV', 0) self.FightPower = rec.get(u'FightPower', 0) self.FightPropertyDataLen = rec.get(u'FightPropertyDataLen', 0) self.FightPropertyData = fix_outgoingText(rec.get(u'FightPropertyData', u'')) #Can not implement adoLoadStr method:No key defined! def adoInsert(self, collection): '''Ö´ÐвåÈë''' trycnt = 0 rec = self.getRecord() while(True): try: collection.insert(rec, False, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_152, 'Insert failed!PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True #Can not implement adoUpdateStr method:No key defined! def adoUpdateEx(self, collection, spec): '''Ö´ÐиüÐÂ''' trycnt = 0 rec = self.getRecord() while(True): try: collection.update(spec, {'$set':rec}, False, False, True, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_154, 'Update failed!PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True #Can not implement adoCheckUpdateStr method:No key defined! #Can not implement adoCheckUpdateExStr method:No key defined! def getAdoRecords(self, resultCollection): '''²éѯ½á¹û´ò°ü³É¶þ½øÖÆÁ÷''' result = '' result = CommFunc.WriteDWORD(result, resultCollection.count()) for rec in resultCollection: self.readRecord(rec) result += self.getBuffer() return result def adoQueryIndex(self, collection): '''ÓÃË÷Òý×ֶβéÕÒ''' resultCollection = collection.find({'PlayerID':self.PlayerID}) return self.getAdoRecords(resultCollection) def adoQueryCustom(self, collection, queryDict): '''×Ô¶¨Òå²éѯ''' resultCollection = collection.find(queryDict) return self.getAdoRecords(resultCollection) def adoQueryAll(self, collection): '''²éѯËùÓÐ''' resultCollection = collection.find() return self.getAdoRecords(resultCollection) def adoDeleteByIndex(self, collection): '''¸ù¾ÝË÷Òýɾ³ý''' trycnt = 0 while(True): try: collection.remove({'PlayerID':self.PlayerID}) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:PlayerID = %s"%(self.__class__.__name__, inspect.stack()[0][3], self.PlayerID)) msg = error.formatMsg('error', error.ERROR_NO_155, 'delete failure!self.PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True def outputString(self): output = '''//ÌìÌݾº¼¼³¡Íæ¼Ò¼Ç¼±í#tagHighLadderPlayer: PlayerID = %s, Oreder = %s, PlayerName = %s, PlayerLV = %s, FightPower = %s, FightPropertyDataLen = %s, FightPropertyData = %s, ADOResult = %s, '''%( self.PlayerID, self.Oreder, self.PlayerName, self.PlayerLV, self.FightPower, self.FightPropertyDataLen, self.FightPropertyData, self.ADOResult, ) return output def dumpString(self): output = '''%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s'''%( self.PlayerID, self.Oreder, self.PlayerName, self.PlayerLV, self.FightPower, self.FightPropertyDataLen, self.FightPropertyData, ) return output #CharÊý×éÀàÐÍSet½Ó¿Ú,ʹÓøýӿڶԴËÀàÐÍÊý¾Ý¸³Öµ£¬·ÀÖ¹¸³ÖµµÄÊý¾Ý¹ý³¤±¨´í def SetPlayerName(self,Str): if len(Str)<=33: self.PlayerName = Str else: self.PlayerName = Str[:33] #ÌìÌݾº¼¼³¡¶ÔÕ½¼Ç¼#tagHighLadderVSRec class tagHighLadderVSRec(Structure): _pack_ = 1 _fields_ = [ ('PlayerID', ctypes.c_ulong), ('VsPlayerID', ctypes.c_ulong), ('Order', ctypes.c_ushort), ('VsOrder', ctypes.c_ushort), ('VsPlayerName', ctypes.c_char * 33), ('Position', ctypes.c_ubyte), ('Result', ctypes.c_ubyte), ('ADOResult', ctypes.c_ulong), ] def __init__(self): Structure.__init__(self) self.clear() def clear(self): memset(addressof(self), 0, self.getLength()) def readData(self, buf, pos = 0, length = 0): if not pos <= length: msg = error.formatMsg('error', error.ERROR_NO_150, '(pos = %s)> (length = %s)'%(pos, length)) mylog.error(msg) return -1 if len(buf) < pos + self.getLength(): msg = error.formatMsg('error', error.ERROR_NO_151, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength())) mylog.error(msg) return -1 self.clear() memmove(addressof(self), buf[pos:], self.getLength()) return self.getLength() def getBuffer(self): buf = create_string_buffer(self.getLength()) memmove(addressof(buf), addressof(self), self.getLength()) return string_at(addressof(buf), self.getLength()) def getLength(self): return sizeof(tagHighLadderVSRec) def getRecord(self): '''×éÖ¯´æ´¢¼Ç¼''' rec = {} rec[u'PlayerID'] = self.PlayerID rec[u'VsPlayerID'] = self.VsPlayerID rec[u'Order'] = self.Order rec[u'VsOrder'] = self.VsOrder rec[u'VsPlayerName'] = fix_incomingText(self.VsPlayerName) rec[u'Position'] = self.Position rec[u'Result'] = self.Result return rec def readRecord(self, rec): '''ÓÉÓÚMongoDB¶Á³öÀ´ÊÇunicode,ËùÓÐ×Ö·û´®ÐèÒª½øÐÐת»»''' self.PlayerID = rec.get(u'PlayerID', 0) self.VsPlayerID = rec.get(u'VsPlayerID', 0) self.Order = rec.get(u'Order', 0) self.VsOrder = rec.get(u'VsOrder', 0) self.VsPlayerName = fix_outgoingText(rec.get(u'VsPlayerName', u'')) self.Position = rec.get(u'Position', 0) self.Result = rec.get(u'Result', 0) #Can not implement adoLoadStr method:No key defined! def adoInsert(self, collection): '''Ö´ÐвåÈë''' trycnt = 0 rec = self.getRecord() while(True): try: collection.insert(rec, False, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_152, 'Insert failed!PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True #Can not implement adoUpdateStr method:No key defined! def adoUpdateEx(self, collection, spec): '''Ö´ÐиüÐÂ''' trycnt = 0 rec = self.getRecord() while(True): try: collection.update(spec, {'$set':rec}, False, False, True, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_154, 'Update failed!PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True #Can not implement adoCheckUpdateStr method:No key defined! #Can not implement adoCheckUpdateExStr method:No key defined! def getAdoRecords(self, resultCollection): '''²éѯ½á¹û´ò°ü³É¶þ½øÖÆÁ÷''' result = '' result = CommFunc.WriteDWORD(result, resultCollection.count()) for rec in resultCollection: self.readRecord(rec) result += self.getBuffer() return result def adoQueryIndex(self, collection): '''ÓÃË÷Òý×ֶβéÕÒ''' resultCollection = collection.find({'PlayerID':self.PlayerID}) return self.getAdoRecords(resultCollection) def adoQueryCustom(self, collection, queryDict): '''×Ô¶¨Òå²éѯ''' resultCollection = collection.find(queryDict) return self.getAdoRecords(resultCollection) def adoQueryAll(self, collection): '''²éѯËùÓÐ''' resultCollection = collection.find() return self.getAdoRecords(resultCollection) def adoDeleteByIndex(self, collection): '''¸ù¾ÝË÷Òýɾ³ý''' trycnt = 0 while(True): try: collection.remove({'PlayerID':self.PlayerID}) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:PlayerID = %s"%(self.__class__.__name__, inspect.stack()[0][3], self.PlayerID)) msg = error.formatMsg('error', error.ERROR_NO_155, 'delete failure!self.PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True def outputString(self): output = '''//ÌìÌݾº¼¼³¡¶ÔÕ½¼Ç¼#tagHighLadderVSRec: PlayerID = %s, VsPlayerID = %s, Order = %s, VsOrder = %s, VsPlayerName = %s, Position = %s, Result = %s, ADOResult = %s, '''%( self.PlayerID, self.VsPlayerID, self.Order, self.VsOrder, self.VsPlayerName, self.Position, self.Result, self.ADOResult, ) return output def dumpString(self): output = '''%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s'''%( self.PlayerID, self.VsPlayerID, self.Order, self.VsOrder, self.VsPlayerName, self.Position, self.Result, ) return output #CharÊý×éÀàÐÍSet½Ó¿Ú,ʹÓøýӿڶԴËÀàÐÍÊý¾Ý¸³Öµ£¬·ÀÖ¹¸³ÖµµÄÊý¾Ý¹ý³¤±¨´í def SetVsPlayerName(self,Str): if len(Str)<=33: self.VsPlayerName = Str else: self.VsPlayerName = Str[:33] #ÌìÌݾº¼¼³¡Íæ¼Ò×°±¸±í#tagDBHighLadderItem class tagDBHighLadderItem(Structure): _pack_ = 1 _fields_ = [ ('PlayerID', ctypes.c_ulong), ('ItemTypeID', ctypes.c_ulong), ('ItemPlaceType', ctypes.c_ubyte), ('ItemPlaceIndex', ctypes.c_ushort), ('Count', ctypes.c_ushort), ('ItemStarLV', ctypes.c_ubyte), ('IdentifyPar', ctypes.c_ubyte), ('CurDurg', ctypes.c_ulong), ('MaxDurg', ctypes.c_ulong), ('CanPlaceStoneCount', ctypes.c_ubyte), ('ItemProperty', ctypes.c_ubyte), ('SoulProperty', ctypes.c_ushort), ('Stone1', ctypes.c_ulong), ('Stone2', ctypes.c_ulong), ('Stone3', ctypes.c_ulong), ('Stone4', ctypes.c_ulong), ('Stone5', ctypes.c_ulong), ('Stone6', ctypes.c_ulong), ('Stone7', ctypes.c_ulong), ('Stone8', ctypes.c_ulong), ('Stone9', ctypes.c_ulong), ('IsRenZhu', ctypes.c_ubyte), ('EquipDefenseValue', ctypes.c_ulong), ('EquipMinAtkValue', ctypes.c_ulong), ('EquipMaxAtkValue', ctypes.c_ulong), ('UserDataLen', ctypes.c_ulong), ('UserData', ctypes.c_char_p), ('FitLV', ctypes.c_ubyte), ('Proficiency', ctypes.c_ulong), ('IsSuite', ctypes.c_ubyte), ('BaseHP', ctypes.c_ulong), ('BaseMagicDef', ctypes.c_ulong), ('MaxAddSkillCnt', ctypes.c_ubyte), ('EquipMagicDefValue', ctypes.c_ulong), ('EquipMinMagicAtkValue', ctypes.c_ulong), ('EquipMaxMagicAtkValue', ctypes.c_ulong), ('ADOResult', ctypes.c_ulong), ] def __init__(self): Structure.__init__(self) self.clear() def clear(self): self.PlayerID = 0 self.ItemTypeID = 0 self.ItemPlaceType = 0 self.ItemPlaceIndex = 0 self.Count = 0 self.ItemStarLV = 0 self.IdentifyPar = 0 self.CurDurg = 0 self.MaxDurg = 0 self.CanPlaceStoneCount = 0 self.ItemProperty = 0 self.SoulProperty = 0 self.Stone1 = 0 self.Stone2 = 0 self.Stone3 = 0 self.Stone4 = 0 self.Stone5 = 0 self.Stone6 = 0 self.Stone7 = 0 self.Stone8 = 0 self.Stone9 = 0 self.IsRenZhu = 0 self.EquipDefenseValue = 0 self.EquipMinAtkValue = 0 self.EquipMaxAtkValue = 0 self.UserDataLen = 0 self.UserData = '' self.FitLV = 0 self.Proficiency = 0 self.IsSuite = 0 self.BaseHP = 0 self.BaseMagicDef = 0 self.MaxAddSkillCnt = 0 self.EquipMagicDefValue = 0 self.EquipMinMagicAtkValue = 0 self.EquipMaxMagicAtkValue = 0 def readData(self, buf, pos = 0, length = 0): if not pos <= length: msg = error.formatMsg('error', error.ERROR_NO_148, '(pos = %s) > (length = %s)'%(pos, length)) mylog.error(msg) return -1 if len(buf) < pos + self.getLength(): msg = error.formatMsg('error', error.ERROR_NO_149, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength())) mylog.error(msg) self.clear() self.PlayerID, pos = CommFunc.ReadDWORD(buf, pos) self.ItemTypeID, pos = CommFunc.ReadDWORD(buf, pos) self.ItemPlaceType, pos = CommFunc.ReadBYTE(buf, pos) self.ItemPlaceIndex, pos = CommFunc.ReadWORD(buf, pos) self.Count, pos = CommFunc.ReadWORD(buf, pos) self.ItemStarLV, pos = CommFunc.ReadBYTE(buf, pos) self.IdentifyPar, pos = CommFunc.ReadBYTE(buf, pos) self.CurDurg, pos = CommFunc.ReadDWORD(buf, pos) self.MaxDurg, pos = CommFunc.ReadDWORD(buf, pos) self.CanPlaceStoneCount, pos = CommFunc.ReadBYTE(buf, pos) self.ItemProperty, pos = CommFunc.ReadBYTE(buf, pos) self.SoulProperty, pos = CommFunc.ReadWORD(buf, pos) self.Stone1, pos = CommFunc.ReadDWORD(buf, pos) self.Stone2, pos = CommFunc.ReadDWORD(buf, pos) self.Stone3, pos = CommFunc.ReadDWORD(buf, pos) self.Stone4, pos = CommFunc.ReadDWORD(buf, pos) self.Stone5, pos = CommFunc.ReadDWORD(buf, pos) self.Stone6, pos = CommFunc.ReadDWORD(buf, pos) self.Stone7, pos = CommFunc.ReadDWORD(buf, pos) self.Stone8, pos = CommFunc.ReadDWORD(buf, pos) self.Stone9, pos = CommFunc.ReadDWORD(buf, pos) self.IsRenZhu, pos = CommFunc.ReadBYTE(buf, pos) self.EquipDefenseValue, pos = CommFunc.ReadDWORD(buf, pos) self.EquipMinAtkValue, pos = CommFunc.ReadDWORD(buf, pos) self.EquipMaxAtkValue, pos = CommFunc.ReadDWORD(buf, pos) self.UserDataLen, pos = CommFunc.ReadDWORD(buf, pos) tmp, pos = CommFunc.ReadString(buf, pos, self.UserDataLen) self.UserData = ctypes.c_char_p(tmp) self.FitLV, pos = CommFunc.ReadBYTE(buf, pos) self.Proficiency, pos = CommFunc.ReadDWORD(buf, pos) self.IsSuite, pos = CommFunc.ReadBYTE(buf, pos) self.BaseHP, pos = CommFunc.ReadDWORD(buf, pos) self.BaseMagicDef, pos = CommFunc.ReadDWORD(buf, pos) self.MaxAddSkillCnt, pos = CommFunc.ReadBYTE(buf, pos) self.EquipMagicDefValue, pos = CommFunc.ReadDWORD(buf, pos) self.EquipMinMagicAtkValue, pos = CommFunc.ReadDWORD(buf, pos) self.EquipMaxMagicAtkValue, pos = CommFunc.ReadDWORD(buf, pos) return self.getLength() def getBuffer(self): buf = '' buf = CommFunc.WriteDWORD(buf, self.PlayerID) buf = CommFunc.WriteDWORD(buf, self.ItemTypeID) buf = CommFunc.WriteBYTE(buf, self.ItemPlaceType) buf = CommFunc.WriteWORD(buf, self.ItemPlaceIndex) buf = CommFunc.WriteWORD(buf, self.Count) buf = CommFunc.WriteBYTE(buf, self.ItemStarLV) buf = CommFunc.WriteBYTE(buf, self.IdentifyPar) buf = CommFunc.WriteDWORD(buf, self.CurDurg) buf = CommFunc.WriteDWORD(buf, self.MaxDurg) buf = CommFunc.WriteBYTE(buf, self.CanPlaceStoneCount) buf = CommFunc.WriteBYTE(buf, self.ItemProperty) buf = CommFunc.WriteWORD(buf, self.SoulProperty) buf = CommFunc.WriteDWORD(buf, self.Stone1) buf = CommFunc.WriteDWORD(buf, self.Stone2) buf = CommFunc.WriteDWORD(buf, self.Stone3) buf = CommFunc.WriteDWORD(buf, self.Stone4) buf = CommFunc.WriteDWORD(buf, self.Stone5) buf = CommFunc.WriteDWORD(buf, self.Stone6) buf = CommFunc.WriteDWORD(buf, self.Stone7) buf = CommFunc.WriteDWORD(buf, self.Stone8) buf = CommFunc.WriteDWORD(buf, self.Stone9) buf = CommFunc.WriteBYTE(buf, self.IsRenZhu) buf = CommFunc.WriteDWORD(buf, self.EquipDefenseValue) buf = CommFunc.WriteDWORD(buf, self.EquipMinAtkValue) buf = CommFunc.WriteDWORD(buf, self.EquipMaxAtkValue) buf = CommFunc.WriteDWORD(buf, self.UserDataLen) buf = CommFunc.WriteString(buf, self.UserDataLen, self.UserData) buf = CommFunc.WriteBYTE(buf, self.FitLV) buf = CommFunc.WriteDWORD(buf, self.Proficiency) buf = CommFunc.WriteBYTE(buf, self.IsSuite) buf = CommFunc.WriteDWORD(buf, self.BaseHP) buf = CommFunc.WriteDWORD(buf, self.BaseMagicDef) buf = CommFunc.WriteBYTE(buf, self.MaxAddSkillCnt) buf = CommFunc.WriteDWORD(buf, self.EquipMagicDefValue) buf = CommFunc.WriteDWORD(buf, self.EquipMinMagicAtkValue) buf = CommFunc.WriteDWORD(buf, self.EquipMaxMagicAtkValue) return buf def getLength(self): length = 0 length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ubyte) length += sizeof(ctypes.c_ushort) length += sizeof(ctypes.c_ushort) length += sizeof(ctypes.c_ubyte) length += sizeof(ctypes.c_ubyte) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ubyte) length += sizeof(ctypes.c_ubyte) length += sizeof(ctypes.c_ushort) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ubyte) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += self.UserDataLen length += sizeof(ctypes.c_ubyte) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ubyte) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ubyte) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) return length def getRecord(self): '''×éÖ¯´æ´¢¼Ç¼''' rec = {} rec[u'PlayerID'] = self.PlayerID rec[u'ItemTypeID'] = self.ItemTypeID rec[u'ItemPlaceType'] = self.ItemPlaceType rec[u'ItemPlaceIndex'] = self.ItemPlaceIndex rec[u'Count'] = self.Count rec[u'ItemStarLV'] = self.ItemStarLV rec[u'IdentifyPar'] = self.IdentifyPar rec[u'CurDurg'] = self.CurDurg rec[u'MaxDurg'] = self.MaxDurg rec[u'CanPlaceStoneCount'] = self.CanPlaceStoneCount rec[u'ItemProperty'] = self.ItemProperty rec[u'SoulProperty'] = self.SoulProperty rec[u'Stone1'] = self.Stone1 rec[u'Stone2'] = self.Stone2 rec[u'Stone3'] = self.Stone3 rec[u'Stone4'] = self.Stone4 rec[u'Stone5'] = self.Stone5 rec[u'Stone6'] = self.Stone6 rec[u'Stone7'] = self.Stone7 rec[u'Stone8'] = self.Stone8 rec[u'Stone9'] = self.Stone9 rec[u'IsRenZhu'] = self.IsRenZhu rec[u'EquipDefenseValue'] = self.EquipDefenseValue rec[u'EquipMinAtkValue'] = self.EquipMinAtkValue rec[u'EquipMaxAtkValue'] = self.EquipMaxAtkValue rec[u'UserDataLen'] = self.UserDataLen rec[u'UserData'] = fix_incomingText(self.UserData) rec[u'FitLV'] = self.FitLV rec[u'Proficiency'] = self.Proficiency rec[u'IsSuite'] = self.IsSuite rec[u'BaseHP'] = self.BaseHP rec[u'BaseMagicDef'] = self.BaseMagicDef rec[u'MaxAddSkillCnt'] = self.MaxAddSkillCnt rec[u'EquipMagicDefValue'] = self.EquipMagicDefValue rec[u'EquipMinMagicAtkValue'] = self.EquipMinMagicAtkValue rec[u'EquipMaxMagicAtkValue'] = self.EquipMaxMagicAtkValue return rec def readRecord(self, rec): '''ÓÉÓÚMongoDB¶Á³öÀ´ÊÇunicode,ËùÓÐ×Ö·û´®ÐèÒª½øÐÐת»»''' self.PlayerID = rec.get(u'PlayerID', 0) self.ItemTypeID = rec.get(u'ItemTypeID', 0) self.ItemPlaceType = rec.get(u'ItemPlaceType', 0) self.ItemPlaceIndex = rec.get(u'ItemPlaceIndex', 0) self.Count = rec.get(u'Count', 0) self.ItemStarLV = rec.get(u'ItemStarLV', 0) self.IdentifyPar = rec.get(u'IdentifyPar', 0) self.CurDurg = rec.get(u'CurDurg', 0) self.MaxDurg = rec.get(u'MaxDurg', 0) self.CanPlaceStoneCount = rec.get(u'CanPlaceStoneCount', 0) self.ItemProperty = rec.get(u'ItemProperty', 0) self.SoulProperty = rec.get(u'SoulProperty', 0) self.Stone1 = rec.get(u'Stone1', 0) self.Stone2 = rec.get(u'Stone2', 0) self.Stone3 = rec.get(u'Stone3', 0) self.Stone4 = rec.get(u'Stone4', 0) self.Stone5 = rec.get(u'Stone5', 0) self.Stone6 = rec.get(u'Stone6', 0) self.Stone7 = rec.get(u'Stone7', 0) self.Stone8 = rec.get(u'Stone8', 0) self.Stone9 = rec.get(u'Stone9', 0) self.IsRenZhu = rec.get(u'IsRenZhu', 0) self.EquipDefenseValue = rec.get(u'EquipDefenseValue', 0) self.EquipMinAtkValue = rec.get(u'EquipMinAtkValue', 0) self.EquipMaxAtkValue = rec.get(u'EquipMaxAtkValue', 0) self.UserDataLen = rec.get(u'UserDataLen', 0) self.UserData = fix_outgoingText(rec.get(u'UserData', u'')) self.FitLV = rec.get(u'FitLV', 0) self.Proficiency = rec.get(u'Proficiency', 0) self.IsSuite = rec.get(u'IsSuite', 0) self.BaseHP = rec.get(u'BaseHP', 0) self.BaseMagicDef = rec.get(u'BaseMagicDef', 0) self.MaxAddSkillCnt = rec.get(u'MaxAddSkillCnt', 0) self.EquipMagicDefValue = rec.get(u'EquipMagicDefValue', 0) self.EquipMinMagicAtkValue = rec.get(u'EquipMinMagicAtkValue', 0) self.EquipMaxMagicAtkValue = rec.get(u'EquipMaxMagicAtkValue', 0) #Can not implement adoLoadStr method:No key defined! #Can not implement adoInsertStr method:No key defined! #Can not implement adoUpdateStr method:No key defined! #Can not implement adoUpdateStr method:No key defined! #Can not implement adoCheckUpdateStr method:No key defined! #Can not implement adoCheckUpdateExStr method:No key defined! def getAdoRecords(self, resultCollection): '''²éѯ½á¹û´ò°ü³É¶þ½øÖÆÁ÷''' result = '' result = CommFunc.WriteDWORD(result, resultCollection.count()) for rec in resultCollection: self.readRecord(rec) result += self.getBuffer() return result #Can not implement adoQueryIndexStr method:No key defined! def adoQueryCustom(self, collection, queryDict): '''×Ô¶¨Òå²éѯ''' resultCollection = collection.find(queryDict) return self.getAdoRecords(resultCollection) def adoQueryAll(self, collection): '''²éѯËùÓÐ''' resultCollection = collection.find() return self.getAdoRecords(resultCollection) #Can not implement adoDeleteByIndexStr method:No key defined! def outputString(self): output = '''//ÌìÌݾº¼¼³¡Íæ¼Ò×°±¸±í#tagDBHighLadderItem: PlayerID = %s, ItemTypeID = %s, ItemPlaceType = %s, ItemPlaceIndex = %s, Count = %s, ItemStarLV = %s, IdentifyPar = %s, CurDurg = %s, MaxDurg = %s, CanPlaceStoneCount = %s, ItemProperty = %s, SoulProperty = %s, Stone1 = %s, Stone2 = %s, Stone3 = %s, Stone4 = %s, Stone5 = %s, Stone6 = %s, Stone7 = %s, Stone8 = %s, Stone9 = %s, IsRenZhu = %s, EquipDefenseValue = %s, EquipMinAtkValue = %s, EquipMaxAtkValue = %s, UserDataLen = %s, UserData = %s, FitLV = %s, Proficiency = %s, IsSuite = %s, BaseHP = %s, BaseMagicDef = %s, MaxAddSkillCnt = %s, EquipMagicDefValue = %s, EquipMinMagicAtkValue = %s, EquipMaxMagicAtkValue = %s, ADOResult = %s, '''%( self.PlayerID, self.ItemTypeID, self.ItemPlaceType, self.ItemPlaceIndex, self.Count, self.ItemStarLV, self.IdentifyPar, self.CurDurg, self.MaxDurg, self.CanPlaceStoneCount, self.ItemProperty, self.SoulProperty, self.Stone1, self.Stone2, self.Stone3, self.Stone4, self.Stone5, self.Stone6, self.Stone7, self.Stone8, self.Stone9, self.IsRenZhu, self.EquipDefenseValue, self.EquipMinAtkValue, self.EquipMaxAtkValue, self.UserDataLen, self.UserData, self.FitLV, self.Proficiency, self.IsSuite, self.BaseHP, self.BaseMagicDef, self.MaxAddSkillCnt, self.EquipMagicDefValue, self.EquipMinMagicAtkValue, self.EquipMaxMagicAtkValue, self.ADOResult, ) return output def dumpString(self): output = '''%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s'''%( self.PlayerID, self.ItemTypeID, self.ItemPlaceType, self.ItemPlaceIndex, self.Count, self.ItemStarLV, self.IdentifyPar, self.CurDurg, self.MaxDurg, self.CanPlaceStoneCount, self.ItemProperty, self.SoulProperty, self.Stone1, self.Stone2, self.Stone3, self.Stone4, self.Stone5, self.Stone6, self.Stone7, self.Stone8, self.Stone9, self.IsRenZhu, self.EquipDefenseValue, self.EquipMinAtkValue, self.EquipMaxAtkValue, self.UserDataLen, self.UserData, self.FitLV, self.Proficiency, self.IsSuite, self.BaseHP, self.BaseMagicDef, self.MaxAddSkillCnt, self.EquipMagicDefValue, self.EquipMinMagicAtkValue, self.EquipMaxMagicAtkValue, ) return output #²¹³¥ÎïÆ·ÐÅÏ¢±í #tagDBCompensationItem class tagDBCompensationItem(Structure): _pack_ = 1 _fields_ = [ ('GUID', ctypes.c_char * 40), ('Index', ctypes.c_ubyte), ('ItemID', ctypes.c_ulong), ('Count', ctypes.c_ulong), ('IsBind', ctypes.c_ubyte), ('UserDataLen', ctypes.c_ulong), ('UserData', ctypes.c_char_p), ('ADOResult', ctypes.c_ulong), ] def __init__(self): Structure.__init__(self) self.clear() def clear(self): self.GUID = '' self.Index = 0 self.ItemID = 0 self.Count = 0 self.IsBind = 0 self.UserDataLen = 0 self.UserData = '' def readData(self, buf, pos = 0, length = 0): if not pos <= length: msg = error.formatMsg('error', error.ERROR_NO_148, '(pos = %s) > (length = %s)'%(pos, length)) mylog.error(msg) return -1 if len(buf) < pos + self.getLength(): msg = error.formatMsg('error', error.ERROR_NO_149, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength())) mylog.error(msg) self.clear() self.GUID, pos = CommFunc.ReadString(buf, pos, 40) self.Index, pos = CommFunc.ReadBYTE(buf, pos) self.ItemID, pos = CommFunc.ReadDWORD(buf, pos) self.Count, pos = CommFunc.ReadDWORD(buf, pos) self.IsBind, pos = CommFunc.ReadBYTE(buf, pos) self.UserDataLen, pos = CommFunc.ReadDWORD(buf, pos) tmp, pos = CommFunc.ReadString(buf, pos, self.UserDataLen) self.UserData = ctypes.c_char_p(tmp) return self.getLength() def getBuffer(self): buf = '' buf = CommFunc.WriteString(buf, sizeof(ctypes.c_char) * 40, self.GUID) buf = CommFunc.WriteBYTE(buf, self.Index) buf = CommFunc.WriteDWORD(buf, self.ItemID) buf = CommFunc.WriteDWORD(buf, self.Count) buf = CommFunc.WriteBYTE(buf, self.IsBind) buf = CommFunc.WriteDWORD(buf, self.UserDataLen) buf = CommFunc.WriteString(buf, self.UserDataLen, self.UserData) return buf def getLength(self): length = 0 length += sizeof(ctypes.c_char) * 40 length += sizeof(ctypes.c_ubyte) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ubyte) length += sizeof(ctypes.c_ulong) length += self.UserDataLen return length def getRecord(self): '''×éÖ¯´æ´¢¼Ç¼''' rec = {} rec[u'GUID'] = fix_incomingText(self.GUID) rec[u'Index'] = self.Index rec[u'ItemID'] = self.ItemID rec[u'Count'] = self.Count rec[u'IsBind'] = self.IsBind rec[u'UserDataLen'] = self.UserDataLen rec[u'UserData'] = fix_incomingText(self.UserData) return rec def readRecord(self, rec): '''ÓÉÓÚMongoDB¶Á³öÀ´ÊÇunicode,ËùÓÐ×Ö·û´®ÐèÒª½øÐÐת»»''' self.GUID = fix_outgoingText(rec.get(u'GUID', u'')) self.Index = rec.get(u'Index', 0) self.ItemID = rec.get(u'ItemID', 0) self.Count = rec.get(u'Count', 0) self.IsBind = rec.get(u'IsBind', 0) self.UserDataLen = rec.get(u'UserDataLen', 0) self.UserData = fix_outgoingText(rec.get(u'UserData', u'')) #Can not implement adoLoadStr method:No key defined! #Can not implement adoInsertStr method:No key defined! #Can not implement adoUpdateStr method:No key defined! #Can not implement adoUpdateStr method:No key defined! #Can not implement adoCheckUpdateStr method:No key defined! #Can not implement adoCheckUpdateExStr method:No key defined! def getAdoRecords(self, resultCollection): '''²éѯ½á¹û´ò°ü³É¶þ½øÖÆÁ÷''' result = '' result = CommFunc.WriteDWORD(result, resultCollection.count()) for rec in resultCollection: self.readRecord(rec) result += self.getBuffer() return result #Can not implement adoQueryIndexStr method:No key defined! def adoQueryCustom(self, collection, queryDict): '''×Ô¶¨Òå²éѯ''' resultCollection = collection.find(queryDict) return self.getAdoRecords(resultCollection) def adoQueryAll(self, collection): '''²éѯËùÓÐ''' resultCollection = collection.find() return self.getAdoRecords(resultCollection) #Can not implement adoDeleteByIndexStr method:No key defined! def outputString(self): output = '''//²¹³¥ÎïÆ·ÐÅÏ¢±í #tagDBCompensationItem: GUID = %s, Index = %s, ItemID = %s, Count = %s, IsBind = %s, UserDataLen = %s, UserData = %s, ADOResult = %s, '''%( self.GUID, self.Index, self.ItemID, self.Count, self.IsBind, self.UserDataLen, self.UserData, self.ADOResult, ) return output def dumpString(self): output = '''%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s'''%( self.GUID, self.Index, self.ItemID, self.Count, self.IsBind, self.UserDataLen, self.UserData, ) return output #CharÊý×éÀàÐÍSet½Ó¿Ú,ʹÓøýӿڶԴËÀàÐÍÊý¾Ý¸³Öµ£¬·ÀÖ¹¸³ÖµµÄÊý¾Ý¹ý³¤±¨´í def SetGUID(self,Str): if len(Str)<=40: self.GUID = Str else: self.GUID = Str[:40] #²¹³¥ÎïÆ·È«·þÁìÈ¡Ìõ¼þ±í #tagDBEntireCompensationRequire class tagDBEntireCompensationRequire(Structure): _pack_ = 1 _fields_ = [ ('GUID', ctypes.c_char * 40), ('CreateTime', ctypes.c_char * 30), ('LimitTime', ctypes.c_char * 30), ('PlayerLV', ctypes.c_ulong), ('PlayerJob', ctypes.c_ubyte), ('TextLen', ctypes.c_ulong), ('Text', ctypes.c_char_p), ('Gold', ctypes.c_ulong), ('GoldPaper', ctypes.c_ulong), ('Silver', ctypes.c_ulong), ('ServerID', ctypes.c_ulong), ('ADOResult', ctypes.c_ulong), ] def __init__(self): Structure.__init__(self) self.clear() def clear(self): self.GUID = '' self.CreateTime = '' self.LimitTime = '' self.PlayerLV = 0 self.PlayerJob = 0 self.TextLen = 0 self.Text = '' self.Gold = 0 self.GoldPaper = 0 self.Silver = 0 self.ServerID = 0 def readData(self, buf, pos = 0, length = 0): if not pos <= length: msg = error.formatMsg('error', error.ERROR_NO_148, '(pos = %s) > (length = %s)'%(pos, length)) mylog.error(msg) return -1 if len(buf) < pos + self.getLength(): msg = error.formatMsg('error', error.ERROR_NO_149, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength())) mylog.error(msg) self.clear() self.GUID, pos = CommFunc.ReadString(buf, pos, 40) self.CreateTime, pos = CommFunc.ReadString(buf, pos, 30) self.LimitTime, pos = CommFunc.ReadString(buf, pos, 30) self.PlayerLV, pos = CommFunc.ReadDWORD(buf, pos) self.PlayerJob, pos = CommFunc.ReadBYTE(buf, pos) self.TextLen, pos = CommFunc.ReadDWORD(buf, pos) tmp, pos = CommFunc.ReadString(buf, pos, self.TextLen) self.Text = ctypes.c_char_p(tmp) self.Gold, pos = CommFunc.ReadDWORD(buf, pos) self.GoldPaper, pos = CommFunc.ReadDWORD(buf, pos) self.Silver, pos = CommFunc.ReadDWORD(buf, pos) self.ServerID, pos = CommFunc.ReadDWORD(buf, pos) return self.getLength() def getBuffer(self): buf = '' buf = CommFunc.WriteString(buf, sizeof(ctypes.c_char) * 40, self.GUID) buf = CommFunc.WriteString(buf, sizeof(ctypes.c_char) * 30, self.CreateTime) buf = CommFunc.WriteString(buf, sizeof(ctypes.c_char) * 30, self.LimitTime) buf = CommFunc.WriteDWORD(buf, self.PlayerLV) buf = CommFunc.WriteBYTE(buf, self.PlayerJob) buf = CommFunc.WriteDWORD(buf, self.TextLen) buf = CommFunc.WriteString(buf, self.TextLen, self.Text) buf = CommFunc.WriteDWORD(buf, self.Gold) buf = CommFunc.WriteDWORD(buf, self.GoldPaper) buf = CommFunc.WriteDWORD(buf, self.Silver) buf = CommFunc.WriteDWORD(buf, self.ServerID) return buf def getLength(self): length = 0 length += sizeof(ctypes.c_char) * 40 length += sizeof(ctypes.c_char) * 30 length += sizeof(ctypes.c_char) * 30 length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ubyte) length += sizeof(ctypes.c_ulong) length += self.TextLen length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) return length def getRecord(self): '''×éÖ¯´æ´¢¼Ç¼''' rec = {} rec[u'GUID'] = fix_incomingText(self.GUID) rec[u'CreateTime'] = fix_incomingText(self.CreateTime) rec[u'LimitTime'] = fix_incomingText(self.LimitTime) rec[u'PlayerLV'] = self.PlayerLV rec[u'PlayerJob'] = self.PlayerJob rec[u'TextLen'] = self.TextLen rec[u'Text'] = fix_incomingText(self.Text) rec[u'Gold'] = self.Gold rec[u'GoldPaper'] = self.GoldPaper rec[u'Silver'] = self.Silver rec[u'ServerID'] = self.ServerID return rec def readRecord(self, rec): '''ÓÉÓÚMongoDB¶Á³öÀ´ÊÇunicode,ËùÓÐ×Ö·û´®ÐèÒª½øÐÐת»»''' self.GUID = fix_outgoingText(rec.get(u'GUID', u'')) self.CreateTime = fix_outgoingText(rec.get(u'CreateTime', u'')) self.LimitTime = fix_outgoingText(rec.get(u'LimitTime', u'')) self.PlayerLV = rec.get(u'PlayerLV', 0) self.PlayerJob = rec.get(u'PlayerJob', 0) self.TextLen = rec.get(u'TextLen', 0) self.Text = fix_outgoingText(rec.get(u'Text', u'')) self.Gold = rec.get(u'Gold', 0) self.GoldPaper = rec.get(u'GoldPaper', 0) self.Silver = rec.get(u'Silver', 0) self.ServerID = rec.get(u'ServerID', 0) #Can not implement adoLoadStr method:No key defined! #Can not implement adoInsertStr method:No key defined! #Can not implement adoUpdateStr method:No key defined! #Can not implement adoUpdateStr method:No key defined! #Can not implement adoCheckUpdateStr method:No key defined! #Can not implement adoCheckUpdateExStr method:No key defined! def getAdoRecords(self, resultCollection): '''²éѯ½á¹û´ò°ü³É¶þ½øÖÆÁ÷''' result = '' result = CommFunc.WriteDWORD(result, resultCollection.count()) for rec in resultCollection: self.readRecord(rec) result += self.getBuffer() return result #Can not implement adoQueryIndexStr method:No key defined! def adoQueryCustom(self, collection, queryDict): '''×Ô¶¨Òå²éѯ''' resultCollection = collection.find(queryDict) return self.getAdoRecords(resultCollection) def adoQueryAll(self, collection): '''²éѯËùÓÐ''' resultCollection = collection.find() return self.getAdoRecords(resultCollection) #Can not implement adoDeleteByIndexStr method:No key defined! def outputString(self): output = '''//²¹³¥ÎïÆ·È«·þÁìÈ¡Ìõ¼þ±í #tagDBEntireCompensationRequire: GUID = %s, CreateTime = %s, LimitTime = %s, PlayerLV = %s, PlayerJob = %s, TextLen = %s, Text = %s, Gold = %s, GoldPaper = %s, Silver = %s, ServerID = %s, ADOResult = %s, '''%( self.GUID, self.CreateTime, self.LimitTime, self.PlayerLV, self.PlayerJob, self.TextLen, self.Text, self.Gold, self.GoldPaper, self.Silver, self.ServerID, self.ADOResult, ) return output def dumpString(self): output = '''%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s'''%( self.GUID, self.CreateTime, self.LimitTime, self.PlayerLV, self.PlayerJob, self.TextLen, self.Text, self.Gold, self.GoldPaper, self.Silver, self.ServerID, ) return output #CharÊý×éÀàÐÍSet½Ó¿Ú,ʹÓøýӿڶԴËÀàÐÍÊý¾Ý¸³Öµ£¬·ÀÖ¹¸³ÖµµÄÊý¾Ý¹ý³¤±¨´í def SetGUID(self,Str): if len(Str)<=40: self.GUID = Str else: self.GUID = Str[:40] def SetCreateTime(self,Str): if len(Str)<=30: self.CreateTime = Str else: self.CreateTime = Str[:30] def SetLimitTime(self,Str): if len(Str)<=30: self.LimitTime = Str else: self.LimitTime = Str[:30] #²¹³¥ÎïÆ·¸öÈËÁìÈ¡±í #tagDBPersonalCompensation class tagDBPersonalCompensation(Structure): _pack_ = 1 _fields_ = [ ('PlayerID', ctypes.c_ulong), ('GUID', ctypes.c_char * 40), ('Type', ctypes.c_ubyte), ('CreateTime', ctypes.c_char * 30), ('LimitTime', ctypes.c_char * 30), ('TextLen', ctypes.c_ulong), ('Text', ctypes.c_char_p), ('Gold', ctypes.c_ulong), ('GoldPaper', ctypes.c_ulong), ('Silver', ctypes.c_ulong), ('ADOResult', ctypes.c_ulong), ] def __init__(self): Structure.__init__(self) self.clear() def clear(self): self.PlayerID = 0 self.GUID = '' self.Type = 0 self.CreateTime = '' self.LimitTime = '' self.TextLen = 0 self.Text = '' self.Gold = 0 self.GoldPaper = 0 self.Silver = 0 def readData(self, buf, pos = 0, length = 0): if not pos <= length: msg = error.formatMsg('error', error.ERROR_NO_148, '(pos = %s) > (length = %s)'%(pos, length)) mylog.error(msg) return -1 if len(buf) < pos + self.getLength(): msg = error.formatMsg('error', error.ERROR_NO_149, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength())) mylog.error(msg) self.clear() self.PlayerID, pos = CommFunc.ReadDWORD(buf, pos) self.GUID, pos = CommFunc.ReadString(buf, pos, 40) self.Type, pos = CommFunc.ReadBYTE(buf, pos) self.CreateTime, pos = CommFunc.ReadString(buf, pos, 30) self.LimitTime, pos = CommFunc.ReadString(buf, pos, 30) self.TextLen, pos = CommFunc.ReadDWORD(buf, pos) tmp, pos = CommFunc.ReadString(buf, pos, self.TextLen) self.Text = ctypes.c_char_p(tmp) self.Gold, pos = CommFunc.ReadDWORD(buf, pos) self.GoldPaper, pos = CommFunc.ReadDWORD(buf, pos) self.Silver, pos = CommFunc.ReadDWORD(buf, pos) return self.getLength() def getBuffer(self): buf = '' buf = CommFunc.WriteDWORD(buf, self.PlayerID) buf = CommFunc.WriteString(buf, sizeof(ctypes.c_char) * 40, self.GUID) buf = CommFunc.WriteBYTE(buf, self.Type) buf = CommFunc.WriteString(buf, sizeof(ctypes.c_char) * 30, self.CreateTime) buf = CommFunc.WriteString(buf, sizeof(ctypes.c_char) * 30, self.LimitTime) buf = CommFunc.WriteDWORD(buf, self.TextLen) buf = CommFunc.WriteString(buf, self.TextLen, self.Text) buf = CommFunc.WriteDWORD(buf, self.Gold) buf = CommFunc.WriteDWORD(buf, self.GoldPaper) buf = CommFunc.WriteDWORD(buf, self.Silver) return buf def getLength(self): length = 0 length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_char) * 40 length += sizeof(ctypes.c_ubyte) length += sizeof(ctypes.c_char) * 30 length += sizeof(ctypes.c_char) * 30 length += sizeof(ctypes.c_ulong) length += self.TextLen length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) return length def getRecord(self): '''×éÖ¯´æ´¢¼Ç¼''' rec = {} rec[u'PlayerID'] = self.PlayerID rec[u'GUID'] = fix_incomingText(self.GUID) rec[u'Type'] = self.Type rec[u'CreateTime'] = fix_incomingText(self.CreateTime) rec[u'LimitTime'] = fix_incomingText(self.LimitTime) rec[u'TextLen'] = self.TextLen rec[u'Text'] = fix_incomingText(self.Text) rec[u'Gold'] = self.Gold rec[u'GoldPaper'] = self.GoldPaper rec[u'Silver'] = self.Silver return rec def readRecord(self, rec): '''ÓÉÓÚMongoDB¶Á³öÀ´ÊÇunicode,ËùÓÐ×Ö·û´®ÐèÒª½øÐÐת»»''' self.PlayerID = rec.get(u'PlayerID', 0) self.GUID = fix_outgoingText(rec.get(u'GUID', u'')) self.Type = rec.get(u'Type', 0) self.CreateTime = fix_outgoingText(rec.get(u'CreateTime', u'')) self.LimitTime = fix_outgoingText(rec.get(u'LimitTime', u'')) self.TextLen = rec.get(u'TextLen', 0) self.Text = fix_outgoingText(rec.get(u'Text', u'')) self.Gold = rec.get(u'Gold', 0) self.GoldPaper = rec.get(u'GoldPaper', 0) self.Silver = rec.get(u'Silver', 0) #Can not implement adoLoadStr method:No key defined! #Can not implement adoInsertStr method:No key defined! #Can not implement adoUpdateStr method:No key defined! #Can not implement adoUpdateStr method:No key defined! #Can not implement adoCheckUpdateStr method:No key defined! #Can not implement adoCheckUpdateExStr method:No key defined! def getAdoRecords(self, resultCollection): '''²éѯ½á¹û´ò°ü³É¶þ½øÖÆÁ÷''' result = '' result = CommFunc.WriteDWORD(result, resultCollection.count()) for rec in resultCollection: self.readRecord(rec) result += self.getBuffer() return result #Can not implement adoQueryIndexStr method:No key defined! def adoQueryCustom(self, collection, queryDict): '''×Ô¶¨Òå²éѯ''' resultCollection = collection.find(queryDict) return self.getAdoRecords(resultCollection) def adoQueryAll(self, collection): '''²éѯËùÓÐ''' resultCollection = collection.find() return self.getAdoRecords(resultCollection) #Can not implement adoDeleteByIndexStr method:No key defined! def outputString(self): output = '''//²¹³¥ÎïÆ·¸öÈËÁìÈ¡±í #tagDBPersonalCompensation: PlayerID = %s, GUID = %s, Type = %s, CreateTime = %s, LimitTime = %s, TextLen = %s, Text = %s, Gold = %s, GoldPaper = %s, Silver = %s, ADOResult = %s, '''%( self.PlayerID, self.GUID, self.Type, self.CreateTime, self.LimitTime, self.TextLen, self.Text, self.Gold, self.GoldPaper, self.Silver, self.ADOResult, ) return output def dumpString(self): output = '''%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s'''%( self.PlayerID, self.GUID, self.Type, self.CreateTime, self.LimitTime, self.TextLen, self.Text, self.Gold, self.GoldPaper, self.Silver, ) return output #CharÊý×éÀàÐÍSet½Ó¿Ú,ʹÓøýӿڶԴËÀàÐÍÊý¾Ý¸³Öµ£¬·ÀÖ¹¸³ÖµµÄÊý¾Ý¹ý³¤±¨´í def SetGUID(self,Str): if len(Str)<=40: self.GUID = Str else: self.GUID = Str[:40] def SetCreateTime(self,Str): if len(Str)<=30: self.CreateTime = Str else: self.CreateTime = Str[:30] def SetLimitTime(self,Str): if len(Str)<=30: self.LimitTime = Str else: self.LimitTime = Str[:30] #²¹³¥ÎïÆ·Áìȡ״̬±í #tagCompensationPlayerRec class tagCompensationPlayerRec(Structure): _pack_ = 1 _fields_ = [ ('PlayerID', ctypes.c_ulong), ('GUID', ctypes.c_char * 40), ('RecState', ctypes.c_ubyte), ('ADOResult', ctypes.c_ulong), ] def __init__(self): Structure.__init__(self) self.clear() def clear(self): memset(addressof(self), 0, self.getLength()) def readData(self, buf, pos = 0, length = 0): if not pos <= length: msg = error.formatMsg('error', error.ERROR_NO_148, '(pos = %s) > (length = %s)'%(pos, length)) mylog.error(msg) return -1 if len(buf) < pos + self.getLength(): msg = error.formatMsg('error', error.ERROR_NO_149, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength())) mylog.error(msg) self.clear() self.PlayerID, pos = CommFunc.ReadDWORD(buf, pos) self.GUID, pos = CommFunc.ReadString(buf, pos, 40) self.RecState, pos = CommFunc.ReadBYTE(buf, pos) return self.getLength() def getBuffer(self): buf = create_string_buffer(self.getLength()) memmove(addressof(buf), addressof(self), self.getLength()) return string_at(addressof(buf), self.getLength()) def getLength(self): return sizeof(tagCompensationPlayerRec) def getRecord(self): '''×éÖ¯´æ´¢¼Ç¼''' rec = {} rec[u'PlayerID'] = self.PlayerID rec[u'GUID'] = fix_incomingText(self.GUID) rec[u'RecState'] = self.RecState return rec def readRecord(self, rec): '''ÓÉÓÚMongoDB¶Á³öÀ´ÊÇunicode,ËùÓÐ×Ö·û´®ÐèÒª½øÐÐת»»''' self.PlayerID = rec.get(u'PlayerID', 0) self.GUID = fix_outgoingText(rec.get(u'GUID', u'')) self.RecState = rec.get(u'RecState', 0) #Can not implement adoLoadStr method:No key defined! #Can not implement adoInsertStr method:No key defined! #Can not implement adoUpdateStr method:No key defined! #Can not implement adoUpdateStr method:No key defined! #Can not implement adoCheckUpdateStr method:No key defined! #Can not implement adoCheckUpdateExStr method:No key defined! def getAdoRecords(self, resultCollection): '''²éѯ½á¹û´ò°ü³É¶þ½øÖÆÁ÷''' result = '' result = CommFunc.WriteDWORD(result, resultCollection.count()) for rec in resultCollection: self.readRecord(rec) result += self.getBuffer() return result #Can not implement adoQueryIndexStr method:No key defined! def adoQueryCustom(self, collection, queryDict): '''×Ô¶¨Òå²éѯ''' resultCollection = collection.find(queryDict) return self.getAdoRecords(resultCollection) def adoQueryAll(self, collection): '''²éѯËùÓÐ''' resultCollection = collection.find() return self.getAdoRecords(resultCollection) #Can not implement adoDeleteByIndexStr method:No key defined! def outputString(self): output = '''//²¹³¥ÎïÆ·Áìȡ״̬±í #tagCompensationPlayerRec: PlayerID = %s, GUID = %s, RecState = %s, ADOResult = %s, '''%( self.PlayerID, self.GUID, self.RecState, self.ADOResult, ) return output def dumpString(self): output = '''%1s\t%1s\t%1s'''%( self.PlayerID, self.GUID, self.RecState, ) return output #CharÊý×éÀàÐÍSet½Ó¿Ú,ʹÓøýӿڶԴËÀàÐÍÊý¾Ý¸³Öµ£¬·ÀÖ¹¸³ÖµµÄÊý¾Ý¹ý³¤±¨´í def SetGUID(self,Str): if len(Str)<=40: self.GUID = Str else: self.GUID = Str[:40] #Íæ¼ÒÊý¾Ý²é¿´»º´æ±í#tagPlayerViewCache class tagPlayerViewCache(Structure): _pack_ = 1 _fields_ = [ ('PlayerID', ctypes.c_ulong), ('GeTuiIDSize', ctypes.c_ubyte), ('GeTuiID', ctypes.c_char_p), ('LV', ctypes.c_ushort), ('OffTime', ctypes.c_ulong), ('PropDataSize', ctypes.c_ulong), ('PropData', ctypes.c_char_p), ('ItemDataSize', ctypes.c_ulong), ('ItemData', ctypes.c_char_p), ('PlusDataSize', ctypes.c_ulong), ('PlusData', ctypes.c_char_p), ('ADOResult', ctypes.c_ulong), ] def __init__(self): Structure.__init__(self) self.clear() def clear(self): self.PlayerID = 0 self.GeTuiIDSize = 0 self.GeTuiID = '' self.LV = 0 self.OffTime = 0 self.PropDataSize = 0 self.PropData = '' self.ItemDataSize = 0 self.ItemData = '' self.PlusDataSize = 0 self.PlusData = '' def readData(self, buf, pos = 0, length = 0): if not pos <= length: msg = error.formatMsg('error', error.ERROR_NO_148, '(pos = %s) > (length = %s)'%(pos, length)) mylog.error(msg) return -1 if len(buf) < pos + self.getLength(): msg = error.formatMsg('error', error.ERROR_NO_149, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength())) mylog.error(msg) self.clear() self.PlayerID, pos = CommFunc.ReadDWORD(buf, pos) self.GeTuiIDSize, pos = CommFunc.ReadBYTE(buf, pos) tmp, pos = CommFunc.ReadString(buf, pos, self.GeTuiIDSize) self.GeTuiID = ctypes.c_char_p(tmp) self.LV, pos = CommFunc.ReadWORD(buf, pos) self.OffTime, pos = CommFunc.ReadDWORD(buf, pos) self.PropDataSize, pos = CommFunc.ReadDWORD(buf, pos) tmp, pos = CommFunc.ReadString(buf, pos, self.PropDataSize) self.PropData = ctypes.c_char_p(tmp) self.ItemDataSize, pos = CommFunc.ReadDWORD(buf, pos) tmp, pos = CommFunc.ReadString(buf, pos, self.ItemDataSize) self.ItemData = ctypes.c_char_p(tmp) self.PlusDataSize, pos = CommFunc.ReadDWORD(buf, pos) tmp, pos = CommFunc.ReadString(buf, pos, self.PlusDataSize) self.PlusData = ctypes.c_char_p(tmp) return self.getLength() def getBuffer(self): buf = '' buf = CommFunc.WriteDWORD(buf, self.PlayerID) buf = CommFunc.WriteBYTE(buf, self.GeTuiIDSize) buf = CommFunc.WriteString(buf, self.GeTuiIDSize, self.GeTuiID) buf = CommFunc.WriteWORD(buf, self.LV) buf = CommFunc.WriteDWORD(buf, self.OffTime) buf = CommFunc.WriteDWORD(buf, self.PropDataSize) buf = CommFunc.WriteString(buf, self.PropDataSize, self.PropData) buf = CommFunc.WriteDWORD(buf, self.ItemDataSize) buf = CommFunc.WriteString(buf, self.ItemDataSize, self.ItemData) buf = CommFunc.WriteDWORD(buf, self.PlusDataSize) buf = CommFunc.WriteString(buf, self.PlusDataSize, self.PlusData) return buf def getLength(self): length = 0 length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ubyte) length += self.GeTuiIDSize length += sizeof(ctypes.c_ushort) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += self.PropDataSize length += sizeof(ctypes.c_ulong) length += self.ItemDataSize length += sizeof(ctypes.c_ulong) length += self.PlusDataSize return length def getRecord(self): '''×éÖ¯´æ´¢¼Ç¼''' rec = {} rec[u'PlayerID'] = self.PlayerID rec[u'GeTuiIDSize'] = self.GeTuiIDSize rec[u'GeTuiID'] = fix_incomingText(self.GeTuiID) rec[u'LV'] = self.LV rec[u'OffTime'] = self.OffTime rec[u'PropDataSize'] = self.PropDataSize rec[u'PropData'] = fix_incomingText(self.PropData) rec[u'ItemDataSize'] = self.ItemDataSize rec[u'ItemData'] = fix_incomingText(self.ItemData) rec[u'PlusDataSize'] = self.PlusDataSize rec[u'PlusData'] = fix_incomingText(self.PlusData) return rec def readRecord(self, rec): '''ÓÉÓÚMongoDB¶Á³öÀ´ÊÇunicode,ËùÓÐ×Ö·û´®ÐèÒª½øÐÐת»»''' self.PlayerID = rec.get(u'PlayerID', 0) self.GeTuiIDSize = rec.get(u'GeTuiIDSize', 0) self.GeTuiID = fix_outgoingText(rec.get(u'GeTuiID', u'')) self.LV = rec.get(u'LV', 0) self.OffTime = rec.get(u'OffTime', 0) self.PropDataSize = rec.get(u'PropDataSize', 0) self.PropData = fix_outgoingText(rec.get(u'PropData', u'')) self.ItemDataSize = rec.get(u'ItemDataSize', 0) self.ItemData = fix_outgoingText(rec.get(u'ItemData', u'')) self.PlusDataSize = rec.get(u'PlusDataSize', 0) self.PlusData = fix_outgoingText(rec.get(u'PlusData', u'')) #Can not implement adoLoadStr method:No key defined! def adoInsert(self, collection): '''Ö´ÐвåÈë''' trycnt = 0 rec = self.getRecord() while(True): try: collection.insert(rec, False, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_152, 'Insert failed!PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True #Can not implement adoUpdateStr method:No key defined! def adoUpdateEx(self, collection, spec): '''Ö´ÐиüÐÂ''' trycnt = 0 rec = self.getRecord() while(True): try: collection.update(spec, {'$set':rec}, False, False, True, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_154, 'Update failed!PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True #Can not implement adoCheckUpdateStr method:No key defined! #Can not implement adoCheckUpdateExStr method:No key defined! def getAdoRecords(self, resultCollection): '''²éѯ½á¹û´ò°ü³É¶þ½øÖÆÁ÷''' result = '' result = CommFunc.WriteDWORD(result, resultCollection.count()) for rec in resultCollection: self.readRecord(rec) result += self.getBuffer() return result def adoQueryIndex(self, collection): '''ÓÃË÷Òý×ֶβéÕÒ''' resultCollection = collection.find({'PlayerID':self.PlayerID}) return self.getAdoRecords(resultCollection) def adoQueryCustom(self, collection, queryDict): '''×Ô¶¨Òå²éѯ''' resultCollection = collection.find(queryDict) return self.getAdoRecords(resultCollection) def adoQueryAll(self, collection): '''²éѯËùÓÐ''' resultCollection = collection.find() return self.getAdoRecords(resultCollection) def adoDeleteByIndex(self, collection): '''¸ù¾ÝË÷Òýɾ³ý''' trycnt = 0 while(True): try: collection.remove({'PlayerID':self.PlayerID}) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:PlayerID = %s"%(self.__class__.__name__, inspect.stack()[0][3], self.PlayerID)) msg = error.formatMsg('error', error.ERROR_NO_155, 'delete failure!self.PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True def outputString(self): output = '''//Íæ¼ÒÊý¾Ý²é¿´»º´æ±í#tagPlayerViewCache: PlayerID = %s, GeTuiIDSize = %s, GeTuiID = %s, LV = %s, OffTime = %s, PropDataSize = %s, PropData = %s, ItemDataSize = %s, ItemData = %s, PlusDataSize = %s, PlusData = %s, ADOResult = %s, '''%( self.PlayerID, self.GeTuiIDSize, self.GeTuiID, self.LV, self.OffTime, self.PropDataSize, self.PropData, self.ItemDataSize, self.ItemData, self.PlusDataSize, self.PlusData, self.ADOResult, ) return output def dumpString(self): output = '''%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s'''%( self.PlayerID, self.GeTuiIDSize, self.GeTuiID, self.LV, self.OffTime, self.PropDataSize, self.PropData, self.ItemDataSize, self.ItemData, self.PlusDataSize, self.PlusData, ) return output #Íæ¼ÒºÃÓѱí#tagDBPyPlayerFriend class tagDBPyPlayerFriend(Structure): _pack_ = 1 _fields_ = [ ('PlayerID', ctypes.c_ulong), ('TagID', ctypes.c_ulong), ('ADOResult', ctypes.c_ulong), ] def __init__(self): Structure.__init__(self) self.clear() def clear(self): memset(addressof(self), 0, self.getLength()) def readData(self, buf, pos = 0, length = 0): if not pos <= length: msg = error.formatMsg('error', error.ERROR_NO_148, '(pos = %s) > (length = %s)'%(pos, length)) mylog.error(msg) return -1 if len(buf) < pos + self.getLength(): msg = error.formatMsg('error', error.ERROR_NO_149, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength())) mylog.error(msg) self.clear() self.PlayerID, pos = CommFunc.ReadDWORD(buf, pos) self.TagID, pos = CommFunc.ReadDWORD(buf, pos) return self.getLength() def getBuffer(self): buf = create_string_buffer(self.getLength()) memmove(addressof(buf), addressof(self), self.getLength()) return string_at(addressof(buf), self.getLength()) def getLength(self): return sizeof(tagDBPyPlayerFriend) def getRecord(self): '''×éÖ¯´æ´¢¼Ç¼''' rec = {} rec[u'PlayerID'] = self.PlayerID rec[u'TagID'] = self.TagID return rec def readRecord(self, rec): '''ÓÉÓÚMongoDB¶Á³öÀ´ÊÇunicode,ËùÓÐ×Ö·û´®ÐèÒª½øÐÐת»»''' self.PlayerID = rec.get(u'PlayerID', 0) self.TagID = rec.get(u'TagID', 0) #Can not implement adoLoadStr method:No key defined! def adoInsert(self, collection): '''Ö´ÐвåÈë''' trycnt = 0 rec = self.getRecord() while(True): try: collection.insert(rec, False, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_152, 'Insert failed!PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True #Can not implement adoUpdateStr method:No key defined! def adoUpdateEx(self, collection, spec): '''Ö´ÐиüÐÂ''' trycnt = 0 rec = self.getRecord() while(True): try: collection.update(spec, {'$set':rec}, False, False, True, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_154, 'Update failed!PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True #Can not implement adoCheckUpdateStr method:No key defined! #Can not implement adoCheckUpdateExStr method:No key defined! def getAdoRecords(self, resultCollection): '''²éѯ½á¹û´ò°ü³É¶þ½øÖÆÁ÷''' result = '' result = CommFunc.WriteDWORD(result, resultCollection.count()) for rec in resultCollection: self.readRecord(rec) result += self.getBuffer() return result def adoQueryIndex(self, collection): '''ÓÃË÷Òý×ֶβéÕÒ''' resultCollection = collection.find({'PlayerID':self.PlayerID}) return self.getAdoRecords(resultCollection) def adoQueryCustom(self, collection, queryDict): '''×Ô¶¨Òå²éѯ''' resultCollection = collection.find(queryDict) return self.getAdoRecords(resultCollection) def adoQueryAll(self, collection): '''²éѯËùÓÐ''' resultCollection = collection.find() return self.getAdoRecords(resultCollection) def adoDeleteByIndex(self, collection): '''¸ù¾ÝË÷Òýɾ³ý''' trycnt = 0 while(True): try: collection.remove({'PlayerID':self.PlayerID}) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:PlayerID = %s"%(self.__class__.__name__, inspect.stack()[0][3], self.PlayerID)) msg = error.formatMsg('error', error.ERROR_NO_155, 'delete failure!self.PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True def outputString(self): output = '''//Íæ¼ÒºÃÓѱí#tagDBPyPlayerFriend: PlayerID = %s, TagID = %s, ADOResult = %s, '''%( self.PlayerID, self.TagID, self.ADOResult, ) return output def dumpString(self): output = '''%1s\t%1s'''%( self.PlayerID, self.TagID, ) return output #¸öÈËÉç½»×ܱí #tagPersonalSocial class tagPersonalSocial(Structure): _pack_ = 1 _fields_ = [ ('PlayerID', ctypes.c_ulong), ('PlayerName', ctypes.c_char * 33), ('Job', ctypes.c_ubyte), ('LV', ctypes.c_ushort), ('RealmLV', ctypes.c_ushort), ('OnlineType', ctypes.c_ubyte), ('RefCount', ctypes.c_ulong), ('Face', ctypes.c_ulong), ('FacePic', ctypes.c_ulong), ('ADOResult', ctypes.c_ulong), ] def __init__(self): Structure.__init__(self) self.clear() def clear(self): memset(addressof(self), 0, self.getLength()) def readData(self, buf, pos = 0, length = 0): if not pos <= length: msg = error.formatMsg('error', error.ERROR_NO_148, '(pos = %s) > (length = %s)'%(pos, length)) mylog.error(msg) return -1 if len(buf) < pos + self.getLength(): msg = error.formatMsg('error', error.ERROR_NO_149, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength())) mylog.error(msg) self.clear() self.PlayerID, pos = CommFunc.ReadDWORD(buf, pos) self.PlayerName, pos = CommFunc.ReadString(buf, pos, 33) self.Job, pos = CommFunc.ReadBYTE(buf, pos) self.LV, pos = CommFunc.ReadWORD(buf, pos) self.RealmLV, pos = CommFunc.ReadWORD(buf, pos) self.OnlineType, pos = CommFunc.ReadBYTE(buf, pos) self.RefCount, pos = CommFunc.ReadDWORD(buf, pos) self.Face, pos = CommFunc.ReadDWORD(buf, pos) self.FacePic, pos = CommFunc.ReadDWORD(buf, pos) return self.getLength() def getBuffer(self): buf = create_string_buffer(self.getLength()) memmove(addressof(buf), addressof(self), self.getLength()) return string_at(addressof(buf), self.getLength()) def getLength(self): return sizeof(tagPersonalSocial) def getRecord(self): '''×éÖ¯´æ´¢¼Ç¼''' rec = {} rec[u'PlayerID'] = self.PlayerID rec[u'PlayerName'] = fix_incomingText(self.PlayerName) rec[u'Job'] = self.Job rec[u'LV'] = self.LV rec[u'RealmLV'] = self.RealmLV rec[u'OnlineType'] = self.OnlineType rec[u'RefCount'] = self.RefCount rec[u'Face'] = self.Face rec[u'FacePic'] = self.FacePic return rec def readRecord(self, rec): '''ÓÉÓÚMongoDB¶Á³öÀ´ÊÇunicode,ËùÓÐ×Ö·û´®ÐèÒª½øÐÐת»»''' self.PlayerID = rec.get(u'PlayerID', 0) self.PlayerName = fix_outgoingText(rec.get(u'PlayerName', u'')) self.Job = rec.get(u'Job', 0) self.LV = rec.get(u'LV', 0) self.RealmLV = rec.get(u'RealmLV', 0) self.OnlineType = rec.get(u'OnlineType', 0) self.RefCount = rec.get(u'RefCount', 0) self.Face = rec.get(u'Face', 0) self.FacePic = rec.get(u'FacePic', 0) def adoLoad(self, collection): '''ʹÓÃKEY²éÕÒ²¢¶ÁÈ¡''' resultCollection = collection.find({'PlayerID':self.PlayerID}) if resultCollection.count() <= 0: return False #ÓÉÓÚÊÇKEY²éÕÒ£¬ËùÓÐÈç¹û´æÔÚ¾ÍÖ»ÓÐÒ»Ìõ¼Ç¼ rec = resultCollection[0] #¶ÁÈ¡Êý¾Ý self.readRecord(rec) return True def adoInsert(self, collection): '''Ö´ÐвåÈë''' trycnt = 0 rec = self.getRecord() while(True): try: collection.insert(rec, False, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_152, 'Insert failed!PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True def adoUpdate(self, collection): '''Ö´ÐиüÐÂ''' trycnt = 0 rec = self.getRecord() while(True): try: collection.update({'PlayerID':self.PlayerID}, {'$set':rec}, False, False, True, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_153, 'Update failed!PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True def adoUpdateEx(self, collection, spec): '''Ö´ÐиüÐÂ''' trycnt = 0 rec = self.getRecord() while(True): try: collection.update(spec, {'$set':rec}, False, False, True, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_154, 'Update failed!PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True def adoCheckUpdate(self, collection): '''¸ù¾ÝÇé¿öÖ´ÐвåÈë»ò¸üÐÂ''' resultCollection = collection.find({'PlayerID':self.PlayerID}) if resultCollection.count() <= 0: return self.adoInsert(collection) return self.adoUpdate(collection) def adoCheckUpdateEx(self, collection, spec): '''¸ù¾ÝÇé¿öÖ´ÐвåÈë»ò¸üÐÂ''' resultCollection = collection.find(spec) if resultCollection.count() <= 0: return self.adoInsert(collection) return self.adoUpdateEx(collection, spec) def getAdoRecords(self, resultCollection): '''²éѯ½á¹û´ò°ü³É¶þ½øÖÆÁ÷''' result = '' result = CommFunc.WriteDWORD(result, resultCollection.count()) for rec in resultCollection: self.readRecord(rec) result += self.getBuffer() return result def adoQueryIndex(self, collection): '''ÓÃË÷Òý×ֶβéÕÒ''' resultCollection = collection.find({'PlayerID':self.PlayerID}) return self.getAdoRecords(resultCollection) def adoQueryCustom(self, collection, queryDict): '''×Ô¶¨Òå²éѯ''' resultCollection = collection.find(queryDict) return self.getAdoRecords(resultCollection) def adoQueryAll(self, collection): '''²éѯËùÓÐ''' resultCollection = collection.find() return self.getAdoRecords(resultCollection) def adoDeleteByIndex(self, collection): '''¸ù¾ÝË÷Òýɾ³ý''' trycnt = 0 while(True): try: collection.remove({'PlayerID':self.PlayerID}) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:PlayerID = %s"%(self.__class__.__name__, inspect.stack()[0][3], self.PlayerID)) msg = error.formatMsg('error', error.ERROR_NO_155, 'delete failure!self.PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True def outputString(self): output = '''//¸öÈËÉç½»×ܱí #tagPersonalSocial: PlayerID = %s, PlayerName = %s, Job = %s, LV = %s, RealmLV = %s, OnlineType = %s, RefCount = %s, Face = %s, FacePic = %s, ADOResult = %s, '''%( self.PlayerID, self.PlayerName, self.Job, self.LV, self.RealmLV, self.OnlineType, self.RefCount, self.Face, self.FacePic, self.ADOResult, ) return output def dumpString(self): output = '''%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s'''%( self.PlayerID, self.PlayerName, self.Job, self.LV, self.RealmLV, self.OnlineType, self.RefCount, self.Face, self.FacePic, ) return output #CharÊý×éÀàÐÍSet½Ó¿Ú,ʹÓøýӿڶԴËÀàÐÍÊý¾Ý¸³Öµ£¬·ÀÖ¹¸³ÖµµÄÊý¾Ý¹ý³¤±¨´í def SetPlayerName(self,Str): if len(Str)<=33: self.PlayerName = Str else: self.PlayerName = Str[:33] #Íæ¼ÒºÚÃûµ¥ #tagDBPyPlayerBlack class tagDBPyPlayerBlack(Structure): _pack_ = 1 _fields_ = [ ('PlayerID', ctypes.c_ulong), ('TagID', ctypes.c_ulong), ('ADOResult', ctypes.c_ulong), ] def __init__(self): Structure.__init__(self) self.clear() def clear(self): memset(addressof(self), 0, self.getLength()) def readData(self, buf, pos = 0, length = 0): if not pos <= length: msg = error.formatMsg('error', error.ERROR_NO_148, '(pos = %s) > (length = %s)'%(pos, length)) mylog.error(msg) return -1 if len(buf) < pos + self.getLength(): msg = error.formatMsg('error', error.ERROR_NO_149, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength())) mylog.error(msg) self.clear() self.PlayerID, pos = CommFunc.ReadDWORD(buf, pos) self.TagID, pos = CommFunc.ReadDWORD(buf, pos) return self.getLength() def getBuffer(self): buf = create_string_buffer(self.getLength()) memmove(addressof(buf), addressof(self), self.getLength()) return string_at(addressof(buf), self.getLength()) def getLength(self): return sizeof(tagDBPyPlayerBlack) def getRecord(self): '''×éÖ¯´æ´¢¼Ç¼''' rec = {} rec[u'PlayerID'] = self.PlayerID rec[u'TagID'] = self.TagID return rec def readRecord(self, rec): '''ÓÉÓÚMongoDB¶Á³öÀ´ÊÇunicode,ËùÓÐ×Ö·û´®ÐèÒª½øÐÐת»»''' self.PlayerID = rec.get(u'PlayerID', 0) self.TagID = rec.get(u'TagID', 0) #Can not implement adoLoadStr method:No key defined! def adoInsert(self, collection): '''Ö´ÐвåÈë''' trycnt = 0 rec = self.getRecord() while(True): try: collection.insert(rec, False, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_152, 'Insert failed!PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True #Can not implement adoUpdateStr method:No key defined! def adoUpdateEx(self, collection, spec): '''Ö´ÐиüÐÂ''' trycnt = 0 rec = self.getRecord() while(True): try: collection.update(spec, {'$set':rec}, False, False, True, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_154, 'Update failed!PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True #Can not implement adoCheckUpdateStr method:No key defined! #Can not implement adoCheckUpdateExStr method:No key defined! def getAdoRecords(self, resultCollection): '''²éѯ½á¹û´ò°ü³É¶þ½øÖÆÁ÷''' result = '' result = CommFunc.WriteDWORD(result, resultCollection.count()) for rec in resultCollection: self.readRecord(rec) result += self.getBuffer() return result def adoQueryIndex(self, collection): '''ÓÃË÷Òý×ֶβéÕÒ''' resultCollection = collection.find({'PlayerID':self.PlayerID}) return self.getAdoRecords(resultCollection) def adoQueryCustom(self, collection, queryDict): '''×Ô¶¨Òå²éѯ''' resultCollection = collection.find(queryDict) return self.getAdoRecords(resultCollection) def adoQueryAll(self, collection): '''²éѯËùÓÐ''' resultCollection = collection.find() return self.getAdoRecords(resultCollection) def adoDeleteByIndex(self, collection): '''¸ù¾ÝË÷Òýɾ³ý''' trycnt = 0 while(True): try: collection.remove({'PlayerID':self.PlayerID}) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:PlayerID = %s"%(self.__class__.__name__, inspect.stack()[0][3], self.PlayerID)) msg = error.formatMsg('error', error.ERROR_NO_155, 'delete failure!self.PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True def outputString(self): output = '''//Íæ¼ÒºÚÃûµ¥ #tagDBPyPlayerBlack: PlayerID = %s, TagID = %s, ADOResult = %s, '''%( self.PlayerID, self.TagID, self.ADOResult, ) return output def dumpString(self): output = '''%1s\t%1s'''%( self.PlayerID, self.TagID, ) return output #×î½üÁªÏµÈË #tagDBPyPlayerContacts class tagDBPyPlayerContacts(Structure): _pack_ = 1 _fields_ = [ ('PlayerID', ctypes.c_ulong), ('TagID', ctypes.c_ulong), ('Timestamp', ctypes.c_ulong), ('ADOResult', ctypes.c_ulong), ] def __init__(self): Structure.__init__(self) self.clear() def clear(self): memset(addressof(self), 0, self.getLength()) def readData(self, buf, pos = 0, length = 0): if not pos <= length: msg = error.formatMsg('error', error.ERROR_NO_148, '(pos = %s) > (length = %s)'%(pos, length)) mylog.error(msg) return -1 if len(buf) < pos + self.getLength(): msg = error.formatMsg('error', error.ERROR_NO_149, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength())) mylog.error(msg) self.clear() self.PlayerID, pos = CommFunc.ReadDWORD(buf, pos) self.TagID, pos = CommFunc.ReadDWORD(buf, pos) self.Timestamp, pos = CommFunc.ReadDWORD(buf, pos) return self.getLength() def getBuffer(self): buf = create_string_buffer(self.getLength()) memmove(addressof(buf), addressof(self), self.getLength()) return string_at(addressof(buf), self.getLength()) def getLength(self): return sizeof(tagDBPyPlayerContacts) def getRecord(self): '''×éÖ¯´æ´¢¼Ç¼''' rec = {} rec[u'PlayerID'] = self.PlayerID rec[u'TagID'] = self.TagID rec[u'Timestamp'] = self.Timestamp return rec def readRecord(self, rec): '''ÓÉÓÚMongoDB¶Á³öÀ´ÊÇunicode,ËùÓÐ×Ö·û´®ÐèÒª½øÐÐת»»''' self.PlayerID = rec.get(u'PlayerID', 0) self.TagID = rec.get(u'TagID', 0) self.Timestamp = rec.get(u'Timestamp', 0) #Can not implement adoLoadStr method:No key defined! def adoInsert(self, collection): '''Ö´ÐвåÈë''' trycnt = 0 rec = self.getRecord() while(True): try: collection.insert(rec, False, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_152, 'Insert failed!PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True #Can not implement adoUpdateStr method:No key defined! def adoUpdateEx(self, collection, spec): '''Ö´ÐиüÐÂ''' trycnt = 0 rec = self.getRecord() while(True): try: collection.update(spec, {'$set':rec}, False, False, True, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_154, 'Update failed!PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True #Can not implement adoCheckUpdateStr method:No key defined! #Can not implement adoCheckUpdateExStr method:No key defined! def getAdoRecords(self, resultCollection): '''²éѯ½á¹û´ò°ü³É¶þ½øÖÆÁ÷''' result = '' result = CommFunc.WriteDWORD(result, resultCollection.count()) for rec in resultCollection: self.readRecord(rec) result += self.getBuffer() return result def adoQueryIndex(self, collection): '''ÓÃË÷Òý×ֶβéÕÒ''' resultCollection = collection.find({'PlayerID':self.PlayerID}) return self.getAdoRecords(resultCollection) def adoQueryCustom(self, collection, queryDict): '''×Ô¶¨Òå²éѯ''' resultCollection = collection.find(queryDict) return self.getAdoRecords(resultCollection) def adoQueryAll(self, collection): '''²éѯËùÓÐ''' resultCollection = collection.find() return self.getAdoRecords(resultCollection) def adoDeleteByIndex(self, collection): '''¸ù¾ÝË÷Òýɾ³ý''' trycnt = 0 while(True): try: collection.remove({'PlayerID':self.PlayerID}) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:PlayerID = %s"%(self.__class__.__name__, inspect.stack()[0][3], self.PlayerID)) msg = error.formatMsg('error', error.ERROR_NO_155, 'delete failure!self.PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True def outputString(self): output = '''//×î½üÁªÏµÈË #tagDBPyPlayerContacts: PlayerID = %s, TagID = %s, Timestamp = %s, ADOResult = %s, '''%( self.PlayerID, self.TagID, self.Timestamp, self.ADOResult, ) return output def dumpString(self): output = '''%1s\t%1s\t%1s'''%( self.PlayerID, self.TagID, self.Timestamp, ) return output #Íæ¼Ò³ðÈ˱í#tagPlayerEnemy class tagPlayerEnemy(Structure): _pack_ = 1 _fields_ = [ ('PlayerID', ctypes.c_ulong), ('TagID', ctypes.c_ulong), ('Timestamp', ctypes.c_ulong), ('ADOResult', ctypes.c_ulong), ] def __init__(self): Structure.__init__(self) self.clear() def clear(self): memset(addressof(self), 0, self.getLength()) def readData(self, buf, pos = 0, length = 0): if not pos <= length: msg = error.formatMsg('error', error.ERROR_NO_148, '(pos = %s) > (length = %s)'%(pos, length)) mylog.error(msg) return -1 if len(buf) < pos + self.getLength(): msg = error.formatMsg('error', error.ERROR_NO_149, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength())) mylog.error(msg) self.clear() self.PlayerID, pos = CommFunc.ReadDWORD(buf, pos) self.TagID, pos = CommFunc.ReadDWORD(buf, pos) self.Timestamp, pos = CommFunc.ReadDWORD(buf, pos) return self.getLength() def getBuffer(self): buf = create_string_buffer(self.getLength()) memmove(addressof(buf), addressof(self), self.getLength()) return string_at(addressof(buf), self.getLength()) def getLength(self): return sizeof(tagPlayerEnemy) def getRecord(self): '''×éÖ¯´æ´¢¼Ç¼''' rec = {} rec[u'PlayerID'] = self.PlayerID rec[u'TagID'] = self.TagID rec[u'Timestamp'] = self.Timestamp return rec def readRecord(self, rec): '''ÓÉÓÚMongoDB¶Á³öÀ´ÊÇunicode,ËùÓÐ×Ö·û´®ÐèÒª½øÐÐת»»''' self.PlayerID = rec.get(u'PlayerID', 0) self.TagID = rec.get(u'TagID', 0) self.Timestamp = rec.get(u'Timestamp', 0) #Can not implement adoLoadStr method:No key defined! def adoInsert(self, collection): '''Ö´ÐвåÈë''' trycnt = 0 rec = self.getRecord() while(True): try: collection.insert(rec, False, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_152, 'Insert failed!PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True #Can not implement adoUpdateStr method:No key defined! def adoUpdateEx(self, collection, spec): '''Ö´ÐиüÐÂ''' trycnt = 0 rec = self.getRecord() while(True): try: collection.update(spec, {'$set':rec}, False, False, True, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_154, 'Update failed!PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True #Can not implement adoCheckUpdateStr method:No key defined! #Can not implement adoCheckUpdateExStr method:No key defined! def getAdoRecords(self, resultCollection): '''²éѯ½á¹û´ò°ü³É¶þ½øÖÆÁ÷''' result = '' result = CommFunc.WriteDWORD(result, resultCollection.count()) for rec in resultCollection: self.readRecord(rec) result += self.getBuffer() return result def adoQueryIndex(self, collection): '''ÓÃË÷Òý×ֶβéÕÒ''' resultCollection = collection.find({'PlayerID':self.PlayerID}) return self.getAdoRecords(resultCollection) def adoQueryCustom(self, collection, queryDict): '''×Ô¶¨Òå²éѯ''' resultCollection = collection.find(queryDict) return self.getAdoRecords(resultCollection) def adoQueryAll(self, collection): '''²éѯËùÓÐ''' resultCollection = collection.find() return self.getAdoRecords(resultCollection) def adoDeleteByIndex(self, collection): '''¸ù¾ÝË÷Òýɾ³ý''' trycnt = 0 while(True): try: collection.remove({'PlayerID':self.PlayerID}) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:PlayerID = %s"%(self.__class__.__name__, inspect.stack()[0][3], self.PlayerID)) msg = error.formatMsg('error', error.ERROR_NO_155, 'delete failure!self.PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True def outputString(self): output = '''//Íæ¼Ò³ðÈ˱í#tagPlayerEnemy: PlayerID = %s, TagID = %s, Timestamp = %s, ADOResult = %s, '''%( self.PlayerID, self.TagID, self.Timestamp, self.ADOResult, ) return output def dumpString(self): output = '''%1s\t%1s\t%1s'''%( self.PlayerID, self.TagID, self.Timestamp, ) return output # ¼Ò×å²Ö¿âÎïÆ·±í#tagDBPyFamilyStoreItem class tagDBPyFamilyStoreItem(Structure): _pack_ = 1 _fields_ = [ ('FamilyID', ctypes.c_ulong), ('ItemIndex', ctypes.c_ubyte), ('ItemID', ctypes.c_ulong), ('UserDataLen', ctypes.c_ulong), ('UserData', ctypes.c_char_p), ('ADOResult', ctypes.c_ulong), ] def __init__(self): Structure.__init__(self) self.clear() def clear(self): self.FamilyID = 0 self.ItemIndex = 0 self.ItemID = 0 self.UserDataLen = 0 self.UserData = '' def readData(self, buf, pos = 0, length = 0): if not pos <= length: msg = error.formatMsg('error', error.ERROR_NO_148, '(pos = %s) > (length = %s)'%(pos, length)) mylog.error(msg) return -1 if len(buf) < pos + self.getLength(): msg = error.formatMsg('error', error.ERROR_NO_149, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength())) mylog.error(msg) self.clear() self.FamilyID, pos = CommFunc.ReadDWORD(buf, pos) self.ItemIndex, pos = CommFunc.ReadBYTE(buf, pos) self.ItemID, pos = CommFunc.ReadDWORD(buf, pos) self.UserDataLen, pos = CommFunc.ReadDWORD(buf, pos) tmp, pos = CommFunc.ReadString(buf, pos, self.UserDataLen) self.UserData = ctypes.c_char_p(tmp) return self.getLength() def getBuffer(self): buf = '' buf = CommFunc.WriteDWORD(buf, self.FamilyID) buf = CommFunc.WriteBYTE(buf, self.ItemIndex) buf = CommFunc.WriteDWORD(buf, self.ItemID) buf = CommFunc.WriteDWORD(buf, self.UserDataLen) buf = CommFunc.WriteString(buf, self.UserDataLen, self.UserData) return buf def getLength(self): length = 0 length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ubyte) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += self.UserDataLen return length def getRecord(self): '''×éÖ¯´æ´¢¼Ç¼''' rec = {} rec[u'FamilyID'] = self.FamilyID rec[u'ItemIndex'] = self.ItemIndex rec[u'ItemID'] = self.ItemID rec[u'UserDataLen'] = self.UserDataLen rec[u'UserData'] = fix_incomingText(self.UserData) return rec def readRecord(self, rec): '''ÓÉÓÚMongoDB¶Á³öÀ´ÊÇunicode,ËùÓÐ×Ö·û´®ÐèÒª½øÐÐת»»''' self.FamilyID = rec.get(u'FamilyID', 0) self.ItemIndex = rec.get(u'ItemIndex', 0) self.ItemID = rec.get(u'ItemID', 0) self.UserDataLen = rec.get(u'UserDataLen', 0) self.UserData = fix_outgoingText(rec.get(u'UserData', u'')) #Can not implement adoLoadStr method:No key defined! def adoInsert(self, collection): '''Ö´ÐвåÈë''' trycnt = 0 rec = self.getRecord() while(True): try: collection.insert(rec, False, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_152, 'Insert failed!FamilyID = %s, error = %s, trycnt = %d'%(self.FamilyID, err, trycnt)) mylog.error(msg) return False return True #Can not implement adoUpdateStr method:No key defined! def adoUpdateEx(self, collection, spec): '''Ö´ÐиüÐÂ''' trycnt = 0 rec = self.getRecord() while(True): try: collection.update(spec, {'$set':rec}, False, False, True, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_154, 'Update failed!FamilyID = %s, error = %s, trycnt = %d'%(self.FamilyID, err, trycnt)) mylog.error(msg) return False return True #Can not implement adoCheckUpdateStr method:No key defined! #Can not implement adoCheckUpdateExStr method:No key defined! def getAdoRecords(self, resultCollection): '''²éѯ½á¹û´ò°ü³É¶þ½øÖÆÁ÷''' result = '' result = CommFunc.WriteDWORD(result, resultCollection.count()) for rec in resultCollection: self.readRecord(rec) result += self.getBuffer() return result def adoQueryIndex(self, collection): '''ÓÃË÷Òý×ֶβéÕÒ''' resultCollection = collection.find({'FamilyID':self.FamilyID}) return self.getAdoRecords(resultCollection) def adoQueryCustom(self, collection, queryDict): '''×Ô¶¨Òå²éѯ''' resultCollection = collection.find(queryDict) return self.getAdoRecords(resultCollection) def adoQueryAll(self, collection): '''²éѯËùÓÐ''' resultCollection = collection.find() return self.getAdoRecords(resultCollection) def adoDeleteByIndex(self, collection): '''¸ù¾ÝË÷Òýɾ³ý''' trycnt = 0 while(True): try: collection.remove({'FamilyID':self.FamilyID}) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:FamilyID = %s"%(self.__class__.__name__, inspect.stack()[0][3], self.FamilyID)) msg = error.formatMsg('error', error.ERROR_NO_155, 'delete failure!self.FamilyID = %s, error = %s, trycnt = %d'%(self.FamilyID, err, trycnt)) mylog.error(msg) return False return True def outputString(self): output = '''// ¼Ò×å²Ö¿âÎïÆ·±í#tagDBPyFamilyStoreItem: FamilyID = %s, ItemIndex = %s, ItemID = %s, UserDataLen = %s, UserData = %s, ADOResult = %s, '''%( self.FamilyID, self.ItemIndex, self.ItemID, self.UserDataLen, self.UserData, self.ADOResult, ) return output def dumpString(self): output = '''%1s\t%1s\t%1s\t%1s\t%1s'''%( self.FamilyID, self.ItemIndex, self.ItemID, self.UserDataLen, self.UserData, ) return output #½»Ò×Ëù¼Ç¼±í#tagDBPyBourseRecord class tagDBPyBourseRecord(Structure): _pack_ = 1 _fields_ = [ ('PlayerID', ctypes.c_ulong), ('Type', ctypes.c_ubyte), ('Timestamp', ctypes.c_ulong), ('TradeTax', ctypes.c_ulong), ('TradeMoney', ctypes.c_ulong), ('UserDataLen', ctypes.c_ushort), ('UserData', ctypes.c_char_p), ('ADOResult', ctypes.c_ulong), ] def __init__(self): Structure.__init__(self) self.clear() def clear(self): self.PlayerID = 0 self.Type = 0 self.Timestamp = 0 self.TradeTax = 0 self.TradeMoney = 0 self.UserDataLen = 0 self.UserData = '' def readData(self, buf, pos = 0, length = 0): if not pos <= length: msg = error.formatMsg('error', error.ERROR_NO_148, '(pos = %s) > (length = %s)'%(pos, length)) mylog.error(msg) return -1 if len(buf) < pos + self.getLength(): msg = error.formatMsg('error', error.ERROR_NO_149, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength())) mylog.error(msg) self.clear() self.PlayerID, pos = CommFunc.ReadDWORD(buf, pos) self.Type, pos = CommFunc.ReadBYTE(buf, pos) self.Timestamp, pos = CommFunc.ReadDWORD(buf, pos) self.TradeTax, pos = CommFunc.ReadDWORD(buf, pos) self.TradeMoney, pos = CommFunc.ReadDWORD(buf, pos) self.UserDataLen, pos = CommFunc.ReadWORD(buf, pos) tmp, pos = CommFunc.ReadString(buf, pos, self.UserDataLen) self.UserData = ctypes.c_char_p(tmp) return self.getLength() def getBuffer(self): buf = '' buf = CommFunc.WriteDWORD(buf, self.PlayerID) buf = CommFunc.WriteBYTE(buf, self.Type) buf = CommFunc.WriteDWORD(buf, self.Timestamp) buf = CommFunc.WriteDWORD(buf, self.TradeTax) buf = CommFunc.WriteDWORD(buf, self.TradeMoney) buf = CommFunc.WriteWORD(buf, self.UserDataLen) buf = CommFunc.WriteString(buf, self.UserDataLen, self.UserData) return buf def getLength(self): length = 0 length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ubyte) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ushort) length += self.UserDataLen return length def getRecord(self): '''×éÖ¯´æ´¢¼Ç¼''' rec = {} rec[u'PlayerID'] = self.PlayerID rec[u'Type'] = self.Type rec[u'Timestamp'] = self.Timestamp rec[u'TradeTax'] = self.TradeTax rec[u'TradeMoney'] = self.TradeMoney rec[u'UserDataLen'] = self.UserDataLen rec[u'UserData'] = fix_incomingText(self.UserData) return rec def readRecord(self, rec): '''ÓÉÓÚMongoDB¶Á³öÀ´ÊÇunicode,ËùÓÐ×Ö·û´®ÐèÒª½øÐÐת»»''' self.PlayerID = rec.get(u'PlayerID', 0) self.Type = rec.get(u'Type', 0) self.Timestamp = rec.get(u'Timestamp', 0) self.TradeTax = rec.get(u'TradeTax', 0) self.TradeMoney = rec.get(u'TradeMoney', 0) self.UserDataLen = rec.get(u'UserDataLen', 0) self.UserData = fix_outgoingText(rec.get(u'UserData', u'')) #Can not implement adoLoadStr method:No key defined! def adoInsert(self, collection): '''Ö´ÐвåÈë''' trycnt = 0 rec = self.getRecord() while(True): try: collection.insert(rec, False, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_152, 'Insert failed!PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True #Can not implement adoUpdateStr method:No key defined! def adoUpdateEx(self, collection, spec): '''Ö´ÐиüÐÂ''' trycnt = 0 rec = self.getRecord() while(True): try: collection.update(spec, {'$set':rec}, False, False, True, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_154, 'Update failed!PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True #Can not implement adoCheckUpdateStr method:No key defined! #Can not implement adoCheckUpdateExStr method:No key defined! def getAdoRecords(self, resultCollection): '''²éѯ½á¹û´ò°ü³É¶þ½øÖÆÁ÷''' result = '' result = CommFunc.WriteDWORD(result, resultCollection.count()) for rec in resultCollection: self.readRecord(rec) result += self.getBuffer() return result def adoQueryIndex(self, collection): '''ÓÃË÷Òý×ֶβéÕÒ''' resultCollection = collection.find({'PlayerID':self.PlayerID}) return self.getAdoRecords(resultCollection) def adoQueryCustom(self, collection, queryDict): '''×Ô¶¨Òå²éѯ''' resultCollection = collection.find(queryDict) return self.getAdoRecords(resultCollection) def adoQueryAll(self, collection): '''²éѯËùÓÐ''' resultCollection = collection.find() return self.getAdoRecords(resultCollection) def adoDeleteByIndex(self, collection): '''¸ù¾ÝË÷Òýɾ³ý''' trycnt = 0 while(True): try: collection.remove({'PlayerID':self.PlayerID}) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:PlayerID = %s"%(self.__class__.__name__, inspect.stack()[0][3], self.PlayerID)) msg = error.formatMsg('error', error.ERROR_NO_155, 'delete failure!self.PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True def outputString(self): output = '''//½»Ò×Ëù¼Ç¼±í#tagDBPyBourseRecord: PlayerID = %s, Type = %s, Timestamp = %s, TradeTax = %s, TradeMoney = %s, UserDataLen = %s, UserData = %s, ADOResult = %s, '''%( self.PlayerID, self.Type, self.Timestamp, self.TradeTax, self.TradeMoney, self.UserDataLen, self.UserData, self.ADOResult, ) return output def dumpString(self): output = '''%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s'''%( self.PlayerID, self.Type, self.Timestamp, self.TradeTax, self.TradeMoney, self.UserDataLen, self.UserData, ) return output #½»Ò×ËùÎïÆ·×î½ü³É½»µ¥¼Û±í#tagDBPyBourseItemLastPrice class tagDBPyBourseItemLastPrice(Structure): _pack_ = 1 _fields_ = [ ('ItemID', ctypes.c_ulong), ('LastPrice', ctypes.c_ulong), ('ADOResult', ctypes.c_ulong), ] def __init__(self): Structure.__init__(self) self.clear() def clear(self): memset(addressof(self), 0, self.getLength()) def readData(self, buf, pos = 0, length = 0): if not pos <= length: msg = error.formatMsg('error', error.ERROR_NO_148, '(pos = %s) > (length = %s)'%(pos, length)) mylog.error(msg) return -1 if len(buf) < pos + self.getLength(): msg = error.formatMsg('error', error.ERROR_NO_149, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength())) mylog.error(msg) self.clear() self.ItemID, pos = CommFunc.ReadDWORD(buf, pos) self.LastPrice, pos = CommFunc.ReadDWORD(buf, pos) return self.getLength() def getBuffer(self): buf = create_string_buffer(self.getLength()) memmove(addressof(buf), addressof(self), self.getLength()) return string_at(addressof(buf), self.getLength()) def getLength(self): return sizeof(tagDBPyBourseItemLastPrice) def getRecord(self): '''×éÖ¯´æ´¢¼Ç¼''' rec = {} rec[u'ItemID'] = self.ItemID rec[u'LastPrice'] = self.LastPrice return rec def readRecord(self, rec): '''ÓÉÓÚMongoDB¶Á³öÀ´ÊÇunicode,ËùÓÐ×Ö·û´®ÐèÒª½øÐÐת»»''' self.ItemID = rec.get(u'ItemID', 0) self.LastPrice = rec.get(u'LastPrice', 0) #Can not implement adoLoadStr method:No key defined! def adoInsert(self, collection): '''Ö´ÐвåÈë''' trycnt = 0 rec = self.getRecord() while(True): try: collection.insert(rec, False, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_152, 'Insert failed!ItemID = %s, error = %s, trycnt = %d'%(self.ItemID, err, trycnt)) mylog.error(msg) return False return True #Can not implement adoUpdateStr method:No key defined! def adoUpdateEx(self, collection, spec): '''Ö´ÐиüÐÂ''' trycnt = 0 rec = self.getRecord() while(True): try: collection.update(spec, {'$set':rec}, False, False, True, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_154, 'Update failed!ItemID = %s, error = %s, trycnt = %d'%(self.ItemID, err, trycnt)) mylog.error(msg) return False return True #Can not implement adoCheckUpdateStr method:No key defined! #Can not implement adoCheckUpdateExStr method:No key defined! def getAdoRecords(self, resultCollection): '''²éѯ½á¹û´ò°ü³É¶þ½øÖÆÁ÷''' result = '' result = CommFunc.WriteDWORD(result, resultCollection.count()) for rec in resultCollection: self.readRecord(rec) result += self.getBuffer() return result def adoQueryIndex(self, collection): '''ÓÃË÷Òý×ֶβéÕÒ''' resultCollection = collection.find({'ItemID':self.ItemID}) return self.getAdoRecords(resultCollection) def adoQueryCustom(self, collection, queryDict): '''×Ô¶¨Òå²éѯ''' resultCollection = collection.find(queryDict) return self.getAdoRecords(resultCollection) def adoQueryAll(self, collection): '''²éѯËùÓÐ''' resultCollection = collection.find() return self.getAdoRecords(resultCollection) def adoDeleteByIndex(self, collection): '''¸ù¾ÝË÷Òýɾ³ý''' trycnt = 0 while(True): try: collection.remove({'ItemID':self.ItemID}) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:ItemID = %s"%(self.__class__.__name__, inspect.stack()[0][3], self.ItemID)) msg = error.formatMsg('error', error.ERROR_NO_155, 'delete failure!self.ItemID = %s, error = %s, trycnt = %d'%(self.ItemID, err, trycnt)) mylog.error(msg) return False return True def outputString(self): output = '''//½»Ò×ËùÎïÆ·×î½ü³É½»µ¥¼Û±í#tagDBPyBourseItemLastPrice: ItemID = %s, LastPrice = %s, ADOResult = %s, '''%( self.ItemID, self.LastPrice, self.ADOResult, ) return output def dumpString(self): output = '''%1s\t%1s'''%( self.ItemID, self.LastPrice, ) return output #Boss¹Ø×¢¼Ç¼±í#tagDBPyBossAttention class tagDBPyBossAttention(Structure): _pack_ = 1 _fields_ = [ ('PlayerID', ctypes.c_ulong), ('DataLen', ctypes.c_ushort), ('RecordData', ctypes.c_char_p), ('ADOResult', ctypes.c_ulong), ] def __init__(self): Structure.__init__(self) self.clear() def clear(self): self.PlayerID = 0 self.DataLen = 0 self.RecordData = '' def readData(self, buf, pos = 0, length = 0): if not pos <= length: msg = error.formatMsg('error', error.ERROR_NO_148, '(pos = %s) > (length = %s)'%(pos, length)) mylog.error(msg) return -1 if len(buf) < pos + self.getLength(): msg = error.formatMsg('error', error.ERROR_NO_149, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength())) mylog.error(msg) self.clear() self.PlayerID, pos = CommFunc.ReadDWORD(buf, pos) self.DataLen, pos = CommFunc.ReadWORD(buf, pos) tmp, pos = CommFunc.ReadString(buf, pos, self.DataLen) self.RecordData = ctypes.c_char_p(tmp) return self.getLength() def getBuffer(self): buf = '' buf = CommFunc.WriteDWORD(buf, self.PlayerID) buf = CommFunc.WriteWORD(buf, self.DataLen) buf = CommFunc.WriteString(buf, self.DataLen, self.RecordData) return buf def getLength(self): length = 0 length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ushort) length += self.DataLen return length def getRecord(self): '''×éÖ¯´æ´¢¼Ç¼''' rec = {} rec[u'PlayerID'] = self.PlayerID rec[u'DataLen'] = self.DataLen rec[u'RecordData'] = fix_incomingText(self.RecordData) return rec def readRecord(self, rec): '''ÓÉÓÚMongoDB¶Á³öÀ´ÊÇunicode,ËùÓÐ×Ö·û´®ÐèÒª½øÐÐת»»''' self.PlayerID = rec.get(u'PlayerID', 0) self.DataLen = rec.get(u'DataLen', 0) self.RecordData = fix_outgoingText(rec.get(u'RecordData', u'')) #Can not implement adoLoadStr method:No key defined! def adoInsert(self, collection): '''Ö´ÐвåÈë''' trycnt = 0 rec = self.getRecord() while(True): try: collection.insert(rec, False, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_152, 'Insert failed!PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True #Can not implement adoUpdateStr method:No key defined! def adoUpdateEx(self, collection, spec): '''Ö´ÐиüÐÂ''' trycnt = 0 rec = self.getRecord() while(True): try: collection.update(spec, {'$set':rec}, False, False, True, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_154, 'Update failed!PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True #Can not implement adoCheckUpdateStr method:No key defined! #Can not implement adoCheckUpdateExStr method:No key defined! def getAdoRecords(self, resultCollection): '''²éѯ½á¹û´ò°ü³É¶þ½øÖÆÁ÷''' result = '' result = CommFunc.WriteDWORD(result, resultCollection.count()) for rec in resultCollection: self.readRecord(rec) result += self.getBuffer() return result def adoQueryIndex(self, collection): '''ÓÃË÷Òý×ֶβéÕÒ''' resultCollection = collection.find({'PlayerID':self.PlayerID}) return self.getAdoRecords(resultCollection) def adoQueryCustom(self, collection, queryDict): '''×Ô¶¨Òå²éѯ''' resultCollection = collection.find(queryDict) return self.getAdoRecords(resultCollection) def adoQueryAll(self, collection): '''²éѯËùÓÐ''' resultCollection = collection.find() return self.getAdoRecords(resultCollection) def adoDeleteByIndex(self, collection): '''¸ù¾ÝË÷Òýɾ³ý''' trycnt = 0 while(True): try: collection.remove({'PlayerID':self.PlayerID}) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:PlayerID = %s"%(self.__class__.__name__, inspect.stack()[0][3], self.PlayerID)) msg = error.formatMsg('error', error.ERROR_NO_155, 'delete failure!self.PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True def outputString(self): output = '''//Boss¹Ø×¢¼Ç¼±í#tagDBPyBossAttention: PlayerID = %s, DataLen = %s, RecordData = %s, ADOResult = %s, '''%( self.PlayerID, self.DataLen, self.RecordData, self.ADOResult, ) return output def dumpString(self): output = '''%1s\t%1s\t%1s'''%( self.PlayerID, self.DataLen, self.RecordData, ) return output #·âħ̳¼Ç¼±í#tagDBPySealDemonRecord class tagDBPySealDemonRecord(Structure): _pack_ = 1 _fields_ = [ ('PlayerID', ctypes.c_ulong), ('LineID', ctypes.c_ubyte), ('Rank', ctypes.c_ushort), ('ADOResult', ctypes.c_ulong), ] def __init__(self): Structure.__init__(self) self.clear() def clear(self): memset(addressof(self), 0, self.getLength()) def readData(self, buf, pos = 0, length = 0): if not pos <= length: msg = error.formatMsg('error', error.ERROR_NO_148, '(pos = %s) > (length = %s)'%(pos, length)) mylog.error(msg) return -1 if len(buf) < pos + self.getLength(): msg = error.formatMsg('error', error.ERROR_NO_149, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength())) mylog.error(msg) self.clear() self.PlayerID, pos = CommFunc.ReadDWORD(buf, pos) self.LineID, pos = CommFunc.ReadBYTE(buf, pos) self.Rank, pos = CommFunc.ReadWORD(buf, pos) return self.getLength() def getBuffer(self): buf = create_string_buffer(self.getLength()) memmove(addressof(buf), addressof(self), self.getLength()) return string_at(addressof(buf), self.getLength()) def getLength(self): return sizeof(tagDBPySealDemonRecord) def getRecord(self): '''×éÖ¯´æ´¢¼Ç¼''' rec = {} rec[u'PlayerID'] = self.PlayerID rec[u'LineID'] = self.LineID rec[u'Rank'] = self.Rank return rec def readRecord(self, rec): '''ÓÉÓÚMongoDB¶Á³öÀ´ÊÇunicode,ËùÓÐ×Ö·û´®ÐèÒª½øÐÐת»»''' self.PlayerID = rec.get(u'PlayerID', 0) self.LineID = rec.get(u'LineID', 0) self.Rank = rec.get(u'Rank', 0) #Can not implement adoLoadStr method:No key defined! def adoInsert(self, collection): '''Ö´ÐвåÈë''' trycnt = 0 rec = self.getRecord() while(True): try: collection.insert(rec, False, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_152, 'Insert failed!PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True #Can not implement adoUpdateStr method:No key defined! def adoUpdateEx(self, collection, spec): '''Ö´ÐиüÐÂ''' trycnt = 0 rec = self.getRecord() while(True): try: collection.update(spec, {'$set':rec}, False, False, True, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_154, 'Update failed!PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True #Can not implement adoCheckUpdateStr method:No key defined! #Can not implement adoCheckUpdateExStr method:No key defined! def getAdoRecords(self, resultCollection): '''²éѯ½á¹û´ò°ü³É¶þ½øÖÆÁ÷''' result = '' result = CommFunc.WriteDWORD(result, resultCollection.count()) for rec in resultCollection: self.readRecord(rec) result += self.getBuffer() return result def adoQueryIndex(self, collection): '''ÓÃË÷Òý×ֶβéÕÒ''' resultCollection = collection.find({'PlayerID':self.PlayerID}) return self.getAdoRecords(resultCollection) def adoQueryCustom(self, collection, queryDict): '''×Ô¶¨Òå²éѯ''' resultCollection = collection.find(queryDict) return self.getAdoRecords(resultCollection) def adoQueryAll(self, collection): '''²éѯËùÓÐ''' resultCollection = collection.find() return self.getAdoRecords(resultCollection) def adoDeleteByIndex(self, collection): '''¸ù¾ÝË÷Òýɾ³ý''' trycnt = 0 while(True): try: collection.remove({'PlayerID':self.PlayerID}) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:PlayerID = %s"%(self.__class__.__name__, inspect.stack()[0][3], self.PlayerID)) msg = error.formatMsg('error', error.ERROR_NO_155, 'delete failure!self.PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True def outputString(self): output = '''//·âħ̳¼Ç¼±í#tagDBPySealDemonRecord: PlayerID = %s, LineID = %s, Rank = %s, ADOResult = %s, '''%( self.PlayerID, self.LineID, self.Rank, self.ADOResult, ) return output def dumpString(self): output = '''%1s\t%1s\t%1s'''%( self.PlayerID, self.LineID, self.Rank, ) return output #ÏÉħ֮Õù¼Ç¼±í#tagDBPyXMZZ class tagDBPyXMZZ(Structure): _pack_ = 1 _fields_ = [ ('PlayerID', ctypes.c_ulong), ('Name', ctypes.c_char * 33), ('Faction', ctypes.c_ubyte), ('Score', ctypes.c_ushort), ('WinCnt', ctypes.c_ubyte), ('LoseCnt', ctypes.c_ubyte), ('ConWinCnt', ctypes.c_ubyte), ('WinAwardRecord', ctypes.c_ulong), ('Len', ctypes.c_ushort), ('BetRecord', ctypes.c_char_p), ('ADOResult', ctypes.c_ulong), ] def __init__(self): Structure.__init__(self) self.clear() def clear(self): self.PlayerID = 0 self.Name = '' self.Faction = 0 self.Score = 0 self.WinCnt = 0 self.LoseCnt = 0 self.ConWinCnt = 0 self.WinAwardRecord = 0 self.Len = 0 self.BetRecord = '' def readData(self, buf, pos = 0, length = 0): if not pos <= length: msg = error.formatMsg('error', error.ERROR_NO_148, '(pos = %s) > (length = %s)'%(pos, length)) mylog.error(msg) return -1 if len(buf) < pos + self.getLength(): msg = error.formatMsg('error', error.ERROR_NO_149, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength())) mylog.error(msg) self.clear() self.PlayerID, pos = CommFunc.ReadDWORD(buf, pos) self.Name, pos = CommFunc.ReadString(buf, pos, 33) self.Faction, pos = CommFunc.ReadBYTE(buf, pos) self.Score, pos = CommFunc.ReadWORD(buf, pos) self.WinCnt, pos = CommFunc.ReadBYTE(buf, pos) self.LoseCnt, pos = CommFunc.ReadBYTE(buf, pos) self.ConWinCnt, pos = CommFunc.ReadBYTE(buf, pos) self.WinAwardRecord, pos = CommFunc.ReadDWORD(buf, pos) self.Len, pos = CommFunc.ReadWORD(buf, pos) tmp, pos = CommFunc.ReadString(buf, pos, self.Len) self.BetRecord = ctypes.c_char_p(tmp) return self.getLength() def getBuffer(self): buf = '' buf = CommFunc.WriteDWORD(buf, self.PlayerID) buf = CommFunc.WriteString(buf, sizeof(ctypes.c_char) * 33, self.Name) buf = CommFunc.WriteBYTE(buf, self.Faction) buf = CommFunc.WriteWORD(buf, self.Score) buf = CommFunc.WriteBYTE(buf, self.WinCnt) buf = CommFunc.WriteBYTE(buf, self.LoseCnt) buf = CommFunc.WriteBYTE(buf, self.ConWinCnt) buf = CommFunc.WriteDWORD(buf, self.WinAwardRecord) buf = CommFunc.WriteWORD(buf, self.Len) buf = CommFunc.WriteString(buf, self.Len, self.BetRecord) return buf def getLength(self): length = 0 length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_char) * 33 length += sizeof(ctypes.c_ubyte) length += sizeof(ctypes.c_ushort) length += sizeof(ctypes.c_ubyte) length += sizeof(ctypes.c_ubyte) length += sizeof(ctypes.c_ubyte) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ushort) length += self.Len return length def getRecord(self): '''×éÖ¯´æ´¢¼Ç¼''' rec = {} rec[u'PlayerID'] = self.PlayerID rec[u'Name'] = fix_incomingText(self.Name) rec[u'Faction'] = self.Faction rec[u'Score'] = self.Score rec[u'WinCnt'] = self.WinCnt rec[u'LoseCnt'] = self.LoseCnt rec[u'ConWinCnt'] = self.ConWinCnt rec[u'WinAwardRecord'] = self.WinAwardRecord rec[u'Len'] = self.Len rec[u'BetRecord'] = fix_incomingText(self.BetRecord) return rec def readRecord(self, rec): '''ÓÉÓÚMongoDB¶Á³öÀ´ÊÇunicode,ËùÓÐ×Ö·û´®ÐèÒª½øÐÐת»»''' self.PlayerID = rec.get(u'PlayerID', 0) self.Name = fix_outgoingText(rec.get(u'Name', u'')) self.Faction = rec.get(u'Faction', 0) self.Score = rec.get(u'Score', 0) self.WinCnt = rec.get(u'WinCnt', 0) self.LoseCnt = rec.get(u'LoseCnt', 0) self.ConWinCnt = rec.get(u'ConWinCnt', 0) self.WinAwardRecord = rec.get(u'WinAwardRecord', 0) self.Len = rec.get(u'Len', 0) self.BetRecord = fix_outgoingText(rec.get(u'BetRecord', u'')) #Can not implement adoLoadStr method:No key defined! def adoInsert(self, collection): '''Ö´ÐвåÈë''' trycnt = 0 rec = self.getRecord() while(True): try: collection.insert(rec, False, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_152, 'Insert failed!PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True #Can not implement adoUpdateStr method:No key defined! def adoUpdateEx(self, collection, spec): '''Ö´ÐиüÐÂ''' trycnt = 0 rec = self.getRecord() while(True): try: collection.update(spec, {'$set':rec}, False, False, True, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_154, 'Update failed!PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True #Can not implement adoCheckUpdateStr method:No key defined! #Can not implement adoCheckUpdateExStr method:No key defined! def getAdoRecords(self, resultCollection): '''²éѯ½á¹û´ò°ü³É¶þ½øÖÆÁ÷''' result = '' result = CommFunc.WriteDWORD(result, resultCollection.count()) for rec in resultCollection: self.readRecord(rec) result += self.getBuffer() return result def adoQueryIndex(self, collection): '''ÓÃË÷Òý×ֶβéÕÒ''' resultCollection = collection.find({'PlayerID':self.PlayerID}) return self.getAdoRecords(resultCollection) def adoQueryCustom(self, collection, queryDict): '''×Ô¶¨Òå²éѯ''' resultCollection = collection.find(queryDict) return self.getAdoRecords(resultCollection) def adoQueryAll(self, collection): '''²éѯËùÓÐ''' resultCollection = collection.find() return self.getAdoRecords(resultCollection) def adoDeleteByIndex(self, collection): '''¸ù¾ÝË÷Òýɾ³ý''' trycnt = 0 while(True): try: collection.remove({'PlayerID':self.PlayerID}) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:PlayerID = %s"%(self.__class__.__name__, inspect.stack()[0][3], self.PlayerID)) msg = error.formatMsg('error', error.ERROR_NO_155, 'delete failure!self.PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True def outputString(self): output = '''//ÏÉħ֮Õù¼Ç¼±í#tagDBPyXMZZ: PlayerID = %s, Name = %s, Faction = %s, Score = %s, WinCnt = %s, LoseCnt = %s, ConWinCnt = %s, WinAwardRecord = %s, Len = %s, BetRecord = %s, ADOResult = %s, '''%( self.PlayerID, self.Name, self.Faction, self.Score, self.WinCnt, self.LoseCnt, self.ConWinCnt, self.WinAwardRecord, self.Len, self.BetRecord, self.ADOResult, ) return output def dumpString(self): output = '''%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s'''%( self.PlayerID, self.Name, self.Faction, self.Score, self.WinCnt, self.LoseCnt, self.ConWinCnt, self.WinAwardRecord, self.Len, self.BetRecord, ) return output #CharÊý×éÀàÐÍSet½Ó¿Ú,ʹÓøýӿڶԴËÀàÐÍÊý¾Ý¸³Öµ£¬·ÀÖ¹¸³ÖµµÄÊý¾Ý¹ý³¤±¨´í def SetName(self,Str): if len(Str)<=33: self.Name = Str else: self.Name = Str[:33] # ¿ç·þ¾º¼¼³¡PKÅÅÐаñ #tagDBCrossPKBillboard class tagDBCrossPKBillboard(Structure): _pack_ = 1 _fields_ = [ ('ZoneID', ctypes.c_ubyte), ('SeasonID', ctypes.c_ubyte), ('PlayerID', ctypes.c_ulong), ('PlayerName', ctypes.c_char * 33), ('Job', ctypes.c_ubyte), ('FightPower', ctypes.c_ulong), ('RealmLV', ctypes.c_ushort), ('PKScore', ctypes.c_ulong), ('DanLV', ctypes.c_ubyte), ('Time', ctypes.c_ulong), ('Face', ctypes.c_ulong), ('FacePic', ctypes.c_ulong), ('ADOResult', ctypes.c_ulong), ] def __init__(self): Structure.__init__(self) self.clear() def clear(self): memset(addressof(self), 0, self.getLength()) def readData(self, buf, pos = 0, length = 0): if not pos <= length: msg = error.formatMsg('error', error.ERROR_NO_148, '(pos = %s) > (length = %s)'%(pos, length)) mylog.error(msg) return -1 if len(buf) < pos + self.getLength(): msg = error.formatMsg('error', error.ERROR_NO_149, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength())) mylog.error(msg) self.clear() self.ZoneID, pos = CommFunc.ReadBYTE(buf, pos) self.SeasonID, pos = CommFunc.ReadBYTE(buf, pos) self.PlayerID, pos = CommFunc.ReadDWORD(buf, pos) self.PlayerName, pos = CommFunc.ReadString(buf, pos, 33) self.Job, pos = CommFunc.ReadBYTE(buf, pos) self.FightPower, pos = CommFunc.ReadDWORD(buf, pos) self.RealmLV, pos = CommFunc.ReadWORD(buf, pos) self.PKScore, pos = CommFunc.ReadDWORD(buf, pos) self.DanLV, pos = CommFunc.ReadBYTE(buf, pos) self.Time, pos = CommFunc.ReadDWORD(buf, pos) self.Face, pos = CommFunc.ReadDWORD(buf, pos) self.FacePic, pos = CommFunc.ReadDWORD(buf, pos) return self.getLength() def getBuffer(self): buf = create_string_buffer(self.getLength()) memmove(addressof(buf), addressof(self), self.getLength()) return string_at(addressof(buf), self.getLength()) def getLength(self): return sizeof(tagDBCrossPKBillboard) def getRecord(self): '''×éÖ¯´æ´¢¼Ç¼''' rec = {} rec[u'ZoneID'] = self.ZoneID rec[u'SeasonID'] = self.SeasonID rec[u'PlayerID'] = self.PlayerID rec[u'PlayerName'] = fix_incomingText(self.PlayerName) rec[u'Job'] = self.Job rec[u'FightPower'] = self.FightPower rec[u'RealmLV'] = self.RealmLV rec[u'PKScore'] = self.PKScore rec[u'DanLV'] = self.DanLV rec[u'Time'] = self.Time rec[u'Face'] = self.Face rec[u'FacePic'] = self.FacePic return rec def readRecord(self, rec): '''ÓÉÓÚMongoDB¶Á³öÀ´ÊÇunicode,ËùÓÐ×Ö·û´®ÐèÒª½øÐÐת»»''' self.ZoneID = rec.get(u'ZoneID', 0) self.SeasonID = rec.get(u'SeasonID', 0) self.PlayerID = rec.get(u'PlayerID', 0) self.PlayerName = fix_outgoingText(rec.get(u'PlayerName', u'')) self.Job = rec.get(u'Job', 0) self.FightPower = rec.get(u'FightPower', 0) self.RealmLV = rec.get(u'RealmLV', 0) self.PKScore = rec.get(u'PKScore', 0) self.DanLV = rec.get(u'DanLV', 0) self.Time = rec.get(u'Time', 0) self.Face = rec.get(u'Face', 0) self.FacePic = rec.get(u'FacePic', 0) #Can not implement adoLoadStr method:No key defined! #Can not implement adoInsertStr method:No key defined! #Can not implement adoUpdateStr method:No key defined! #Can not implement adoUpdateStr method:No key defined! #Can not implement adoCheckUpdateStr method:No key defined! #Can not implement adoCheckUpdateExStr method:No key defined! def getAdoRecords(self, resultCollection): '''²éѯ½á¹û´ò°ü³É¶þ½øÖÆÁ÷''' result = '' result = CommFunc.WriteDWORD(result, resultCollection.count()) for rec in resultCollection: self.readRecord(rec) result += self.getBuffer() return result #Can not implement adoQueryIndexStr method:No key defined! def adoQueryCustom(self, collection, queryDict): '''×Ô¶¨Òå²éѯ''' resultCollection = collection.find(queryDict) return self.getAdoRecords(resultCollection) def adoQueryAll(self, collection): '''²éѯËùÓÐ''' resultCollection = collection.find() return self.getAdoRecords(resultCollection) #Can not implement adoDeleteByIndexStr method:No key defined! def outputString(self): output = '''// ¿ç·þ¾º¼¼³¡PKÅÅÐаñ #tagDBCrossPKBillboard: ZoneID = %s, SeasonID = %s, PlayerID = %s, PlayerName = %s, Job = %s, FightPower = %s, RealmLV = %s, PKScore = %s, DanLV = %s, Time = %s, Face = %s, FacePic = %s, ADOResult = %s, '''%( self.ZoneID, self.SeasonID, self.PlayerID, self.PlayerName, self.Job, self.FightPower, self.RealmLV, self.PKScore, self.DanLV, self.Time, self.Face, self.FacePic, self.ADOResult, ) return output def dumpString(self): output = '''%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s'''%( self.ZoneID, self.SeasonID, self.PlayerID, self.PlayerName, self.Job, self.FightPower, self.RealmLV, self.PKScore, self.DanLV, self.Time, self.Face, self.FacePic, ) return output #CharÊý×éÀàÐÍSet½Ó¿Ú,ʹÓøýӿڶԴËÀàÐÍÊý¾Ý¸³Öµ£¬·ÀÖ¹¸³ÖµµÄÊý¾Ý¹ý³¤±¨´í def SetPlayerName(self,Str): if len(Str)<=33: self.PlayerName = Str else: self.PlayerName = Str[:33] # ¿ç·þ¾º¼¼³¡Î´Í¨ÖªÍæ¼ÒµÄ±ÈÈü½á¹û±í #tagDBCrossPKUnNotifyOverInfo class tagDBCrossPKUnNotifyOverInfo(Structure): _pack_ = 1 _fields_ = [ ('ZoneID', ctypes.c_ubyte), ('SeasonID', ctypes.c_ubyte), ('RoomID', ctypes.c_ushort), ('TimeStr', ctypes.c_char * 19), ('OverType', ctypes.c_ubyte), ('PlayerID', ctypes.c_ulong), ('WinnerID', ctypes.c_ulong), ('RoundWinnerLen', ctypes.c_ubyte), ('RoundWinnerInfo', ctypes.c_char_p), ('PKScore', ctypes.c_ulong), ('DanLV', ctypes.c_ubyte), ('CWinCount', ctypes.c_ushort), ('AddScore', ctypes.c_ushort), ('TagPlayerID', ctypes.c_ulong), ('TagPlayerName', ctypes.c_char * 33), ('ADOResult', ctypes.c_ulong), ] def __init__(self): Structure.__init__(self) self.clear() def clear(self): self.ZoneID = 0 self.SeasonID = 0 self.RoomID = 0 self.TimeStr = '' self.OverType = 0 self.PlayerID = 0 self.WinnerID = 0 self.RoundWinnerLen = 0 self.RoundWinnerInfo = '' self.PKScore = 0 self.DanLV = 0 self.CWinCount = 0 self.AddScore = 0 self.TagPlayerID = 0 self.TagPlayerName = '' def readData(self, buf, pos = 0, length = 0): if not pos <= length: msg = error.formatMsg('error', error.ERROR_NO_148, '(pos = %s) > (length = %s)'%(pos, length)) mylog.error(msg) return -1 if len(buf) < pos + self.getLength(): msg = error.formatMsg('error', error.ERROR_NO_149, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength())) mylog.error(msg) self.clear() self.ZoneID, pos = CommFunc.ReadBYTE(buf, pos) self.SeasonID, pos = CommFunc.ReadBYTE(buf, pos) self.RoomID, pos = CommFunc.ReadWORD(buf, pos) self.TimeStr, pos = CommFunc.ReadString(buf, pos, 19) self.OverType, pos = CommFunc.ReadBYTE(buf, pos) self.PlayerID, pos = CommFunc.ReadDWORD(buf, pos) self.WinnerID, pos = CommFunc.ReadDWORD(buf, pos) self.RoundWinnerLen, pos = CommFunc.ReadBYTE(buf, pos) tmp, pos = CommFunc.ReadString(buf, pos, self.RoundWinnerLen) self.RoundWinnerInfo = ctypes.c_char_p(tmp) self.PKScore, pos = CommFunc.ReadDWORD(buf, pos) self.DanLV, pos = CommFunc.ReadBYTE(buf, pos) self.CWinCount, pos = CommFunc.ReadWORD(buf, pos) self.AddScore, pos = CommFunc.ReadWORD(buf, pos) self.TagPlayerID, pos = CommFunc.ReadDWORD(buf, pos) self.TagPlayerName, pos = CommFunc.ReadString(buf, pos, 33) return self.getLength() def getBuffer(self): buf = '' buf = CommFunc.WriteBYTE(buf, self.ZoneID) buf = CommFunc.WriteBYTE(buf, self.SeasonID) buf = CommFunc.WriteWORD(buf, self.RoomID) buf = CommFunc.WriteString(buf, sizeof(ctypes.c_char) * 19, self.TimeStr) buf = CommFunc.WriteBYTE(buf, self.OverType) buf = CommFunc.WriteDWORD(buf, self.PlayerID) buf = CommFunc.WriteDWORD(buf, self.WinnerID) buf = CommFunc.WriteBYTE(buf, self.RoundWinnerLen) buf = CommFunc.WriteString(buf, self.RoundWinnerLen, self.RoundWinnerInfo) buf = CommFunc.WriteDWORD(buf, self.PKScore) buf = CommFunc.WriteBYTE(buf, self.DanLV) buf = CommFunc.WriteWORD(buf, self.CWinCount) buf = CommFunc.WriteWORD(buf, self.AddScore) buf = CommFunc.WriteDWORD(buf, self.TagPlayerID) buf = CommFunc.WriteString(buf, sizeof(ctypes.c_char) * 33, self.TagPlayerName) return buf def getLength(self): length = 0 length += sizeof(ctypes.c_ubyte) length += sizeof(ctypes.c_ubyte) length += sizeof(ctypes.c_ushort) length += sizeof(ctypes.c_char) * 19 length += sizeof(ctypes.c_ubyte) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ubyte) length += self.RoundWinnerLen length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ubyte) length += sizeof(ctypes.c_ushort) length += sizeof(ctypes.c_ushort) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_char) * 33 return length def getRecord(self): '''×éÖ¯´æ´¢¼Ç¼''' rec = {} rec[u'ZoneID'] = self.ZoneID rec[u'SeasonID'] = self.SeasonID rec[u'RoomID'] = self.RoomID rec[u'TimeStr'] = fix_incomingText(self.TimeStr) rec[u'OverType'] = self.OverType rec[u'PlayerID'] = self.PlayerID rec[u'WinnerID'] = self.WinnerID rec[u'RoundWinnerLen'] = self.RoundWinnerLen rec[u'RoundWinnerInfo'] = fix_incomingText(self.RoundWinnerInfo) rec[u'PKScore'] = self.PKScore rec[u'DanLV'] = self.DanLV rec[u'CWinCount'] = self.CWinCount rec[u'AddScore'] = self.AddScore rec[u'TagPlayerID'] = self.TagPlayerID rec[u'TagPlayerName'] = fix_incomingText(self.TagPlayerName) return rec def readRecord(self, rec): '''ÓÉÓÚMongoDB¶Á³öÀ´ÊÇunicode,ËùÓÐ×Ö·û´®ÐèÒª½øÐÐת»»''' self.ZoneID = rec.get(u'ZoneID', 0) self.SeasonID = rec.get(u'SeasonID', 0) self.RoomID = rec.get(u'RoomID', 0) self.TimeStr = fix_outgoingText(rec.get(u'TimeStr', u'')) self.OverType = rec.get(u'OverType', 0) self.PlayerID = rec.get(u'PlayerID', 0) self.WinnerID = rec.get(u'WinnerID', 0) self.RoundWinnerLen = rec.get(u'RoundWinnerLen', 0) self.RoundWinnerInfo = fix_outgoingText(rec.get(u'RoundWinnerInfo', u'')) self.PKScore = rec.get(u'PKScore', 0) self.DanLV = rec.get(u'DanLV', 0) self.CWinCount = rec.get(u'CWinCount', 0) self.AddScore = rec.get(u'AddScore', 0) self.TagPlayerID = rec.get(u'TagPlayerID', 0) self.TagPlayerName = fix_outgoingText(rec.get(u'TagPlayerName', u'')) #Can not implement adoLoadStr method:No key defined! #Can not implement adoInsertStr method:No key defined! #Can not implement adoUpdateStr method:No key defined! #Can not implement adoUpdateStr method:No key defined! #Can not implement adoCheckUpdateStr method:No key defined! #Can not implement adoCheckUpdateExStr method:No key defined! def getAdoRecords(self, resultCollection): '''²éѯ½á¹û´ò°ü³É¶þ½øÖÆÁ÷''' result = '' result = CommFunc.WriteDWORD(result, resultCollection.count()) for rec in resultCollection: self.readRecord(rec) result += self.getBuffer() return result #Can not implement adoQueryIndexStr method:No key defined! def adoQueryCustom(self, collection, queryDict): '''×Ô¶¨Òå²éѯ''' resultCollection = collection.find(queryDict) return self.getAdoRecords(resultCollection) def adoQueryAll(self, collection): '''²éѯËùÓÐ''' resultCollection = collection.find() return self.getAdoRecords(resultCollection) #Can not implement adoDeleteByIndexStr method:No key defined! def outputString(self): output = '''// ¿ç·þ¾º¼¼³¡Î´Í¨ÖªÍæ¼ÒµÄ±ÈÈü½á¹û±í #tagDBCrossPKUnNotifyOverInfo: ZoneID = %s, SeasonID = %s, RoomID = %s, TimeStr = %s, OverType = %s, PlayerID = %s, WinnerID = %s, RoundWinnerLen = %s, RoundWinnerInfo = %s, PKScore = %s, DanLV = %s, CWinCount = %s, AddScore = %s, TagPlayerID = %s, TagPlayerName = %s, ADOResult = %s, '''%( self.ZoneID, self.SeasonID, self.RoomID, self.TimeStr, self.OverType, self.PlayerID, self.WinnerID, self.RoundWinnerLen, self.RoundWinnerInfo, self.PKScore, self.DanLV, self.CWinCount, self.AddScore, self.TagPlayerID, self.TagPlayerName, self.ADOResult, ) return output def dumpString(self): output = '''%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s'''%( self.ZoneID, self.SeasonID, self.RoomID, self.TimeStr, self.OverType, self.PlayerID, self.WinnerID, self.RoundWinnerLen, self.RoundWinnerInfo, self.PKScore, self.DanLV, self.CWinCount, self.AddScore, self.TagPlayerID, self.TagPlayerName, ) return output #CharÊý×éÀàÐÍSet½Ó¿Ú,ʹÓøýӿڶԴËÀàÐÍÊý¾Ý¸³Öµ£¬·ÀÖ¹¸³ÖµµÄÊý¾Ý¹ý³¤±¨´í def SetTimeStr(self,Str): if len(Str)<=19: self.TimeStr = Str else: self.TimeStr = Str[:19] def SetTagPlayerName(self,Str): if len(Str)<=33: self.TagPlayerName = Str else: self.TagPlayerName = Str[:33] # ÅÄÂôÎïÆ·±í #tagDBAuctionItem class tagDBAuctionItem(Structure): _pack_ = 1 _fields_ = [ ('ItemGUID', ctypes.c_char * 40), ('PlayerID', ctypes.c_ulong), ('FamilyID', ctypes.c_ulong), ('ItemID', ctypes.c_ulong), ('Count', ctypes.c_ushort), ('AuctionType', ctypes.c_ubyte), ('AddTime', ctypes.c_char * 19), ('BiddingTime', ctypes.c_char * 19), ('BidderID', ctypes.c_ulong), ('BidderName', ctypes.c_char * 33), ('BidderPrice', ctypes.c_ulong), ('ItemType', ctypes.c_ubyte), ('ItemJobLimit', ctypes.c_ubyte), ('ItemClassLV', ctypes.c_ubyte), ('UserDataLen', ctypes.c_ushort), ('UserData', ctypes.c_char_p), ('FamilyPlayerIDLen', ctypes.c_ushort), ('FamilyPlayerIDInfo', ctypes.c_char_p), ('BidderIDLen', ctypes.c_ubyte), ('BidderIDInfo', ctypes.c_char_p), ('ADOResult', ctypes.c_ulong), ] def __init__(self): Structure.__init__(self) self.clear() def clear(self): self.ItemGUID = '' self.PlayerID = 0 self.FamilyID = 0 self.ItemID = 0 self.Count = 0 self.AuctionType = 0 self.AddTime = '' self.BiddingTime = '' self.BidderID = 0 self.BidderName = '' self.BidderPrice = 0 self.ItemType = 0 self.ItemJobLimit = 0 self.ItemClassLV = 0 self.UserDataLen = 0 self.UserData = '' self.FamilyPlayerIDLen = 0 self.FamilyPlayerIDInfo = '' self.BidderIDLen = 0 self.BidderIDInfo = '' def readData(self, buf, pos = 0, length = 0): if not pos <= length: msg = error.formatMsg('error', error.ERROR_NO_148, '(pos = %s) > (length = %s)'%(pos, length)) mylog.error(msg) return -1 if len(buf) < pos + self.getLength(): msg = error.formatMsg('error', error.ERROR_NO_149, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength())) mylog.error(msg) self.clear() self.ItemGUID, pos = CommFunc.ReadString(buf, pos, 40) self.PlayerID, pos = CommFunc.ReadDWORD(buf, pos) self.FamilyID, pos = CommFunc.ReadDWORD(buf, pos) self.ItemID, pos = CommFunc.ReadDWORD(buf, pos) self.Count, pos = CommFunc.ReadWORD(buf, pos) self.AuctionType, pos = CommFunc.ReadBYTE(buf, pos) self.AddTime, pos = CommFunc.ReadString(buf, pos, 19) self.BiddingTime, pos = CommFunc.ReadString(buf, pos, 19) self.BidderID, pos = CommFunc.ReadDWORD(buf, pos) self.BidderName, pos = CommFunc.ReadString(buf, pos, 33) self.BidderPrice, pos = CommFunc.ReadDWORD(buf, pos) self.ItemType, pos = CommFunc.ReadBYTE(buf, pos) self.ItemJobLimit, pos = CommFunc.ReadBYTE(buf, pos) self.ItemClassLV, pos = CommFunc.ReadBYTE(buf, pos) self.UserDataLen, pos = CommFunc.ReadWORD(buf, pos) tmp, pos = CommFunc.ReadString(buf, pos, self.UserDataLen) self.UserData = ctypes.c_char_p(tmp) self.FamilyPlayerIDLen, pos = CommFunc.ReadWORD(buf, pos) tmp, pos = CommFunc.ReadString(buf, pos, self.FamilyPlayerIDLen) self.FamilyPlayerIDInfo = ctypes.c_char_p(tmp) self.BidderIDLen, pos = CommFunc.ReadBYTE(buf, pos) tmp, pos = CommFunc.ReadString(buf, pos, self.BidderIDLen) self.BidderIDInfo = ctypes.c_char_p(tmp) return self.getLength() def getBuffer(self): buf = '' buf = CommFunc.WriteString(buf, sizeof(ctypes.c_char) * 40, self.ItemGUID) buf = CommFunc.WriteDWORD(buf, self.PlayerID) buf = CommFunc.WriteDWORD(buf, self.FamilyID) buf = CommFunc.WriteDWORD(buf, self.ItemID) buf = CommFunc.WriteWORD(buf, self.Count) buf = CommFunc.WriteBYTE(buf, self.AuctionType) buf = CommFunc.WriteString(buf, sizeof(ctypes.c_char) * 19, self.AddTime) buf = CommFunc.WriteString(buf, sizeof(ctypes.c_char) * 19, self.BiddingTime) buf = CommFunc.WriteDWORD(buf, self.BidderID) buf = CommFunc.WriteString(buf, sizeof(ctypes.c_char) * 33, self.BidderName) buf = CommFunc.WriteDWORD(buf, self.BidderPrice) buf = CommFunc.WriteBYTE(buf, self.ItemType) buf = CommFunc.WriteBYTE(buf, self.ItemJobLimit) buf = CommFunc.WriteBYTE(buf, self.ItemClassLV) buf = CommFunc.WriteWORD(buf, self.UserDataLen) buf = CommFunc.WriteString(buf, self.UserDataLen, self.UserData) buf = CommFunc.WriteWORD(buf, self.FamilyPlayerIDLen) buf = CommFunc.WriteString(buf, self.FamilyPlayerIDLen, self.FamilyPlayerIDInfo) buf = CommFunc.WriteBYTE(buf, self.BidderIDLen) buf = CommFunc.WriteString(buf, self.BidderIDLen, self.BidderIDInfo) return buf def getLength(self): length = 0 length += sizeof(ctypes.c_char) * 40 length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ushort) length += sizeof(ctypes.c_ubyte) length += sizeof(ctypes.c_char) * 19 length += sizeof(ctypes.c_char) * 19 length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_char) * 33 length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ubyte) length += sizeof(ctypes.c_ubyte) length += sizeof(ctypes.c_ubyte) length += sizeof(ctypes.c_ushort) length += self.UserDataLen length += sizeof(ctypes.c_ushort) length += self.FamilyPlayerIDLen length += sizeof(ctypes.c_ubyte) length += self.BidderIDLen return length def getRecord(self): '''×éÖ¯´æ´¢¼Ç¼''' rec = {} rec[u'ItemGUID'] = fix_incomingText(self.ItemGUID) rec[u'PlayerID'] = self.PlayerID rec[u'FamilyID'] = self.FamilyID rec[u'ItemID'] = self.ItemID rec[u'Count'] = self.Count rec[u'AuctionType'] = self.AuctionType rec[u'AddTime'] = fix_incomingText(self.AddTime) rec[u'BiddingTime'] = fix_incomingText(self.BiddingTime) rec[u'BidderID'] = self.BidderID rec[u'BidderName'] = fix_incomingText(self.BidderName) rec[u'BidderPrice'] = self.BidderPrice rec[u'ItemType'] = self.ItemType rec[u'ItemJobLimit'] = self.ItemJobLimit rec[u'ItemClassLV'] = self.ItemClassLV rec[u'UserDataLen'] = self.UserDataLen rec[u'UserData'] = fix_incomingText(self.UserData) rec[u'FamilyPlayerIDLen'] = self.FamilyPlayerIDLen rec[u'FamilyPlayerIDInfo'] = fix_incomingText(self.FamilyPlayerIDInfo) rec[u'BidderIDLen'] = self.BidderIDLen rec[u'BidderIDInfo'] = fix_incomingText(self.BidderIDInfo) return rec def readRecord(self, rec): '''ÓÉÓÚMongoDB¶Á³öÀ´ÊÇunicode,ËùÓÐ×Ö·û´®ÐèÒª½øÐÐת»»''' self.ItemGUID = fix_outgoingText(rec.get(u'ItemGUID', u'')) self.PlayerID = rec.get(u'PlayerID', 0) self.FamilyID = rec.get(u'FamilyID', 0) self.ItemID = rec.get(u'ItemID', 0) self.Count = rec.get(u'Count', 0) self.AuctionType = rec.get(u'AuctionType', 0) self.AddTime = fix_outgoingText(rec.get(u'AddTime', u'')) self.BiddingTime = fix_outgoingText(rec.get(u'BiddingTime', u'')) self.BidderID = rec.get(u'BidderID', 0) self.BidderName = fix_outgoingText(rec.get(u'BidderName', u'')) self.BidderPrice = rec.get(u'BidderPrice', 0) self.ItemType = rec.get(u'ItemType', 0) self.ItemJobLimit = rec.get(u'ItemJobLimit', 0) self.ItemClassLV = rec.get(u'ItemClassLV', 0) self.UserDataLen = rec.get(u'UserDataLen', 0) self.UserData = fix_outgoingText(rec.get(u'UserData', u'')) self.FamilyPlayerIDLen = rec.get(u'FamilyPlayerIDLen', 0) self.FamilyPlayerIDInfo = fix_outgoingText(rec.get(u'FamilyPlayerIDInfo', u'')) self.BidderIDLen = rec.get(u'BidderIDLen', 0) self.BidderIDInfo = fix_outgoingText(rec.get(u'BidderIDInfo', u'')) #Can not implement adoLoadStr method:No key defined! #Can not implement adoInsertStr method:No key defined! #Can not implement adoUpdateStr method:No key defined! #Can not implement adoUpdateStr method:No key defined! #Can not implement adoCheckUpdateStr method:No key defined! #Can not implement adoCheckUpdateExStr method:No key defined! def getAdoRecords(self, resultCollection): '''²éѯ½á¹û´ò°ü³É¶þ½øÖÆÁ÷''' result = '' result = CommFunc.WriteDWORD(result, resultCollection.count()) for rec in resultCollection: self.readRecord(rec) result += self.getBuffer() return result #Can not implement adoQueryIndexStr method:No key defined! def adoQueryCustom(self, collection, queryDict): '''×Ô¶¨Òå²éѯ''' resultCollection = collection.find(queryDict) return self.getAdoRecords(resultCollection) def adoQueryAll(self, collection): '''²éѯËùÓÐ''' resultCollection = collection.find() return self.getAdoRecords(resultCollection) #Can not implement adoDeleteByIndexStr method:No key defined! def outputString(self): output = '''// ÅÄÂôÎïÆ·±í #tagDBAuctionItem: ItemGUID = %s, PlayerID = %s, FamilyID = %s, ItemID = %s, Count = %s, AuctionType = %s, AddTime = %s, BiddingTime = %s, BidderID = %s, BidderName = %s, BidderPrice = %s, ItemType = %s, ItemJobLimit = %s, ItemClassLV = %s, UserDataLen = %s, UserData = %s, FamilyPlayerIDLen = %s, FamilyPlayerIDInfo = %s, BidderIDLen = %s, BidderIDInfo = %s, ADOResult = %s, '''%( self.ItemGUID, self.PlayerID, self.FamilyID, self.ItemID, self.Count, self.AuctionType, self.AddTime, self.BiddingTime, self.BidderID, self.BidderName, self.BidderPrice, self.ItemType, self.ItemJobLimit, self.ItemClassLV, self.UserDataLen, self.UserData, self.FamilyPlayerIDLen, self.FamilyPlayerIDInfo, self.BidderIDLen, self.BidderIDInfo, self.ADOResult, ) return output def dumpString(self): output = '''%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s'''%( self.ItemGUID, self.PlayerID, self.FamilyID, self.ItemID, self.Count, self.AuctionType, self.AddTime, self.BiddingTime, self.BidderID, self.BidderName, self.BidderPrice, self.ItemType, self.ItemJobLimit, self.ItemClassLV, self.UserDataLen, self.UserData, self.FamilyPlayerIDLen, self.FamilyPlayerIDInfo, self.BidderIDLen, self.BidderIDInfo, ) return output #CharÊý×éÀàÐÍSet½Ó¿Ú,ʹÓøýӿڶԴËÀàÐÍÊý¾Ý¸³Öµ£¬·ÀÖ¹¸³ÖµµÄÊý¾Ý¹ý³¤±¨´í def SetItemGUID(self,Str): if len(Str)<=40: self.ItemGUID = Str else: self.ItemGUID = Str[:40] def SetAddTime(self,Str): if len(Str)<=19: self.AddTime = Str else: self.AddTime = Str[:19] def SetBiddingTime(self,Str): if len(Str)<=19: self.BiddingTime = Str else: self.BiddingTime = Str[:19] def SetBidderName(self,Str): if len(Str)<=33: self.BidderName = Str else: self.BidderName = Str[:33] # ÅÄÂô¼Ç¼±í #tagDBAuctionRecord class tagDBAuctionRecord(Structure): _pack_ = 1 _fields_ = [ ('ItemGUID', ctypes.c_char * 40), ('PlayerID', ctypes.c_ulong), ('FamilyID', ctypes.c_ulong), ('RecordType', ctypes.c_ubyte), ('RecordResult', ctypes.c_ubyte), ('RecordTime', ctypes.c_char * 19), ('BidderPrice', ctypes.c_ulong), ('BidderName', ctypes.c_char * 33), ('ItemID', ctypes.c_ulong), ('Count', ctypes.c_ushort), ('UserDataLen', ctypes.c_ushort), ('UserData', ctypes.c_char_p), ('ADOResult', ctypes.c_ulong), ] def __init__(self): Structure.__init__(self) self.clear() def clear(self): self.ItemGUID = '' self.PlayerID = 0 self.FamilyID = 0 self.RecordType = 0 self.RecordResult = 0 self.RecordTime = '' self.BidderPrice = 0 self.BidderName = '' self.ItemID = 0 self.Count = 0 self.UserDataLen = 0 self.UserData = '' def readData(self, buf, pos = 0, length = 0): if not pos <= length: msg = error.formatMsg('error', error.ERROR_NO_148, '(pos = %s) > (length = %s)'%(pos, length)) mylog.error(msg) return -1 if len(buf) < pos + self.getLength(): msg = error.formatMsg('error', error.ERROR_NO_149, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength())) mylog.error(msg) self.clear() self.ItemGUID, pos = CommFunc.ReadString(buf, pos, 40) self.PlayerID, pos = CommFunc.ReadDWORD(buf, pos) self.FamilyID, pos = CommFunc.ReadDWORD(buf, pos) self.RecordType, pos = CommFunc.ReadBYTE(buf, pos) self.RecordResult, pos = CommFunc.ReadBYTE(buf, pos) self.RecordTime, pos = CommFunc.ReadString(buf, pos, 19) self.BidderPrice, pos = CommFunc.ReadDWORD(buf, pos) self.BidderName, pos = CommFunc.ReadString(buf, pos, 33) self.ItemID, pos = CommFunc.ReadDWORD(buf, pos) self.Count, pos = CommFunc.ReadWORD(buf, pos) self.UserDataLen, pos = CommFunc.ReadWORD(buf, pos) tmp, pos = CommFunc.ReadString(buf, pos, self.UserDataLen) self.UserData = ctypes.c_char_p(tmp) return self.getLength() def getBuffer(self): buf = '' buf = CommFunc.WriteString(buf, sizeof(ctypes.c_char) * 40, self.ItemGUID) buf = CommFunc.WriteDWORD(buf, self.PlayerID) buf = CommFunc.WriteDWORD(buf, self.FamilyID) buf = CommFunc.WriteBYTE(buf, self.RecordType) buf = CommFunc.WriteBYTE(buf, self.RecordResult) buf = CommFunc.WriteString(buf, sizeof(ctypes.c_char) * 19, self.RecordTime) buf = CommFunc.WriteDWORD(buf, self.BidderPrice) buf = CommFunc.WriteString(buf, sizeof(ctypes.c_char) * 33, self.BidderName) buf = CommFunc.WriteDWORD(buf, self.ItemID) buf = CommFunc.WriteWORD(buf, self.Count) buf = CommFunc.WriteWORD(buf, self.UserDataLen) buf = CommFunc.WriteString(buf, self.UserDataLen, self.UserData) return buf def getLength(self): length = 0 length += sizeof(ctypes.c_char) * 40 length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ubyte) length += sizeof(ctypes.c_ubyte) length += sizeof(ctypes.c_char) * 19 length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_char) * 33 length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ushort) length += sizeof(ctypes.c_ushort) length += self.UserDataLen return length def getRecord(self): '''×éÖ¯´æ´¢¼Ç¼''' rec = {} rec[u'ItemGUID'] = fix_incomingText(self.ItemGUID) rec[u'PlayerID'] = self.PlayerID rec[u'FamilyID'] = self.FamilyID rec[u'RecordType'] = self.RecordType rec[u'RecordResult'] = self.RecordResult rec[u'RecordTime'] = fix_incomingText(self.RecordTime) rec[u'BidderPrice'] = self.BidderPrice rec[u'BidderName'] = fix_incomingText(self.BidderName) rec[u'ItemID'] = self.ItemID rec[u'Count'] = self.Count rec[u'UserDataLen'] = self.UserDataLen rec[u'UserData'] = fix_incomingText(self.UserData) return rec def readRecord(self, rec): '''ÓÉÓÚMongoDB¶Á³öÀ´ÊÇunicode,ËùÓÐ×Ö·û´®ÐèÒª½øÐÐת»»''' self.ItemGUID = fix_outgoingText(rec.get(u'ItemGUID', u'')) self.PlayerID = rec.get(u'PlayerID', 0) self.FamilyID = rec.get(u'FamilyID', 0) self.RecordType = rec.get(u'RecordType', 0) self.RecordResult = rec.get(u'RecordResult', 0) self.RecordTime = fix_outgoingText(rec.get(u'RecordTime', u'')) self.BidderPrice = rec.get(u'BidderPrice', 0) self.BidderName = fix_outgoingText(rec.get(u'BidderName', u'')) self.ItemID = rec.get(u'ItemID', 0) self.Count = rec.get(u'Count', 0) self.UserDataLen = rec.get(u'UserDataLen', 0) self.UserData = fix_outgoingText(rec.get(u'UserData', u'')) #Can not implement adoLoadStr method:No key defined! #Can not implement adoInsertStr method:No key defined! #Can not implement adoUpdateStr method:No key defined! #Can not implement adoUpdateStr method:No key defined! #Can not implement adoCheckUpdateStr method:No key defined! #Can not implement adoCheckUpdateExStr method:No key defined! def getAdoRecords(self, resultCollection): '''²éѯ½á¹û´ò°ü³É¶þ½øÖÆÁ÷''' result = '' result = CommFunc.WriteDWORD(result, resultCollection.count()) for rec in resultCollection: self.readRecord(rec) result += self.getBuffer() return result #Can not implement adoQueryIndexStr method:No key defined! def adoQueryCustom(self, collection, queryDict): '''×Ô¶¨Òå²éѯ''' resultCollection = collection.find(queryDict) return self.getAdoRecords(resultCollection) def adoQueryAll(self, collection): '''²éѯËùÓÐ''' resultCollection = collection.find() return self.getAdoRecords(resultCollection) #Can not implement adoDeleteByIndexStr method:No key defined! def outputString(self): output = '''// ÅÄÂô¼Ç¼±í #tagDBAuctionRecord: ItemGUID = %s, PlayerID = %s, FamilyID = %s, RecordType = %s, RecordResult = %s, RecordTime = %s, BidderPrice = %s, BidderName = %s, ItemID = %s, Count = %s, UserDataLen = %s, UserData = %s, ADOResult = %s, '''%( self.ItemGUID, self.PlayerID, self.FamilyID, self.RecordType, self.RecordResult, self.RecordTime, self.BidderPrice, self.BidderName, self.ItemID, self.Count, self.UserDataLen, self.UserData, self.ADOResult, ) return output def dumpString(self): output = '''%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s'''%( self.ItemGUID, self.PlayerID, self.FamilyID, self.RecordType, self.RecordResult, self.RecordTime, self.BidderPrice, self.BidderName, self.ItemID, self.Count, self.UserDataLen, self.UserData, ) return output #CharÊý×éÀàÐÍSet½Ó¿Ú,ʹÓøýӿڶԴËÀàÐÍÊý¾Ý¸³Öµ£¬·ÀÖ¹¸³ÖµµÄÊý¾Ý¹ý³¤±¨´í def SetItemGUID(self,Str): if len(Str)<=40: self.ItemGUID = Str else: self.ItemGUID = Str[:40] def SetRecordTime(self,Str): if len(Str)<=19: self.RecordTime = Str else: self.RecordTime = Str[:19] def SetBidderName(self,Str): if len(Str)<=33: self.BidderName = Str else: self.BidderName = Str[:33] # ÅÄÂô¹Ø×¢±í #tagDBAuctionAttention class tagDBAuctionAttention(Structure): _pack_ = 1 _fields_ = [ ('PlayerID', ctypes.c_ulong), ('AttentionLen', ctypes.c_ubyte), ('AttentionInfo', ctypes.c_char_p), ('ADOResult', ctypes.c_ulong), ] def __init__(self): Structure.__init__(self) self.clear() def clear(self): self.PlayerID = 0 self.AttentionLen = 0 self.AttentionInfo = '' def readData(self, buf, pos = 0, length = 0): if not pos <= length: msg = error.formatMsg('error', error.ERROR_NO_148, '(pos = %s) > (length = %s)'%(pos, length)) mylog.error(msg) return -1 if len(buf) < pos + self.getLength(): msg = error.formatMsg('error', error.ERROR_NO_149, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength())) mylog.error(msg) self.clear() self.PlayerID, pos = CommFunc.ReadDWORD(buf, pos) self.AttentionLen, pos = CommFunc.ReadBYTE(buf, pos) tmp, pos = CommFunc.ReadString(buf, pos, self.AttentionLen) self.AttentionInfo = ctypes.c_char_p(tmp) return self.getLength() def getBuffer(self): buf = '' buf = CommFunc.WriteDWORD(buf, self.PlayerID) buf = CommFunc.WriteBYTE(buf, self.AttentionLen) buf = CommFunc.WriteString(buf, self.AttentionLen, self.AttentionInfo) return buf def getLength(self): length = 0 length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ubyte) length += self.AttentionLen return length def getRecord(self): '''×éÖ¯´æ´¢¼Ç¼''' rec = {} rec[u'PlayerID'] = self.PlayerID rec[u'AttentionLen'] = self.AttentionLen rec[u'AttentionInfo'] = fix_incomingText(self.AttentionInfo) return rec def readRecord(self, rec): '''ÓÉÓÚMongoDB¶Á³öÀ´ÊÇunicode,ËùÓÐ×Ö·û´®ÐèÒª½øÐÐת»»''' self.PlayerID = rec.get(u'PlayerID', 0) self.AttentionLen = rec.get(u'AttentionLen', 0) self.AttentionInfo = fix_outgoingText(rec.get(u'AttentionInfo', u'')) #Can not implement adoLoadStr method:No key defined! #Can not implement adoInsertStr method:No key defined! #Can not implement adoUpdateStr method:No key defined! #Can not implement adoUpdateStr method:No key defined! #Can not implement adoCheckUpdateStr method:No key defined! #Can not implement adoCheckUpdateExStr method:No key defined! def getAdoRecords(self, resultCollection): '''²éѯ½á¹û´ò°ü³É¶þ½øÖÆÁ÷''' result = '' result = CommFunc.WriteDWORD(result, resultCollection.count()) for rec in resultCollection: self.readRecord(rec) result += self.getBuffer() return result #Can not implement adoQueryIndexStr method:No key defined! def adoQueryCustom(self, collection, queryDict): '''×Ô¶¨Òå²éѯ''' resultCollection = collection.find(queryDict) return self.getAdoRecords(resultCollection) def adoQueryAll(self, collection): '''²éѯËùÓÐ''' resultCollection = collection.find() return self.getAdoRecords(resultCollection) #Can not implement adoDeleteByIndexStr method:No key defined! def outputString(self): output = '''// ÅÄÂô¹Ø×¢±í #tagDBAuctionAttention: PlayerID = %s, AttentionLen = %s, AttentionInfo = %s, ADOResult = %s, '''%( self.PlayerID, self.AttentionLen, self.AttentionInfo, self.ADOResult, ) return output def dumpString(self): output = '''%1s\t%1s\t%1s'''%( self.PlayerID, self.AttentionLen, self.AttentionInfo, ) return output # Íæ¼ÒÊý¾Ý²é¿´»º´æ±íPy #tagPlayerViewCachePy class tagPlayerViewCachePy(Structure): _pack_ = 1 _fields_ = [ ('PlayerID', ctypes.c_ulong), ('GeTuiIDSize', ctypes.c_ubyte), ('GeTuiID', ctypes.c_char_p), ('LV', ctypes.c_ushort), ('OffTime', ctypes.c_ulong), ('PropDataSize', ctypes.c_ushort), ('PropData', ctypes.c_char_p), ('PlusDataSize', ctypes.c_ushort), ('PlusData', ctypes.c_char_p), ('ItemDataSize1', ctypes.c_ushort), ('ItemData1', ctypes.c_char_p), ('ItemDataSize2', ctypes.c_ushort), ('ItemData2', ctypes.c_char_p), ('ItemDataSize3', ctypes.c_ushort), ('ItemData3', ctypes.c_char_p), ('ItemDataSize4', ctypes.c_ushort), ('ItemData4', ctypes.c_char_p), ('ItemDataSize5', ctypes.c_ushort), ('ItemData5', ctypes.c_char_p), ('ItemDataSize6', ctypes.c_ushort), ('ItemData6', ctypes.c_char_p), ('ItemDataSize7', ctypes.c_ushort), ('ItemData7', ctypes.c_char_p), ('ItemDataSize8', ctypes.c_ushort), ('ItemData8', ctypes.c_char_p), ('ItemDataSize9', ctypes.c_ushort), ('ItemData9', ctypes.c_char_p), ('ItemDataSize10', ctypes.c_ushort), ('ItemData10', ctypes.c_char_p), ('ItemDataSize11', ctypes.c_ushort), ('ItemData11', ctypes.c_char_p), ('ItemDataSize12', ctypes.c_ushort), ('ItemData12', ctypes.c_char_p), ('ItemDataSize13', ctypes.c_ushort), ('ItemData13', ctypes.c_char_p), ('ItemDataSize14', ctypes.c_ushort), ('ItemData14', ctypes.c_char_p), ('ItemDataSize15', ctypes.c_ushort), ('ItemData15', ctypes.c_char_p), ('ItemDataSize16', ctypes.c_ushort), ('ItemData16', ctypes.c_char_p), ('ItemDataSize17', ctypes.c_ushort), ('ItemData17', ctypes.c_char_p), ('ItemDataSize18', ctypes.c_ushort), ('ItemData18', ctypes.c_char_p), ('ItemDataSize19', ctypes.c_ushort), ('ItemData19', ctypes.c_char_p), ('ItemDataSize20', ctypes.c_ushort), ('ItemData20', ctypes.c_char_p), ('ADOResult', ctypes.c_ulong), ] def __init__(self): Structure.__init__(self) self.clear() def clear(self): self.PlayerID = 0 self.GeTuiIDSize = 0 self.GeTuiID = '' self.LV = 0 self.OffTime = 0 self.PropDataSize = 0 self.PropData = '' self.PlusDataSize = 0 self.PlusData = '' self.ItemDataSize1 = 0 self.ItemData1 = '' self.ItemDataSize2 = 0 self.ItemData2 = '' self.ItemDataSize3 = 0 self.ItemData3 = '' self.ItemDataSize4 = 0 self.ItemData4 = '' self.ItemDataSize5 = 0 self.ItemData5 = '' self.ItemDataSize6 = 0 self.ItemData6 = '' self.ItemDataSize7 = 0 self.ItemData7 = '' self.ItemDataSize8 = 0 self.ItemData8 = '' self.ItemDataSize9 = 0 self.ItemData9 = '' self.ItemDataSize10 = 0 self.ItemData10 = '' self.ItemDataSize11 = 0 self.ItemData11 = '' self.ItemDataSize12 = 0 self.ItemData12 = '' self.ItemDataSize13 = 0 self.ItemData13 = '' self.ItemDataSize14 = 0 self.ItemData14 = '' self.ItemDataSize15 = 0 self.ItemData15 = '' self.ItemDataSize16 = 0 self.ItemData16 = '' self.ItemDataSize17 = 0 self.ItemData17 = '' self.ItemDataSize18 = 0 self.ItemData18 = '' self.ItemDataSize19 = 0 self.ItemData19 = '' self.ItemDataSize20 = 0 self.ItemData20 = '' def readData(self, buf, pos = 0, length = 0): if not pos <= length: msg = error.formatMsg('error', error.ERROR_NO_148, '(pos = %s) > (length = %s)'%(pos, length)) mylog.error(msg) return -1 if len(buf) < pos + self.getLength(): msg = error.formatMsg('error', error.ERROR_NO_149, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength())) mylog.error(msg) self.clear() self.PlayerID, pos = CommFunc.ReadDWORD(buf, pos) self.GeTuiIDSize, pos = CommFunc.ReadBYTE(buf, pos) tmp, pos = CommFunc.ReadString(buf, pos, self.GeTuiIDSize) self.GeTuiID = ctypes.c_char_p(tmp) self.LV, pos = CommFunc.ReadWORD(buf, pos) self.OffTime, pos = CommFunc.ReadDWORD(buf, pos) self.PropDataSize, pos = CommFunc.ReadWORD(buf, pos) tmp, pos = CommFunc.ReadString(buf, pos, self.PropDataSize) self.PropData = ctypes.c_char_p(tmp) self.PlusDataSize, pos = CommFunc.ReadWORD(buf, pos) tmp, pos = CommFunc.ReadString(buf, pos, self.PlusDataSize) self.PlusData = ctypes.c_char_p(tmp) self.ItemDataSize1, pos = CommFunc.ReadWORD(buf, pos) tmp, pos = CommFunc.ReadString(buf, pos, self.ItemDataSize1) self.ItemData1 = ctypes.c_char_p(tmp) self.ItemDataSize2, pos = CommFunc.ReadWORD(buf, pos) tmp, pos = CommFunc.ReadString(buf, pos, self.ItemDataSize2) self.ItemData2 = ctypes.c_char_p(tmp) self.ItemDataSize3, pos = CommFunc.ReadWORD(buf, pos) tmp, pos = CommFunc.ReadString(buf, pos, self.ItemDataSize3) self.ItemData3 = ctypes.c_char_p(tmp) self.ItemDataSize4, pos = CommFunc.ReadWORD(buf, pos) tmp, pos = CommFunc.ReadString(buf, pos, self.ItemDataSize4) self.ItemData4 = ctypes.c_char_p(tmp) self.ItemDataSize5, pos = CommFunc.ReadWORD(buf, pos) tmp, pos = CommFunc.ReadString(buf, pos, self.ItemDataSize5) self.ItemData5 = ctypes.c_char_p(tmp) self.ItemDataSize6, pos = CommFunc.ReadWORD(buf, pos) tmp, pos = CommFunc.ReadString(buf, pos, self.ItemDataSize6) self.ItemData6 = ctypes.c_char_p(tmp) self.ItemDataSize7, pos = CommFunc.ReadWORD(buf, pos) tmp, pos = CommFunc.ReadString(buf, pos, self.ItemDataSize7) self.ItemData7 = ctypes.c_char_p(tmp) self.ItemDataSize8, pos = CommFunc.ReadWORD(buf, pos) tmp, pos = CommFunc.ReadString(buf, pos, self.ItemDataSize8) self.ItemData8 = ctypes.c_char_p(tmp) self.ItemDataSize9, pos = CommFunc.ReadWORD(buf, pos) tmp, pos = CommFunc.ReadString(buf, pos, self.ItemDataSize9) self.ItemData9 = ctypes.c_char_p(tmp) self.ItemDataSize10, pos = CommFunc.ReadWORD(buf, pos) tmp, pos = CommFunc.ReadString(buf, pos, self.ItemDataSize10) self.ItemData10 = ctypes.c_char_p(tmp) self.ItemDataSize11, pos = CommFunc.ReadWORD(buf, pos) tmp, pos = CommFunc.ReadString(buf, pos, self.ItemDataSize11) self.ItemData11 = ctypes.c_char_p(tmp) self.ItemDataSize12, pos = CommFunc.ReadWORD(buf, pos) tmp, pos = CommFunc.ReadString(buf, pos, self.ItemDataSize12) self.ItemData12 = ctypes.c_char_p(tmp) self.ItemDataSize13, pos = CommFunc.ReadWORD(buf, pos) tmp, pos = CommFunc.ReadString(buf, pos, self.ItemDataSize13) self.ItemData13 = ctypes.c_char_p(tmp) self.ItemDataSize14, pos = CommFunc.ReadWORD(buf, pos) tmp, pos = CommFunc.ReadString(buf, pos, self.ItemDataSize14) self.ItemData14 = ctypes.c_char_p(tmp) self.ItemDataSize15, pos = CommFunc.ReadWORD(buf, pos) tmp, pos = CommFunc.ReadString(buf, pos, self.ItemDataSize15) self.ItemData15 = ctypes.c_char_p(tmp) self.ItemDataSize16, pos = CommFunc.ReadWORD(buf, pos) tmp, pos = CommFunc.ReadString(buf, pos, self.ItemDataSize16) self.ItemData16 = ctypes.c_char_p(tmp) self.ItemDataSize17, pos = CommFunc.ReadWORD(buf, pos) tmp, pos = CommFunc.ReadString(buf, pos, self.ItemDataSize17) self.ItemData17 = ctypes.c_char_p(tmp) self.ItemDataSize18, pos = CommFunc.ReadWORD(buf, pos) tmp, pos = CommFunc.ReadString(buf, pos, self.ItemDataSize18) self.ItemData18 = ctypes.c_char_p(tmp) self.ItemDataSize19, pos = CommFunc.ReadWORD(buf, pos) tmp, pos = CommFunc.ReadString(buf, pos, self.ItemDataSize19) self.ItemData19 = ctypes.c_char_p(tmp) self.ItemDataSize20, pos = CommFunc.ReadWORD(buf, pos) tmp, pos = CommFunc.ReadString(buf, pos, self.ItemDataSize20) self.ItemData20 = ctypes.c_char_p(tmp) return self.getLength() def getBuffer(self): buf = '' buf = CommFunc.WriteDWORD(buf, self.PlayerID) buf = CommFunc.WriteBYTE(buf, self.GeTuiIDSize) buf = CommFunc.WriteString(buf, self.GeTuiIDSize, self.GeTuiID) buf = CommFunc.WriteWORD(buf, self.LV) buf = CommFunc.WriteDWORD(buf, self.OffTime) buf = CommFunc.WriteWORD(buf, self.PropDataSize) buf = CommFunc.WriteString(buf, self.PropDataSize, self.PropData) buf = CommFunc.WriteWORD(buf, self.PlusDataSize) buf = CommFunc.WriteString(buf, self.PlusDataSize, self.PlusData) buf = CommFunc.WriteWORD(buf, self.ItemDataSize1) buf = CommFunc.WriteString(buf, self.ItemDataSize1, self.ItemData1) buf = CommFunc.WriteWORD(buf, self.ItemDataSize2) buf = CommFunc.WriteString(buf, self.ItemDataSize2, self.ItemData2) buf = CommFunc.WriteWORD(buf, self.ItemDataSize3) buf = CommFunc.WriteString(buf, self.ItemDataSize3, self.ItemData3) buf = CommFunc.WriteWORD(buf, self.ItemDataSize4) buf = CommFunc.WriteString(buf, self.ItemDataSize4, self.ItemData4) buf = CommFunc.WriteWORD(buf, self.ItemDataSize5) buf = CommFunc.WriteString(buf, self.ItemDataSize5, self.ItemData5) buf = CommFunc.WriteWORD(buf, self.ItemDataSize6) buf = CommFunc.WriteString(buf, self.ItemDataSize6, self.ItemData6) buf = CommFunc.WriteWORD(buf, self.ItemDataSize7) buf = CommFunc.WriteString(buf, self.ItemDataSize7, self.ItemData7) buf = CommFunc.WriteWORD(buf, self.ItemDataSize8) buf = CommFunc.WriteString(buf, self.ItemDataSize8, self.ItemData8) buf = CommFunc.WriteWORD(buf, self.ItemDataSize9) buf = CommFunc.WriteString(buf, self.ItemDataSize9, self.ItemData9) buf = CommFunc.WriteWORD(buf, self.ItemDataSize10) buf = CommFunc.WriteString(buf, self.ItemDataSize10, self.ItemData10) buf = CommFunc.WriteWORD(buf, self.ItemDataSize11) buf = CommFunc.WriteString(buf, self.ItemDataSize11, self.ItemData11) buf = CommFunc.WriteWORD(buf, self.ItemDataSize12) buf = CommFunc.WriteString(buf, self.ItemDataSize12, self.ItemData12) buf = CommFunc.WriteWORD(buf, self.ItemDataSize13) buf = CommFunc.WriteString(buf, self.ItemDataSize13, self.ItemData13) buf = CommFunc.WriteWORD(buf, self.ItemDataSize14) buf = CommFunc.WriteString(buf, self.ItemDataSize14, self.ItemData14) buf = CommFunc.WriteWORD(buf, self.ItemDataSize15) buf = CommFunc.WriteString(buf, self.ItemDataSize15, self.ItemData15) buf = CommFunc.WriteWORD(buf, self.ItemDataSize16) buf = CommFunc.WriteString(buf, self.ItemDataSize16, self.ItemData16) buf = CommFunc.WriteWORD(buf, self.ItemDataSize17) buf = CommFunc.WriteString(buf, self.ItemDataSize17, self.ItemData17) buf = CommFunc.WriteWORD(buf, self.ItemDataSize18) buf = CommFunc.WriteString(buf, self.ItemDataSize18, self.ItemData18) buf = CommFunc.WriteWORD(buf, self.ItemDataSize19) buf = CommFunc.WriteString(buf, self.ItemDataSize19, self.ItemData19) buf = CommFunc.WriteWORD(buf, self.ItemDataSize20) buf = CommFunc.WriteString(buf, self.ItemDataSize20, self.ItemData20) return buf def getLength(self): length = 0 length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ubyte) length += self.GeTuiIDSize length += sizeof(ctypes.c_ushort) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ushort) length += self.PropDataSize length += sizeof(ctypes.c_ushort) length += self.PlusDataSize length += sizeof(ctypes.c_ushort) length += self.ItemDataSize1 length += sizeof(ctypes.c_ushort) length += self.ItemDataSize2 length += sizeof(ctypes.c_ushort) length += self.ItemDataSize3 length += sizeof(ctypes.c_ushort) length += self.ItemDataSize4 length += sizeof(ctypes.c_ushort) length += self.ItemDataSize5 length += sizeof(ctypes.c_ushort) length += self.ItemDataSize6 length += sizeof(ctypes.c_ushort) length += self.ItemDataSize7 length += sizeof(ctypes.c_ushort) length += self.ItemDataSize8 length += sizeof(ctypes.c_ushort) length += self.ItemDataSize9 length += sizeof(ctypes.c_ushort) length += self.ItemDataSize10 length += sizeof(ctypes.c_ushort) length += self.ItemDataSize11 length += sizeof(ctypes.c_ushort) length += self.ItemDataSize12 length += sizeof(ctypes.c_ushort) length += self.ItemDataSize13 length += sizeof(ctypes.c_ushort) length += self.ItemDataSize14 length += sizeof(ctypes.c_ushort) length += self.ItemDataSize15 length += sizeof(ctypes.c_ushort) length += self.ItemDataSize16 length += sizeof(ctypes.c_ushort) length += self.ItemDataSize17 length += sizeof(ctypes.c_ushort) length += self.ItemDataSize18 length += sizeof(ctypes.c_ushort) length += self.ItemDataSize19 length += sizeof(ctypes.c_ushort) length += self.ItemDataSize20 return length def getRecord(self): '''×éÖ¯´æ´¢¼Ç¼''' rec = {} rec[u'PlayerID'] = self.PlayerID rec[u'GeTuiIDSize'] = self.GeTuiIDSize rec[u'GeTuiID'] = fix_incomingText(self.GeTuiID) rec[u'LV'] = self.LV rec[u'OffTime'] = self.OffTime rec[u'PropDataSize'] = self.PropDataSize rec[u'PropData'] = fix_incomingText(self.PropData) rec[u'PlusDataSize'] = self.PlusDataSize rec[u'PlusData'] = fix_incomingText(self.PlusData) rec[u'ItemDataSize1'] = self.ItemDataSize1 rec[u'ItemData1'] = fix_incomingText(self.ItemData1) rec[u'ItemDataSize2'] = self.ItemDataSize2 rec[u'ItemData2'] = fix_incomingText(self.ItemData2) rec[u'ItemDataSize3'] = self.ItemDataSize3 rec[u'ItemData3'] = fix_incomingText(self.ItemData3) rec[u'ItemDataSize4'] = self.ItemDataSize4 rec[u'ItemData4'] = fix_incomingText(self.ItemData4) rec[u'ItemDataSize5'] = self.ItemDataSize5 rec[u'ItemData5'] = fix_incomingText(self.ItemData5) rec[u'ItemDataSize6'] = self.ItemDataSize6 rec[u'ItemData6'] = fix_incomingText(self.ItemData6) rec[u'ItemDataSize7'] = self.ItemDataSize7 rec[u'ItemData7'] = fix_incomingText(self.ItemData7) rec[u'ItemDataSize8'] = self.ItemDataSize8 rec[u'ItemData8'] = fix_incomingText(self.ItemData8) rec[u'ItemDataSize9'] = self.ItemDataSize9 rec[u'ItemData9'] = fix_incomingText(self.ItemData9) rec[u'ItemDataSize10'] = self.ItemDataSize10 rec[u'ItemData10'] = fix_incomingText(self.ItemData10) rec[u'ItemDataSize11'] = self.ItemDataSize11 rec[u'ItemData11'] = fix_incomingText(self.ItemData11) rec[u'ItemDataSize12'] = self.ItemDataSize12 rec[u'ItemData12'] = fix_incomingText(self.ItemData12) rec[u'ItemDataSize13'] = self.ItemDataSize13 rec[u'ItemData13'] = fix_incomingText(self.ItemData13) rec[u'ItemDataSize14'] = self.ItemDataSize14 rec[u'ItemData14'] = fix_incomingText(self.ItemData14) rec[u'ItemDataSize15'] = self.ItemDataSize15 rec[u'ItemData15'] = fix_incomingText(self.ItemData15) rec[u'ItemDataSize16'] = self.ItemDataSize16 rec[u'ItemData16'] = fix_incomingText(self.ItemData16) rec[u'ItemDataSize17'] = self.ItemDataSize17 rec[u'ItemData17'] = fix_incomingText(self.ItemData17) rec[u'ItemDataSize18'] = self.ItemDataSize18 rec[u'ItemData18'] = fix_incomingText(self.ItemData18) rec[u'ItemDataSize19'] = self.ItemDataSize19 rec[u'ItemData19'] = fix_incomingText(self.ItemData19) rec[u'ItemDataSize20'] = self.ItemDataSize20 rec[u'ItemData20'] = fix_incomingText(self.ItemData20) return rec def readRecord(self, rec): '''ÓÉÓÚMongoDB¶Á³öÀ´ÊÇunicode,ËùÓÐ×Ö·û´®ÐèÒª½øÐÐת»»''' self.PlayerID = rec.get(u'PlayerID', 0) self.GeTuiIDSize = rec.get(u'GeTuiIDSize', 0) self.GeTuiID = fix_outgoingText(rec.get(u'GeTuiID', u'')) self.LV = rec.get(u'LV', 0) self.OffTime = rec.get(u'OffTime', 0) self.PropDataSize = rec.get(u'PropDataSize', 0) self.PropData = fix_outgoingText(rec.get(u'PropData', u'')) self.PlusDataSize = rec.get(u'PlusDataSize', 0) self.PlusData = fix_outgoingText(rec.get(u'PlusData', u'')) self.ItemDataSize1 = rec.get(u'ItemDataSize1', 0) self.ItemData1 = fix_outgoingText(rec.get(u'ItemData1', u'')) self.ItemDataSize2 = rec.get(u'ItemDataSize2', 0) self.ItemData2 = fix_outgoingText(rec.get(u'ItemData2', u'')) self.ItemDataSize3 = rec.get(u'ItemDataSize3', 0) self.ItemData3 = fix_outgoingText(rec.get(u'ItemData3', u'')) self.ItemDataSize4 = rec.get(u'ItemDataSize4', 0) self.ItemData4 = fix_outgoingText(rec.get(u'ItemData4', u'')) self.ItemDataSize5 = rec.get(u'ItemDataSize5', 0) self.ItemData5 = fix_outgoingText(rec.get(u'ItemData5', u'')) self.ItemDataSize6 = rec.get(u'ItemDataSize6', 0) self.ItemData6 = fix_outgoingText(rec.get(u'ItemData6', u'')) self.ItemDataSize7 = rec.get(u'ItemDataSize7', 0) self.ItemData7 = fix_outgoingText(rec.get(u'ItemData7', u'')) self.ItemDataSize8 = rec.get(u'ItemDataSize8', 0) self.ItemData8 = fix_outgoingText(rec.get(u'ItemData8', u'')) self.ItemDataSize9 = rec.get(u'ItemDataSize9', 0) self.ItemData9 = fix_outgoingText(rec.get(u'ItemData9', u'')) self.ItemDataSize10 = rec.get(u'ItemDataSize10', 0) self.ItemData10 = fix_outgoingText(rec.get(u'ItemData10', u'')) self.ItemDataSize11 = rec.get(u'ItemDataSize11', 0) self.ItemData11 = fix_outgoingText(rec.get(u'ItemData11', u'')) self.ItemDataSize12 = rec.get(u'ItemDataSize12', 0) self.ItemData12 = fix_outgoingText(rec.get(u'ItemData12', u'')) self.ItemDataSize13 = rec.get(u'ItemDataSize13', 0) self.ItemData13 = fix_outgoingText(rec.get(u'ItemData13', u'')) self.ItemDataSize14 = rec.get(u'ItemDataSize14', 0) self.ItemData14 = fix_outgoingText(rec.get(u'ItemData14', u'')) self.ItemDataSize15 = rec.get(u'ItemDataSize15', 0) self.ItemData15 = fix_outgoingText(rec.get(u'ItemData15', u'')) self.ItemDataSize16 = rec.get(u'ItemDataSize16', 0) self.ItemData16 = fix_outgoingText(rec.get(u'ItemData16', u'')) self.ItemDataSize17 = rec.get(u'ItemDataSize17', 0) self.ItemData17 = fix_outgoingText(rec.get(u'ItemData17', u'')) self.ItemDataSize18 = rec.get(u'ItemDataSize18', 0) self.ItemData18 = fix_outgoingText(rec.get(u'ItemData18', u'')) self.ItemDataSize19 = rec.get(u'ItemDataSize19', 0) self.ItemData19 = fix_outgoingText(rec.get(u'ItemData19', u'')) self.ItemDataSize20 = rec.get(u'ItemDataSize20', 0) self.ItemData20 = fix_outgoingText(rec.get(u'ItemData20', u'')) #Can not implement adoLoadStr method:No key defined! #Can not implement adoInsertStr method:No key defined! #Can not implement adoUpdateStr method:No key defined! #Can not implement adoUpdateStr method:No key defined! #Can not implement adoCheckUpdateStr method:No key defined! #Can not implement adoCheckUpdateExStr method:No key defined! def getAdoRecords(self, resultCollection): '''²éѯ½á¹û´ò°ü³É¶þ½øÖÆÁ÷''' result = '' result = CommFunc.WriteDWORD(result, resultCollection.count()) for rec in resultCollection: self.readRecord(rec) result += self.getBuffer() return result #Can not implement adoQueryIndexStr method:No key defined! def adoQueryCustom(self, collection, queryDict): '''×Ô¶¨Òå²éѯ''' resultCollection = collection.find(queryDict) return self.getAdoRecords(resultCollection) def adoQueryAll(self, collection): '''²éѯËùÓÐ''' resultCollection = collection.find() return self.getAdoRecords(resultCollection) #Can not implement adoDeleteByIndexStr method:No key defined! def outputString(self): output = '''// Íæ¼ÒÊý¾Ý²é¿´»º´æ±íPy #tagPlayerViewCachePy: PlayerID = %s, GeTuiIDSize = %s, GeTuiID = %s, LV = %s, OffTime = %s, PropDataSize = %s, PropData = %s, PlusDataSize = %s, PlusData = %s, ItemDataSize1 = %s, ItemData1 = %s, ItemDataSize2 = %s, ItemData2 = %s, ItemDataSize3 = %s, ItemData3 = %s, ItemDataSize4 = %s, ItemData4 = %s, ItemDataSize5 = %s, ItemData5 = %s, ItemDataSize6 = %s, ItemData6 = %s, ItemDataSize7 = %s, ItemData7 = %s, ItemDataSize8 = %s, ItemData8 = %s, ItemDataSize9 = %s, ItemData9 = %s, ItemDataSize10 = %s, ItemData10 = %s, ItemDataSize11 = %s, ItemData11 = %s, ItemDataSize12 = %s, ItemData12 = %s, ItemDataSize13 = %s, ItemData13 = %s, ItemDataSize14 = %s, ItemData14 = %s, ItemDataSize15 = %s, ItemData15 = %s, ItemDataSize16 = %s, ItemData16 = %s, ItemDataSize17 = %s, ItemData17 = %s, ItemDataSize18 = %s, ItemData18 = %s, ItemDataSize19 = %s, ItemData19 = %s, ItemDataSize20 = %s, ItemData20 = %s, ADOResult = %s, '''%( self.PlayerID, self.GeTuiIDSize, self.GeTuiID, self.LV, self.OffTime, self.PropDataSize, self.PropData, self.PlusDataSize, self.PlusData, self.ItemDataSize1, self.ItemData1, self.ItemDataSize2, self.ItemData2, self.ItemDataSize3, self.ItemData3, self.ItemDataSize4, self.ItemData4, self.ItemDataSize5, self.ItemData5, self.ItemDataSize6, self.ItemData6, self.ItemDataSize7, self.ItemData7, self.ItemDataSize8, self.ItemData8, self.ItemDataSize9, self.ItemData9, self.ItemDataSize10, self.ItemData10, self.ItemDataSize11, self.ItemData11, self.ItemDataSize12, self.ItemData12, self.ItemDataSize13, self.ItemData13, self.ItemDataSize14, self.ItemData14, self.ItemDataSize15, self.ItemData15, self.ItemDataSize16, self.ItemData16, self.ItemDataSize17, self.ItemData17, self.ItemDataSize18, self.ItemData18, self.ItemDataSize19, self.ItemData19, self.ItemDataSize20, self.ItemData20, self.ADOResult, ) return output def dumpString(self): output = '''%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s'''%( self.PlayerID, self.GeTuiIDSize, self.GeTuiID, self.LV, self.OffTime, self.PropDataSize, self.PropData, self.PlusDataSize, self.PlusData, self.ItemDataSize1, self.ItemData1, self.ItemDataSize2, self.ItemData2, self.ItemDataSize3, self.ItemData3, self.ItemDataSize4, self.ItemData4, self.ItemDataSize5, self.ItemData5, self.ItemDataSize6, self.ItemData6, self.ItemDataSize7, self.ItemData7, self.ItemDataSize8, self.ItemData8, self.ItemDataSize9, self.ItemData9, self.ItemDataSize10, self.ItemData10, self.ItemDataSize11, self.ItemData11, self.ItemDataSize12, self.ItemData12, self.ItemDataSize13, self.ItemData13, self.ItemDataSize14, self.ItemData14, self.ItemDataSize15, self.ItemData15, self.ItemDataSize16, self.ItemData16, self.ItemDataSize17, self.ItemData17, self.ItemDataSize18, self.ItemData18, self.ItemDataSize19, self.ItemData19, self.ItemDataSize20, self.ItemData20, ) return output # ЭÖú±í #tagDBAssist class tagDBAssist(Structure): _pack_ = 1 _fields_ = [ ('GUID', ctypes.c_char * 40), ('FamilyID', ctypes.c_ulong), ('PlayerID', ctypes.c_ulong), ('PlayerName', ctypes.c_char * 33), ('Job', ctypes.c_ubyte), ('LV', ctypes.c_ushort), ('RealmLV', ctypes.c_ubyte), ('MapID', ctypes.c_ulong), ('LineID', ctypes.c_ulong), ('NPCID', ctypes.c_ulong), ('ExDataLen', ctypes.c_ushort), ('ExData', ctypes.c_char_p), ('ADOResult', ctypes.c_ulong), ] def __init__(self): Structure.__init__(self) self.clear() def clear(self): self.GUID = '' self.FamilyID = 0 self.PlayerID = 0 self.PlayerName = '' self.Job = 0 self.LV = 0 self.RealmLV = 0 self.MapID = 0 self.LineID = 0 self.NPCID = 0 self.ExDataLen = 0 self.ExData = '' def readData(self, buf, pos = 0, length = 0): if not pos <= length: msg = error.formatMsg('error', error.ERROR_NO_148, '(pos = %s) > (length = %s)'%(pos, length)) mylog.error(msg) return -1 if len(buf) < pos + self.getLength(): msg = error.formatMsg('error', error.ERROR_NO_149, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength())) mylog.error(msg) self.clear() self.GUID, pos = CommFunc.ReadString(buf, pos, 40) self.FamilyID, pos = CommFunc.ReadDWORD(buf, pos) self.PlayerID, pos = CommFunc.ReadDWORD(buf, pos) self.PlayerName, pos = CommFunc.ReadString(buf, pos, 33) self.Job, pos = CommFunc.ReadBYTE(buf, pos) self.LV, pos = CommFunc.ReadWORD(buf, pos) self.RealmLV, pos = CommFunc.ReadBYTE(buf, pos) self.MapID, pos = CommFunc.ReadDWORD(buf, pos) self.LineID, pos = CommFunc.ReadDWORD(buf, pos) self.NPCID, pos = CommFunc.ReadDWORD(buf, pos) self.ExDataLen, pos = CommFunc.ReadWORD(buf, pos) tmp, pos = CommFunc.ReadString(buf, pos, self.ExDataLen) self.ExData = ctypes.c_char_p(tmp) return self.getLength() def getBuffer(self): buf = '' buf = CommFunc.WriteString(buf, sizeof(ctypes.c_char) * 40, self.GUID) buf = CommFunc.WriteDWORD(buf, self.FamilyID) buf = CommFunc.WriteDWORD(buf, self.PlayerID) buf = CommFunc.WriteString(buf, sizeof(ctypes.c_char) * 33, self.PlayerName) buf = CommFunc.WriteBYTE(buf, self.Job) buf = CommFunc.WriteWORD(buf, self.LV) buf = CommFunc.WriteBYTE(buf, self.RealmLV) buf = CommFunc.WriteDWORD(buf, self.MapID) buf = CommFunc.WriteDWORD(buf, self.LineID) buf = CommFunc.WriteDWORD(buf, self.NPCID) buf = CommFunc.WriteWORD(buf, self.ExDataLen) buf = CommFunc.WriteString(buf, self.ExDataLen, self.ExData) return buf def getLength(self): length = 0 length += sizeof(ctypes.c_char) * 40 length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_char) * 33 length += sizeof(ctypes.c_ubyte) length += sizeof(ctypes.c_ushort) length += sizeof(ctypes.c_ubyte) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ushort) length += self.ExDataLen return length def getRecord(self): '''×éÖ¯´æ´¢¼Ç¼''' rec = {} rec[u'GUID'] = fix_incomingText(self.GUID) rec[u'FamilyID'] = self.FamilyID rec[u'PlayerID'] = self.PlayerID rec[u'PlayerName'] = fix_incomingText(self.PlayerName) rec[u'Job'] = self.Job rec[u'LV'] = self.LV rec[u'RealmLV'] = self.RealmLV rec[u'MapID'] = self.MapID rec[u'LineID'] = self.LineID rec[u'NPCID'] = self.NPCID rec[u'ExDataLen'] = self.ExDataLen rec[u'ExData'] = fix_incomingText(self.ExData) return rec def readRecord(self, rec): '''ÓÉÓÚMongoDB¶Á³öÀ´ÊÇunicode,ËùÓÐ×Ö·û´®ÐèÒª½øÐÐת»»''' self.GUID = fix_outgoingText(rec.get(u'GUID', u'')) self.FamilyID = rec.get(u'FamilyID', 0) self.PlayerID = rec.get(u'PlayerID', 0) self.PlayerName = fix_outgoingText(rec.get(u'PlayerName', u'')) self.Job = rec.get(u'Job', 0) self.LV = rec.get(u'LV', 0) self.RealmLV = rec.get(u'RealmLV', 0) self.MapID = rec.get(u'MapID', 0) self.LineID = rec.get(u'LineID', 0) self.NPCID = rec.get(u'NPCID', 0) self.ExDataLen = rec.get(u'ExDataLen', 0) self.ExData = fix_outgoingText(rec.get(u'ExData', u'')) #Can not implement adoLoadStr method:No key defined! #Can not implement adoInsertStr method:No key defined! #Can not implement adoUpdateStr method:No key defined! #Can not implement adoUpdateStr method:No key defined! #Can not implement adoCheckUpdateStr method:No key defined! #Can not implement adoCheckUpdateExStr method:No key defined! def getAdoRecords(self, resultCollection): '''²éѯ½á¹û´ò°ü³É¶þ½øÖÆÁ÷''' result = '' result = CommFunc.WriteDWORD(result, resultCollection.count()) for rec in resultCollection: self.readRecord(rec) result += self.getBuffer() return result #Can not implement adoQueryIndexStr method:No key defined! def adoQueryCustom(self, collection, queryDict): '''×Ô¶¨Òå²éѯ''' resultCollection = collection.find(queryDict) return self.getAdoRecords(resultCollection) def adoQueryAll(self, collection): '''²éѯËùÓÐ''' resultCollection = collection.find() return self.getAdoRecords(resultCollection) #Can not implement adoDeleteByIndexStr method:No key defined! def outputString(self): output = '''// ЭÖú±í #tagDBAssist: GUID = %s, FamilyID = %s, PlayerID = %s, PlayerName = %s, Job = %s, LV = %s, RealmLV = %s, MapID = %s, LineID = %s, NPCID = %s, ExDataLen = %s, ExData = %s, ADOResult = %s, '''%( self.GUID, self.FamilyID, self.PlayerID, self.PlayerName, self.Job, self.LV, self.RealmLV, self.MapID, self.LineID, self.NPCID, self.ExDataLen, self.ExData, self.ADOResult, ) return output def dumpString(self): output = '''%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s'''%( self.GUID, self.FamilyID, self.PlayerID, self.PlayerName, self.Job, self.LV, self.RealmLV, self.MapID, self.LineID, self.NPCID, self.ExDataLen, self.ExData, ) return output #CharÊý×éÀàÐÍSet½Ó¿Ú,ʹÓøýӿڶԴËÀàÐÍÊý¾Ý¸³Öµ£¬·ÀÖ¹¸³ÖµµÄÊý¾Ý¹ý³¤±¨´í def SetGUID(self,Str): if len(Str)<=40: self.GUID = Str else: self.GUID = Str[:40] def SetPlayerName(self,Str): if len(Str)<=33: self.PlayerName = Str else: self.PlayerName = Str[:33] # ЭÖú¸Ðл±í #tagDBAssistThanks class tagDBAssistThanks(Structure): _pack_ = 1 _fields_ = [ ('GUID', ctypes.c_char * 40), ('ItemID', ctypes.c_ulong), ('FamilyID', ctypes.c_ulong), ('PlayerID', ctypes.c_ulong), ('PlayerName', ctypes.c_char * 33), ('Job', ctypes.c_ubyte), ('LV', ctypes.c_ushort), ('RealmLV', ctypes.c_ubyte), ('MapID', ctypes.c_ulong), ('LineID', ctypes.c_ulong), ('NPCID', ctypes.c_ulong), ('ExDataLen', ctypes.c_ushort), ('ExData', ctypes.c_char_p), ('DailyDateStr', ctypes.c_char * 10), ('TimeStr', ctypes.c_char * 19), ('ThanksState', ctypes.c_ubyte), ('AssistPlayerLen', ctypes.c_ushort), ('AssistPlayer', ctypes.c_char_p), ('ADOResult', ctypes.c_ulong), ] def __init__(self): Structure.__init__(self) self.clear() def clear(self): self.GUID = '' self.ItemID = 0 self.FamilyID = 0 self.PlayerID = 0 self.PlayerName = '' self.Job = 0 self.LV = 0 self.RealmLV = 0 self.MapID = 0 self.LineID = 0 self.NPCID = 0 self.ExDataLen = 0 self.ExData = '' self.DailyDateStr = '' self.TimeStr = '' self.ThanksState = 0 self.AssistPlayerLen = 0 self.AssistPlayer = '' def readData(self, buf, pos = 0, length = 0): if not pos <= length: msg = error.formatMsg('error', error.ERROR_NO_148, '(pos = %s) > (length = %s)'%(pos, length)) mylog.error(msg) return -1 if len(buf) < pos + self.getLength(): msg = error.formatMsg('error', error.ERROR_NO_149, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength())) mylog.error(msg) self.clear() self.GUID, pos = CommFunc.ReadString(buf, pos, 40) self.ItemID, pos = CommFunc.ReadDWORD(buf, pos) self.FamilyID, pos = CommFunc.ReadDWORD(buf, pos) self.PlayerID, pos = CommFunc.ReadDWORD(buf, pos) self.PlayerName, pos = CommFunc.ReadString(buf, pos, 33) self.Job, pos = CommFunc.ReadBYTE(buf, pos) self.LV, pos = CommFunc.ReadWORD(buf, pos) self.RealmLV, pos = CommFunc.ReadBYTE(buf, pos) self.MapID, pos = CommFunc.ReadDWORD(buf, pos) self.LineID, pos = CommFunc.ReadDWORD(buf, pos) self.NPCID, pos = CommFunc.ReadDWORD(buf, pos) self.ExDataLen, pos = CommFunc.ReadWORD(buf, pos) tmp, pos = CommFunc.ReadString(buf, pos, self.ExDataLen) self.ExData = ctypes.c_char_p(tmp) self.DailyDateStr, pos = CommFunc.ReadString(buf, pos, 10) self.TimeStr, pos = CommFunc.ReadString(buf, pos, 19) self.ThanksState, pos = CommFunc.ReadBYTE(buf, pos) self.AssistPlayerLen, pos = CommFunc.ReadWORD(buf, pos) tmp, pos = CommFunc.ReadString(buf, pos, self.AssistPlayerLen) self.AssistPlayer = ctypes.c_char_p(tmp) return self.getLength() def getBuffer(self): buf = '' buf = CommFunc.WriteString(buf, sizeof(ctypes.c_char) * 40, self.GUID) buf = CommFunc.WriteDWORD(buf, self.ItemID) buf = CommFunc.WriteDWORD(buf, self.FamilyID) buf = CommFunc.WriteDWORD(buf, self.PlayerID) buf = CommFunc.WriteString(buf, sizeof(ctypes.c_char) * 33, self.PlayerName) buf = CommFunc.WriteBYTE(buf, self.Job) buf = CommFunc.WriteWORD(buf, self.LV) buf = CommFunc.WriteBYTE(buf, self.RealmLV) buf = CommFunc.WriteDWORD(buf, self.MapID) buf = CommFunc.WriteDWORD(buf, self.LineID) buf = CommFunc.WriteDWORD(buf, self.NPCID) buf = CommFunc.WriteWORD(buf, self.ExDataLen) buf = CommFunc.WriteString(buf, self.ExDataLen, self.ExData) buf = CommFunc.WriteString(buf, sizeof(ctypes.c_char) * 10, self.DailyDateStr) buf = CommFunc.WriteString(buf, sizeof(ctypes.c_char) * 19, self.TimeStr) buf = CommFunc.WriteBYTE(buf, self.ThanksState) buf = CommFunc.WriteWORD(buf, self.AssistPlayerLen) buf = CommFunc.WriteString(buf, self.AssistPlayerLen, self.AssistPlayer) return buf def getLength(self): length = 0 length += sizeof(ctypes.c_char) * 40 length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_char) * 33 length += sizeof(ctypes.c_ubyte) length += sizeof(ctypes.c_ushort) length += sizeof(ctypes.c_ubyte) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ushort) length += self.ExDataLen length += sizeof(ctypes.c_char) * 10 length += sizeof(ctypes.c_char) * 19 length += sizeof(ctypes.c_ubyte) length += sizeof(ctypes.c_ushort) length += self.AssistPlayerLen return length def getRecord(self): '''×éÖ¯´æ´¢¼Ç¼''' rec = {} rec[u'GUID'] = fix_incomingText(self.GUID) rec[u'ItemID'] = self.ItemID rec[u'FamilyID'] = self.FamilyID rec[u'PlayerID'] = self.PlayerID rec[u'PlayerName'] = fix_incomingText(self.PlayerName) rec[u'Job'] = self.Job rec[u'LV'] = self.LV rec[u'RealmLV'] = self.RealmLV rec[u'MapID'] = self.MapID rec[u'LineID'] = self.LineID rec[u'NPCID'] = self.NPCID rec[u'ExDataLen'] = self.ExDataLen rec[u'ExData'] = fix_incomingText(self.ExData) rec[u'DailyDateStr'] = fix_incomingText(self.DailyDateStr) rec[u'TimeStr'] = fix_incomingText(self.TimeStr) rec[u'ThanksState'] = self.ThanksState rec[u'AssistPlayerLen'] = self.AssistPlayerLen rec[u'AssistPlayer'] = fix_incomingText(self.AssistPlayer) return rec def readRecord(self, rec): '''ÓÉÓÚMongoDB¶Á³öÀ´ÊÇunicode,ËùÓÐ×Ö·û´®ÐèÒª½øÐÐת»»''' self.GUID = fix_outgoingText(rec.get(u'GUID', u'')) self.ItemID = rec.get(u'ItemID', 0) self.FamilyID = rec.get(u'FamilyID', 0) self.PlayerID = rec.get(u'PlayerID', 0) self.PlayerName = fix_outgoingText(rec.get(u'PlayerName', u'')) self.Job = rec.get(u'Job', 0) self.LV = rec.get(u'LV', 0) self.RealmLV = rec.get(u'RealmLV', 0) self.MapID = rec.get(u'MapID', 0) self.LineID = rec.get(u'LineID', 0) self.NPCID = rec.get(u'NPCID', 0) self.ExDataLen = rec.get(u'ExDataLen', 0) self.ExData = fix_outgoingText(rec.get(u'ExData', u'')) self.DailyDateStr = fix_outgoingText(rec.get(u'DailyDateStr', u'')) self.TimeStr = fix_outgoingText(rec.get(u'TimeStr', u'')) self.ThanksState = rec.get(u'ThanksState', 0) self.AssistPlayerLen = rec.get(u'AssistPlayerLen', 0) self.AssistPlayer = fix_outgoingText(rec.get(u'AssistPlayer', u'')) #Can not implement adoLoadStr method:No key defined! #Can not implement adoInsertStr method:No key defined! #Can not implement adoUpdateStr method:No key defined! #Can not implement adoUpdateStr method:No key defined! #Can not implement adoCheckUpdateStr method:No key defined! #Can not implement adoCheckUpdateExStr method:No key defined! def getAdoRecords(self, resultCollection): '''²éѯ½á¹û´ò°ü³É¶þ½øÖÆÁ÷''' result = '' result = CommFunc.WriteDWORD(result, resultCollection.count()) for rec in resultCollection: self.readRecord(rec) result += self.getBuffer() return result #Can not implement adoQueryIndexStr method:No key defined! def adoQueryCustom(self, collection, queryDict): '''×Ô¶¨Òå²éѯ''' resultCollection = collection.find(queryDict) return self.getAdoRecords(resultCollection) def adoQueryAll(self, collection): '''²éѯËùÓÐ''' resultCollection = collection.find() return self.getAdoRecords(resultCollection) #Can not implement adoDeleteByIndexStr method:No key defined! def outputString(self): output = '''// ЭÖú¸Ðл±í #tagDBAssistThanks: GUID = %s, ItemID = %s, FamilyID = %s, PlayerID = %s, PlayerName = %s, Job = %s, LV = %s, RealmLV = %s, MapID = %s, LineID = %s, NPCID = %s, ExDataLen = %s, ExData = %s, DailyDateStr = %s, TimeStr = %s, ThanksState = %s, AssistPlayerLen = %s, AssistPlayer = %s, ADOResult = %s, '''%( self.GUID, self.ItemID, self.FamilyID, self.PlayerID, self.PlayerName, self.Job, self.LV, self.RealmLV, self.MapID, self.LineID, self.NPCID, self.ExDataLen, self.ExData, self.DailyDateStr, self.TimeStr, self.ThanksState, self.AssistPlayerLen, self.AssistPlayer, self.ADOResult, ) return output def dumpString(self): output = '''%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s'''%( self.GUID, self.ItemID, self.FamilyID, self.PlayerID, self.PlayerName, self.Job, self.LV, self.RealmLV, self.MapID, self.LineID, self.NPCID, self.ExDataLen, self.ExData, self.DailyDateStr, self.TimeStr, self.ThanksState, self.AssistPlayerLen, self.AssistPlayer, ) return output #CharÊý×éÀàÐÍSet½Ó¿Ú,ʹÓøýӿڶԴËÀàÐÍÊý¾Ý¸³Öµ£¬·ÀÖ¹¸³ÖµµÄÊý¾Ý¹ý³¤±¨´í def SetGUID(self,Str): if len(Str)<=40: self.GUID = Str else: self.GUID = Str[:40] def SetPlayerName(self,Str): if len(Str)<=33: self.PlayerName = Str else: self.PlayerName = Str[:33] def SetDailyDateStr(self,Str): if len(Str)<=10: self.DailyDateStr = Str else: self.DailyDateStr = Str[:10] def SetTimeStr(self,Str): if len(Str)<=19: self.TimeStr = Str else: self.TimeStr = Str[:19] #------------------------------------------------------ # ¿ç·þÅÅÐаñ #tagDBCrossBillboard class tagDBCrossBillboard(Structure): _pack_ = 1 _fields_ = [ ('GroupValue1', ctypes.c_ulong), ('GroupValue2', ctypes.c_ulong), ('BillboardType', ctypes.c_ubyte), ('ID', ctypes.c_ulong), ('ID2', ctypes.c_ulong), ('Name1', ctypes.c_char * 33), ('Name2', ctypes.c_char * 65), ('Type2', ctypes.c_ubyte), ('Value1', ctypes.c_ulong), ('Value2', ctypes.c_ulong), ('Value3', ctypes.c_ulong), ('Value4', ctypes.c_ulong), ('Value5', ctypes.c_ulong), ('Value6', ctypes.c_ulong), ('Value7', ctypes.c_ulong), ('Value8', ctypes.c_ulong), ('CmpValue', ctypes.c_ulong), ('CmpValue2', ctypes.c_ulong), ('CmpValue3', ctypes.c_ulong), ('DataLen', ctypes.c_ushort), ('UserData', ctypes.c_char_p), ('ADOResult', ctypes.c_ulong), ] def __init__(self): Structure.__init__(self) self.clear() def clear(self): self.GroupValue1 = 0 self.GroupValue2 = 0 self.BillboardType = 0 self.ID = 0 self.ID2 = 0 self.Name1 = '' self.Name2 = '' self.Type2 = 0 self.Value1 = 0 self.Value2 = 0 self.Value3 = 0 self.Value4 = 0 self.Value5 = 0 self.Value6 = 0 self.Value7 = 0 self.Value8 = 0 self.CmpValue = 0 self.CmpValue2 = 0 self.CmpValue3 = 0 self.DataLen = 0 self.UserData = '' def readData(self, buf, pos = 0, length = 0): if not pos <= length: msg = error.formatMsg('error', error.ERROR_NO_148, '(pos = %s) > (length = %s)'%(pos, length)) mylog.error(msg) return -1 if len(buf) < pos + self.getLength(): msg = error.formatMsg('error', error.ERROR_NO_149, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength())) mylog.error(msg) self.clear() self.GroupValue1, pos = CommFunc.ReadDWORD(buf, pos) self.GroupValue2, pos = CommFunc.ReadDWORD(buf, pos) self.BillboardType, pos = CommFunc.ReadBYTE(buf, pos) self.ID, pos = CommFunc.ReadDWORD(buf, pos) self.ID2, pos = CommFunc.ReadDWORD(buf, pos) self.Name1, pos = CommFunc.ReadString(buf, pos, 33) self.Name2, pos = CommFunc.ReadString(buf, pos, 65) self.Type2, pos = CommFunc.ReadBYTE(buf, pos) self.Value1, pos = CommFunc.ReadDWORD(buf, pos) self.Value2, pos = CommFunc.ReadDWORD(buf, pos) self.Value3, pos = CommFunc.ReadDWORD(buf, pos) self.Value4, pos = CommFunc.ReadDWORD(buf, pos) self.Value5, pos = CommFunc.ReadDWORD(buf, pos) self.Value6, pos = CommFunc.ReadDWORD(buf, pos) self.Value7, pos = CommFunc.ReadDWORD(buf, pos) self.Value8, pos = CommFunc.ReadDWORD(buf, pos) self.CmpValue, pos = CommFunc.ReadDWORD(buf, pos) self.CmpValue2, pos = CommFunc.ReadDWORD(buf, pos) self.CmpValue3, pos = CommFunc.ReadDWORD(buf, pos) self.DataLen, pos = CommFunc.ReadWORD(buf, pos) tmp, pos = CommFunc.ReadString(buf, pos, self.DataLen) self.UserData = ctypes.c_char_p(tmp) return self.getLength() def getBuffer(self): buf = '' buf = CommFunc.WriteDWORD(buf, self.GroupValue1) buf = CommFunc.WriteDWORD(buf, self.GroupValue2) buf = CommFunc.WriteBYTE(buf, self.BillboardType) buf = CommFunc.WriteDWORD(buf, self.ID) buf = CommFunc.WriteDWORD(buf, self.ID2) buf = CommFunc.WriteString(buf, sizeof(ctypes.c_char) * 33, self.Name1) buf = CommFunc.WriteString(buf, sizeof(ctypes.c_char) * 65, self.Name2) buf = CommFunc.WriteBYTE(buf, self.Type2) buf = CommFunc.WriteDWORD(buf, self.Value1) buf = CommFunc.WriteDWORD(buf, self.Value2) buf = CommFunc.WriteDWORD(buf, self.Value3) buf = CommFunc.WriteDWORD(buf, self.Value4) buf = CommFunc.WriteDWORD(buf, self.Value5) buf = CommFunc.WriteDWORD(buf, self.Value6) buf = CommFunc.WriteDWORD(buf, self.Value7) buf = CommFunc.WriteDWORD(buf, self.Value8) buf = CommFunc.WriteDWORD(buf, self.CmpValue) buf = CommFunc.WriteDWORD(buf, self.CmpValue2) buf = CommFunc.WriteDWORD(buf, self.CmpValue3) buf = CommFunc.WriteWORD(buf, self.DataLen) buf = CommFunc.WriteString(buf, self.DataLen, self.UserData) return buf def getLength(self): length = 0 length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ubyte) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_char) * 33 length += sizeof(ctypes.c_char) * 65 length += sizeof(ctypes.c_ubyte) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ushort) length += self.DataLen return length def getRecord(self): '''×éÖ¯´æ´¢¼Ç¼''' rec = {} rec[u'GroupValue1'] = self.GroupValue1 rec[u'GroupValue2'] = self.GroupValue2 rec[u'BillboardType'] = self.BillboardType rec[u'ID'] = self.ID rec[u'ID2'] = self.ID2 rec[u'Name1'] = fix_incomingText(self.Name1) rec[u'Name2'] = fix_incomingText(self.Name2) rec[u'Type2'] = self.Type2 rec[u'Value1'] = self.Value1 rec[u'Value2'] = self.Value2 rec[u'Value3'] = self.Value3 rec[u'Value4'] = self.Value4 rec[u'Value5'] = self.Value5 rec[u'Value6'] = self.Value6 rec[u'Value7'] = self.Value7 rec[u'Value8'] = self.Value8 rec[u'CmpValue'] = self.CmpValue rec[u'CmpValue2'] = self.CmpValue2 rec[u'CmpValue3'] = self.CmpValue3 rec[u'DataLen'] = self.DataLen rec[u'UserData'] = fix_incomingText(self.UserData) return rec def readRecord(self, rec): '''ÓÉÓÚMongoDB¶Á³öÀ´ÊÇunicode,ËùÓÐ×Ö·û´®ÐèÒª½øÐÐת»»''' self.GroupValue1 = rec.get(u'GroupValue1', 0) self.GroupValue2 = rec.get(u'GroupValue2', 0) self.BillboardType = rec.get(u'BillboardType', 0) self.ID = rec.get(u'ID', 0) self.ID2 = rec.get(u'ID2', 0) self.Name1 = fix_outgoingText(rec.get(u'Name1', u'')) self.Name2 = fix_outgoingText(rec.get(u'Name2', u'')) self.Type2 = rec.get(u'Type2', 0) self.Value1 = rec.get(u'Value1', 0) self.Value2 = rec.get(u'Value2', 0) self.Value3 = rec.get(u'Value3', 0) self.Value4 = rec.get(u'Value4', 0) self.Value5 = rec.get(u'Value5', 0) self.Value6 = rec.get(u'Value6', 0) self.Value7 = rec.get(u'Value7', 0) self.Value8 = rec.get(u'Value8', 0) self.CmpValue = rec.get(u'CmpValue', 0) self.CmpValue2 = rec.get(u'CmpValue2', 0) self.CmpValue3 = rec.get(u'CmpValue3', 0) self.DataLen = rec.get(u'DataLen', 0) self.UserData = fix_outgoingText(rec.get(u'UserData', u'')) #Can not implement adoLoadStr method:No key defined! #Can not implement adoInsertStr method:No key defined! #Can not implement adoUpdateStr method:No key defined! #Can not implement adoUpdateStr method:No key defined! #Can not implement adoCheckUpdateStr method:No key defined! #Can not implement adoCheckUpdateExStr method:No key defined! def getAdoRecords(self, resultCollection): '''²éѯ½á¹û´ò°ü³É¶þ½øÖÆÁ÷''' result = '' result = CommFunc.WriteDWORD(result, resultCollection.count()) for rec in resultCollection: self.readRecord(rec) result += self.getBuffer() return result #Can not implement adoQueryIndexStr method:No key defined! def adoQueryCustom(self, collection, queryDict): '''×Ô¶¨Òå²éѯ''' resultCollection = collection.find(queryDict) return self.getAdoRecords(resultCollection) def adoQueryAll(self, collection): '''²éѯËùÓÐ''' resultCollection = collection.find() return self.getAdoRecords(resultCollection) #Can not implement adoDeleteByIndexStr method:No key defined! def outputString(self): output = '''// ¿ç·þÅÅÐаñ #tagDBCrossBillboard: GroupValue1 = %s, GroupValue2 = %s, BillboardType = %s, ID = %s, ID2 = %s, Name1 = %s, Name2 = %s, Type2 = %s, Value1 = %s, Value2 = %s, Value3 = %s, Value4 = %s, Value5 = %s, Value6 = %s, Value7 = %s, Value8 = %s, CmpValue = %s, CmpValue2 = %s, CmpValue3 = %s, DataLen = %s, UserData = %s, ADOResult = %s, '''%( self.GroupValue1, self.GroupValue2, self.BillboardType, self.ID, self.ID2, self.Name1, self.Name2, self.Type2, self.Value1, self.Value2, self.Value3, self.Value4, self.Value5, self.Value6, self.Value7, self.Value8, self.CmpValue, self.CmpValue2, self.CmpValue3, self.DataLen, self.UserData, self.ADOResult, ) return output def dumpString(self): output = '''%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s'''%( self.GroupValue1, self.GroupValue2, self.BillboardType, self.ID, self.ID2, self.Name1, self.Name2, self.Type2, self.Value1, self.Value2, self.Value3, self.Value4, self.Value5, self.Value6, self.Value7, self.Value8, self.CmpValue, self.CmpValue2, self.CmpValue3, self.DataLen, self.UserData, ) return output #CharÊý×éÀàÐÍSet½Ó¿Ú,ʹÓøýӿڶԴËÀàÐÍÊý¾Ý¸³Öµ£¬·ÀÖ¹¸³ÖµµÄÊý¾Ý¹ý³¤±¨´í def SetName1(self,Str): if len(Str)<=33: self.Name1 = Str else: self.Name1 = Str[:33] def SetName2(self,Str): if len(Str)<=65: self.Name2 = Str else: self.Name2 = Str[:65] # ¿ç·þ²¹³¥¸öÈËÁìÈ¡±í #tagDBCrossPersonalCompensation class tagDBCrossPersonalCompensation(Structure): _pack_ = 1 _fields_ = [ ('PlayerID', ctypes.c_ulong), ('GUID', ctypes.c_char * 40), ('LimitTime', ctypes.c_char * 30), ('TextLen', ctypes.c_ulong), ('Text', ctypes.c_char_p), ('Gold', ctypes.c_ulong), ('GoldPaper', ctypes.c_ulong), ('Silver', ctypes.c_ulong), ('ItemLen', ctypes.c_ushort), ('ItemInfo', ctypes.c_char_p), ('DetailLen', ctypes.c_ushort), ('Detail', ctypes.c_char_p), ('MoneySource', ctypes.c_ushort), ('ADOResult', ctypes.c_ulong), ] def __init__(self): Structure.__init__(self) self.clear() def clear(self): self.PlayerID = 0 self.GUID = '' self.LimitTime = '' self.TextLen = 0 self.Text = '' self.Gold = 0 self.GoldPaper = 0 self.Silver = 0 self.ItemLen = 0 self.ItemInfo = '' self.DetailLen = 0 self.Detail = '' self.MoneySource = 0 def readData(self, buf, pos = 0, length = 0): if not pos <= length: msg = error.formatMsg('error', error.ERROR_NO_148, '(pos = %s) > (length = %s)'%(pos, length)) mylog.error(msg) return -1 if len(buf) < pos + self.getLength(): msg = error.formatMsg('error', error.ERROR_NO_149, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength())) mylog.error(msg) self.clear() self.PlayerID, pos = CommFunc.ReadDWORD(buf, pos) self.GUID, pos = CommFunc.ReadString(buf, pos, 40) self.LimitTime, pos = CommFunc.ReadString(buf, pos, 30) self.TextLen, pos = CommFunc.ReadDWORD(buf, pos) tmp, pos = CommFunc.ReadString(buf, pos, self.TextLen) self.Text = ctypes.c_char_p(tmp) self.Gold, pos = CommFunc.ReadDWORD(buf, pos) self.GoldPaper, pos = CommFunc.ReadDWORD(buf, pos) self.Silver, pos = CommFunc.ReadDWORD(buf, pos) self.ItemLen, pos = CommFunc.ReadWORD(buf, pos) tmp, pos = CommFunc.ReadString(buf, pos, self.ItemLen) self.ItemInfo = ctypes.c_char_p(tmp) self.DetailLen, pos = CommFunc.ReadWORD(buf, pos) tmp, pos = CommFunc.ReadString(buf, pos, self.DetailLen) self.Detail = ctypes.c_char_p(tmp) self.MoneySource, pos = CommFunc.ReadWORD(buf, pos) return self.getLength() def getBuffer(self): buf = '' buf = CommFunc.WriteDWORD(buf, self.PlayerID) buf = CommFunc.WriteString(buf, sizeof(ctypes.c_char) * 40, self.GUID) buf = CommFunc.WriteString(buf, sizeof(ctypes.c_char) * 30, self.LimitTime) buf = CommFunc.WriteDWORD(buf, self.TextLen) buf = CommFunc.WriteString(buf, self.TextLen, self.Text) buf = CommFunc.WriteDWORD(buf, self.Gold) buf = CommFunc.WriteDWORD(buf, self.GoldPaper) buf = CommFunc.WriteDWORD(buf, self.Silver) buf = CommFunc.WriteWORD(buf, self.ItemLen) buf = CommFunc.WriteString(buf, self.ItemLen, self.ItemInfo) buf = CommFunc.WriteWORD(buf, self.DetailLen) buf = CommFunc.WriteString(buf, self.DetailLen, self.Detail) buf = CommFunc.WriteWORD(buf, self.MoneySource) return buf def getLength(self): length = 0 length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_char) * 40 length += sizeof(ctypes.c_char) * 30 length += sizeof(ctypes.c_ulong) length += self.TextLen length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ushort) length += self.ItemLen length += sizeof(ctypes.c_ushort) length += self.DetailLen length += sizeof(ctypes.c_ushort) return length def getRecord(self): '''×éÖ¯´æ´¢¼Ç¼''' rec = {} rec[u'PlayerID'] = self.PlayerID rec[u'GUID'] = fix_incomingText(self.GUID) rec[u'LimitTime'] = fix_incomingText(self.LimitTime) rec[u'TextLen'] = self.TextLen rec[u'Text'] = fix_incomingText(self.Text) rec[u'Gold'] = self.Gold rec[u'GoldPaper'] = self.GoldPaper rec[u'Silver'] = self.Silver rec[u'ItemLen'] = self.ItemLen rec[u'ItemInfo'] = fix_incomingText(self.ItemInfo) rec[u'DetailLen'] = self.DetailLen rec[u'Detail'] = fix_incomingText(self.Detail) rec[u'MoneySource'] = self.MoneySource return rec def readRecord(self, rec): '''ÓÉÓÚMongoDB¶Á³öÀ´ÊÇunicode,ËùÓÐ×Ö·û´®ÐèÒª½øÐÐת»»''' self.PlayerID = rec.get(u'PlayerID', 0) self.GUID = fix_outgoingText(rec.get(u'GUID', u'')) self.LimitTime = fix_outgoingText(rec.get(u'LimitTime', u'')) self.TextLen = rec.get(u'TextLen', 0) self.Text = fix_outgoingText(rec.get(u'Text', u'')) self.Gold = rec.get(u'Gold', 0) self.GoldPaper = rec.get(u'GoldPaper', 0) self.Silver = rec.get(u'Silver', 0) self.ItemLen = rec.get(u'ItemLen', 0) self.ItemInfo = fix_outgoingText(rec.get(u'ItemInfo', u'')) self.DetailLen = rec.get(u'DetailLen', 0) self.Detail = fix_outgoingText(rec.get(u'Detail', u'')) self.MoneySource = rec.get(u'MoneySource', 0) #Can not implement adoLoadStr method:No key defined! #Can not implement adoInsertStr method:No key defined! #Can not implement adoUpdateStr method:No key defined! #Can not implement adoUpdateStr method:No key defined! #Can not implement adoCheckUpdateStr method:No key defined! #Can not implement adoCheckUpdateExStr method:No key defined! def getAdoRecords(self, resultCollection): '''²éѯ½á¹û´ò°ü³É¶þ½øÖÆÁ÷''' result = '' result = CommFunc.WriteDWORD(result, resultCollection.count()) for rec in resultCollection: self.readRecord(rec) result += self.getBuffer() return result #Can not implement adoQueryIndexStr method:No key defined! def adoQueryCustom(self, collection, queryDict): '''×Ô¶¨Òå²éѯ''' resultCollection = collection.find(queryDict) return self.getAdoRecords(resultCollection) def adoQueryAll(self, collection): '''²éѯËùÓÐ''' resultCollection = collection.find() return self.getAdoRecords(resultCollection) #Can not implement adoDeleteByIndexStr method:No key defined! def outputString(self): output = '''// ¿ç·þ²¹³¥¸öÈËÁìÈ¡±í #tagDBCrossPersonalCompensation: PlayerID = %s, GUID = %s, LimitTime = %s, TextLen = %s, Text = %s, Gold = %s, GoldPaper = %s, Silver = %s, ItemLen = %s, ItemInfo = %s, DetailLen = %s, Detail = %s, MoneySource = %s, ADOResult = %s, '''%( self.PlayerID, self.GUID, self.LimitTime, self.TextLen, self.Text, self.Gold, self.GoldPaper, self.Silver, self.ItemLen, self.ItemInfo, self.DetailLen, self.Detail, self.MoneySource, self.ADOResult, ) return output def dumpString(self): output = '''%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s'''%( self.PlayerID, self.GUID, self.LimitTime, self.TextLen, self.Text, self.Gold, self.GoldPaper, self.Silver, self.ItemLen, self.ItemInfo, self.DetailLen, self.Detail, self.MoneySource, ) return output #CharÊý×éÀàÐÍSet½Ó¿Ú,ʹÓøýӿڶԴËÀàÐÍÊý¾Ý¸³Öµ£¬·ÀÖ¹¸³ÖµµÄÊý¾Ý¹ý³¤±¨´í def SetGUID(self,Str): if len(Str)<=40: self.GUID = Str else: self.GUID = Str[:40] def SetLimitTime(self,Str): if len(Str)<=30: self.LimitTime = Str else: self.LimitTime = Str[:30] # Íæ¼ÒÇ×Ãܱí #tagDBPyPlayerIntimacy class tagDBPyPlayerIntimacy(Structure): _pack_ = 1 _fields_ = [ ('PlayerID', ctypes.c_ulong), ('TagID', ctypes.c_ulong), ('Intimacy', ctypes.c_ulong), ('ADOResult', ctypes.c_ulong), ] def __init__(self): Structure.__init__(self) self.clear() def clear(self): memset(addressof(self), 0, self.getLength()) def readData(self, buf, pos = 0, length = 0): if not pos <= length: msg = error.formatMsg('error', error.ERROR_NO_148, '(pos = %s) > (length = %s)'%(pos, length)) mylog.error(msg) return -1 if len(buf) < pos + self.getLength(): msg = error.formatMsg('error', error.ERROR_NO_149, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength())) mylog.error(msg) self.clear() self.PlayerID, pos = CommFunc.ReadDWORD(buf, pos) self.TagID, pos = CommFunc.ReadDWORD(buf, pos) self.Intimacy, pos = CommFunc.ReadDWORD(buf, pos) return self.getLength() def getBuffer(self): buf = create_string_buffer(self.getLength()) memmove(addressof(buf), addressof(self), self.getLength()) return string_at(addressof(buf), self.getLength()) def getLength(self): return sizeof(tagDBPyPlayerIntimacy) def getRecord(self): '''×éÖ¯´æ´¢¼Ç¼''' rec = {} rec[u'PlayerID'] = self.PlayerID rec[u'TagID'] = self.TagID rec[u'Intimacy'] = self.Intimacy return rec def readRecord(self, rec): '''ÓÉÓÚMongoDB¶Á³öÀ´ÊÇunicode,ËùÓÐ×Ö·û´®ÐèÒª½øÐÐת»»''' self.PlayerID = rec.get(u'PlayerID', 0) self.TagID = rec.get(u'TagID', 0) self.Intimacy = rec.get(u'Intimacy', 0) #Can not implement adoLoadStr method:No key defined! def adoInsert(self, collection): '''Ö´ÐвåÈë''' trycnt = 0 rec = self.getRecord() while(True): try: collection.insert(rec, False, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_152, 'Insert failed!PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True #Can not implement adoUpdateStr method:No key defined! def adoUpdateEx(self, collection, spec): '''Ö´ÐиüÐÂ''' trycnt = 0 rec = self.getRecord() while(True): try: collection.update(spec, {'$set':rec}, False, False, True, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_154, 'Update failed!PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True #Can not implement adoCheckUpdateStr method:No key defined! #Can not implement adoCheckUpdateExStr method:No key defined! def getAdoRecords(self, resultCollection): '''²éѯ½á¹û´ò°ü³É¶þ½øÖÆÁ÷''' result = '' result = CommFunc.WriteDWORD(result, resultCollection.count()) for rec in resultCollection: self.readRecord(rec) result += self.getBuffer() return result def adoQueryIndex(self, collection): '''ÓÃË÷Òý×ֶβéÕÒ''' resultCollection = collection.find({'PlayerID':self.PlayerID}) return self.getAdoRecords(resultCollection) def adoQueryCustom(self, collection, queryDict): '''×Ô¶¨Òå²éѯ''' resultCollection = collection.find(queryDict) return self.getAdoRecords(resultCollection) def adoQueryAll(self, collection): '''²éѯËùÓÐ''' resultCollection = collection.find() return self.getAdoRecords(resultCollection) def adoDeleteByIndex(self, collection): '''¸ù¾ÝË÷Òýɾ³ý''' trycnt = 0 while(True): try: collection.remove({'PlayerID':self.PlayerID}) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:PlayerID = %s"%(self.__class__.__name__, inspect.stack()[0][3], self.PlayerID)) msg = error.formatMsg('error', error.ERROR_NO_155, 'delete failure!self.PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True def outputString(self): output = '''// Íæ¼ÒÇ×Ãܱí #tagDBPyPlayerIntimacy: PlayerID = %s, TagID = %s, Intimacy = %s, ADOResult = %s, '''%( self.PlayerID, self.TagID, self.Intimacy, self.ADOResult, ) return output def dumpString(self): output = '''%1s\t%1s\t%1s'''%( self.PlayerID, self.TagID, self.Intimacy, ) return output # ÷ÈÁ¦¹±Ï×Öµ¼Ç¼±í #tagDBPyCharmValueRec class tagDBPyCharmValueRec(Structure): _pack_ = 1 _fields_ = [ ('PlayerID', ctypes.c_ulong), ('Type', ctypes.c_ubyte), ('OfferPlayerID', ctypes.c_ulong), ('CharmValue', ctypes.c_ulong), ('UpdTime', ctypes.c_ulong), ('ADOResult', ctypes.c_ulong), ] def __init__(self): Structure.__init__(self) self.clear() def clear(self): memset(addressof(self), 0, self.getLength()) def readData(self, buf, pos = 0, length = 0): if not pos <= length: msg = error.formatMsg('error', error.ERROR_NO_148, '(pos = %s) > (length = %s)'%(pos, length)) mylog.error(msg) return -1 if len(buf) < pos + self.getLength(): msg = error.formatMsg('error', error.ERROR_NO_149, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength())) mylog.error(msg) self.clear() self.PlayerID, pos = CommFunc.ReadDWORD(buf, pos) self.Type, pos = CommFunc.ReadBYTE(buf, pos) self.OfferPlayerID, pos = CommFunc.ReadDWORD(buf, pos) self.CharmValue, pos = CommFunc.ReadDWORD(buf, pos) self.UpdTime, pos = CommFunc.ReadDWORD(buf, pos) return self.getLength() def getBuffer(self): buf = create_string_buffer(self.getLength()) memmove(addressof(buf), addressof(self), self.getLength()) return string_at(addressof(buf), self.getLength()) def getLength(self): return sizeof(tagDBPyCharmValueRec) def getRecord(self): '''×éÖ¯´æ´¢¼Ç¼''' rec = {} rec[u'PlayerID'] = self.PlayerID rec[u'Type'] = self.Type rec[u'OfferPlayerID'] = self.OfferPlayerID rec[u'CharmValue'] = self.CharmValue rec[u'UpdTime'] = self.UpdTime return rec def readRecord(self, rec): '''ÓÉÓÚMongoDB¶Á³öÀ´ÊÇunicode,ËùÓÐ×Ö·û´®ÐèÒª½øÐÐת»»''' self.PlayerID = rec.get(u'PlayerID', 0) self.Type = rec.get(u'Type', 0) self.OfferPlayerID = rec.get(u'OfferPlayerID', 0) self.CharmValue = rec.get(u'CharmValue', 0) self.UpdTime = rec.get(u'UpdTime', 0) #Can not implement adoLoadStr method:No key defined! def adoInsert(self, collection): '''Ö´ÐвåÈë''' trycnt = 0 rec = self.getRecord() while(True): try: collection.insert(rec, False, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_152, 'Insert failed!PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True #Can not implement adoUpdateStr method:No key defined! def adoUpdateEx(self, collection, spec): '''Ö´ÐиüÐÂ''' trycnt = 0 rec = self.getRecord() while(True): try: collection.update(spec, {'$set':rec}, False, False, True, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_154, 'Update failed!PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True #Can not implement adoCheckUpdateStr method:No key defined! #Can not implement adoCheckUpdateExStr method:No key defined! def getAdoRecords(self, resultCollection): '''²éѯ½á¹û´ò°ü³É¶þ½øÖÆÁ÷''' result = '' result = CommFunc.WriteDWORD(result, resultCollection.count()) for rec in resultCollection: self.readRecord(rec) result += self.getBuffer() return result def adoQueryIndex(self, collection): '''ÓÃË÷Òý×ֶβéÕÒ''' resultCollection = collection.find({'PlayerID':self.PlayerID}) return self.getAdoRecords(resultCollection) def adoQueryCustom(self, collection, queryDict): '''×Ô¶¨Òå²éѯ''' resultCollection = collection.find(queryDict) return self.getAdoRecords(resultCollection) def adoQueryAll(self, collection): '''²éѯËùÓÐ''' resultCollection = collection.find() return self.getAdoRecords(resultCollection) def adoDeleteByIndex(self, collection): '''¸ù¾ÝË÷Òýɾ³ý''' trycnt = 0 while(True): try: collection.remove({'PlayerID':self.PlayerID}) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:PlayerID = %s"%(self.__class__.__name__, inspect.stack()[0][3], self.PlayerID)) msg = error.formatMsg('error', error.ERROR_NO_155, 'delete failure!self.PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True def outputString(self): output = '''// ÷ÈÁ¦¹±Ï×Öµ¼Ç¼±í #tagDBPyCharmValueRec: PlayerID = %s, Type = %s, OfferPlayerID = %s, CharmValue = %s, UpdTime = %s, ADOResult = %s, '''%( self.PlayerID, self.Type, self.OfferPlayerID, self.CharmValue, self.UpdTime, self.ADOResult, ) return output def dumpString(self): output = '''%1s\t%1s\t%1s\t%1s\t%1s'''%( self.PlayerID, self.Type, self.OfferPlayerID, self.CharmValue, self.UpdTime, ) return output # δ֪ͨµÄÇéÔµËÍÀñ¼Ç¼ #tagDBPyUnNotifyLoveGiftRec class tagDBPyUnNotifyLoveGiftRec(Structure): _pack_ = 1 _fields_ = [ ('PlayerID', ctypes.c_ulong), ('GivePlayerID', ctypes.c_ulong), ('GiftNum', ctypes.c_ushort), ('GiftCount', ctypes.c_ulong), ('SendTime', ctypes.c_ulong), ('ADOResult', ctypes.c_ulong), ] def __init__(self): Structure.__init__(self) self.clear() def clear(self): memset(addressof(self), 0, self.getLength()) def readData(self, buf, pos = 0, length = 0): if not pos <= length: msg = error.formatMsg('error', error.ERROR_NO_148, '(pos = %s) > (length = %s)'%(pos, length)) mylog.error(msg) return -1 if len(buf) < pos + self.getLength(): msg = error.formatMsg('error', error.ERROR_NO_149, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength())) mylog.error(msg) self.clear() self.PlayerID, pos = CommFunc.ReadDWORD(buf, pos) self.GivePlayerID, pos = CommFunc.ReadDWORD(buf, pos) self.GiftNum, pos = CommFunc.ReadWORD(buf, pos) self.GiftCount, pos = CommFunc.ReadDWORD(buf, pos) self.SendTime, pos = CommFunc.ReadDWORD(buf, pos) return self.getLength() def getBuffer(self): buf = create_string_buffer(self.getLength()) memmove(addressof(buf), addressof(self), self.getLength()) return string_at(addressof(buf), self.getLength()) def getLength(self): return sizeof(tagDBPyUnNotifyLoveGiftRec) def getRecord(self): '''×éÖ¯´æ´¢¼Ç¼''' rec = {} rec[u'PlayerID'] = self.PlayerID rec[u'GivePlayerID'] = self.GivePlayerID rec[u'GiftNum'] = self.GiftNum rec[u'GiftCount'] = self.GiftCount rec[u'SendTime'] = self.SendTime return rec def readRecord(self, rec): '''ÓÉÓÚMongoDB¶Á³öÀ´ÊÇunicode,ËùÓÐ×Ö·û´®ÐèÒª½øÐÐת»»''' self.PlayerID = rec.get(u'PlayerID', 0) self.GivePlayerID = rec.get(u'GivePlayerID', 0) self.GiftNum = rec.get(u'GiftNum', 0) self.GiftCount = rec.get(u'GiftCount', 0) self.SendTime = rec.get(u'SendTime', 0) #Can not implement adoLoadStr method:No key defined! def adoInsert(self, collection): '''Ö´ÐвåÈë''' trycnt = 0 rec = self.getRecord() while(True): try: collection.insert(rec, False, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_152, 'Insert failed!PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True #Can not implement adoUpdateStr method:No key defined! def adoUpdateEx(self, collection, spec): '''Ö´ÐиüÐÂ''' trycnt = 0 rec = self.getRecord() while(True): try: collection.update(spec, {'$set':rec}, False, False, True, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_154, 'Update failed!PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True #Can not implement adoCheckUpdateStr method:No key defined! #Can not implement adoCheckUpdateExStr method:No key defined! def getAdoRecords(self, resultCollection): '''²éѯ½á¹û´ò°ü³É¶þ½øÖÆÁ÷''' result = '' result = CommFunc.WriteDWORD(result, resultCollection.count()) for rec in resultCollection: self.readRecord(rec) result += self.getBuffer() return result def adoQueryIndex(self, collection): '''ÓÃË÷Òý×ֶβéÕÒ''' resultCollection = collection.find({'PlayerID':self.PlayerID}) return self.getAdoRecords(resultCollection) def adoQueryCustom(self, collection, queryDict): '''×Ô¶¨Òå²éѯ''' resultCollection = collection.find(queryDict) return self.getAdoRecords(resultCollection) def adoQueryAll(self, collection): '''²éѯËùÓÐ''' resultCollection = collection.find() return self.getAdoRecords(resultCollection) def adoDeleteByIndex(self, collection): '''¸ù¾ÝË÷Òýɾ³ý''' trycnt = 0 while(True): try: collection.remove({'PlayerID':self.PlayerID}) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:PlayerID = %s"%(self.__class__.__name__, inspect.stack()[0][3], self.PlayerID)) msg = error.formatMsg('error', error.ERROR_NO_155, 'delete failure!self.PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True def outputString(self): output = '''// δ֪ͨµÄÇéÔµËÍÀñ¼Ç¼ #tagDBPyUnNotifyLoveGiftRec: PlayerID = %s, GivePlayerID = %s, GiftNum = %s, GiftCount = %s, SendTime = %s, ADOResult = %s, '''%( self.PlayerID, self.GivePlayerID, self.GiftNum, self.GiftCount, self.SendTime, self.ADOResult, ) return output def dumpString(self): output = '''%1s\t%1s\t%1s\t%1s\t%1s'''%( self.PlayerID, self.GivePlayerID, self.GiftNum, self.GiftCount, self.SendTime, ) return output # °é±í #tagDBPyCouple class tagDBPyCouple(Structure): _pack_ = 1 _fields_ = [ ('PlayerIDA', ctypes.c_ulong), ('PlayerIDB', ctypes.c_ulong), ('NewMarryTime', ctypes.c_ulong), ('MarryTime', ctypes.c_ulong), ('BridePriceState', ctypes.c_ulong), ('BreakRequestID', ctypes.c_ulong), ('BreakRequestTime', ctypes.c_ulong), ('BreakRequestTimeA', ctypes.c_ulong), ('BreakRequestTimeB', ctypes.c_ulong), ('ADOResult', ctypes.c_ulong), ] def __init__(self): Structure.__init__(self) self.clear() def clear(self): memset(addressof(self), 0, self.getLength()) def readData(self, buf, pos = 0, length = 0): if not pos <= length: msg = error.formatMsg('error', error.ERROR_NO_148, '(pos = %s) > (length = %s)'%(pos, length)) mylog.error(msg) return -1 if len(buf) < pos + self.getLength(): msg = error.formatMsg('error', error.ERROR_NO_149, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength())) mylog.error(msg) self.clear() self.PlayerIDA, pos = CommFunc.ReadDWORD(buf, pos) self.PlayerIDB, pos = CommFunc.ReadDWORD(buf, pos) self.NewMarryTime, pos = CommFunc.ReadDWORD(buf, pos) self.MarryTime, pos = CommFunc.ReadDWORD(buf, pos) self.BridePriceState, pos = CommFunc.ReadDWORD(buf, pos) self.BreakRequestID, pos = CommFunc.ReadDWORD(buf, pos) self.BreakRequestTime, pos = CommFunc.ReadDWORD(buf, pos) self.BreakRequestTimeA, pos = CommFunc.ReadDWORD(buf, pos) self.BreakRequestTimeB, pos = CommFunc.ReadDWORD(buf, pos) return self.getLength() def getBuffer(self): buf = create_string_buffer(self.getLength()) memmove(addressof(buf), addressof(self), self.getLength()) return string_at(addressof(buf), self.getLength()) def getLength(self): return sizeof(tagDBPyCouple) def getRecord(self): '''×éÖ¯´æ´¢¼Ç¼''' rec = {} rec[u'PlayerIDA'] = self.PlayerIDA rec[u'PlayerIDB'] = self.PlayerIDB rec[u'NewMarryTime'] = self.NewMarryTime rec[u'MarryTime'] = self.MarryTime rec[u'BridePriceState'] = self.BridePriceState rec[u'BreakRequestID'] = self.BreakRequestID rec[u'BreakRequestTime'] = self.BreakRequestTime rec[u'BreakRequestTimeA'] = self.BreakRequestTimeA rec[u'BreakRequestTimeB'] = self.BreakRequestTimeB return rec def readRecord(self, rec): '''ÓÉÓÚMongoDB¶Á³öÀ´ÊÇunicode,ËùÓÐ×Ö·û´®ÐèÒª½øÐÐת»»''' self.PlayerIDA = rec.get(u'PlayerIDA', 0) self.PlayerIDB = rec.get(u'PlayerIDB', 0) self.NewMarryTime = rec.get(u'NewMarryTime', 0) self.MarryTime = rec.get(u'MarryTime', 0) self.BridePriceState = rec.get(u'BridePriceState', 0) self.BreakRequestID = rec.get(u'BreakRequestID', 0) self.BreakRequestTime = rec.get(u'BreakRequestTime', 0) self.BreakRequestTimeA = rec.get(u'BreakRequestTimeA', 0) self.BreakRequestTimeB = rec.get(u'BreakRequestTimeB', 0) #Can not implement adoLoadStr method:No key defined! #Can not implement adoInsertStr method:No key defined! #Can not implement adoUpdateStr method:No key defined! #Can not implement adoUpdateStr method:No key defined! #Can not implement adoCheckUpdateStr method:No key defined! #Can not implement adoCheckUpdateExStr method:No key defined! def getAdoRecords(self, resultCollection): '''²éѯ½á¹û´ò°ü³É¶þ½øÖÆÁ÷''' result = '' result = CommFunc.WriteDWORD(result, resultCollection.count()) for rec in resultCollection: self.readRecord(rec) result += self.getBuffer() return result #Can not implement adoQueryIndexStr method:No key defined! def adoQueryCustom(self, collection, queryDict): '''×Ô¶¨Òå²éѯ''' resultCollection = collection.find(queryDict) return self.getAdoRecords(resultCollection) def adoQueryAll(self, collection): '''²éѯËùÓÐ''' resultCollection = collection.find() return self.getAdoRecords(resultCollection) #Can not implement adoDeleteByIndexStr method:No key defined! def outputString(self): output = '''// °é±í #tagDBPyCouple: PlayerIDA = %s, PlayerIDB = %s, NewMarryTime = %s, MarryTime = %s, BridePriceState = %s, BreakRequestID = %s, BreakRequestTime = %s, BreakRequestTimeA = %s, BreakRequestTimeB = %s, ADOResult = %s, '''%( self.PlayerIDA, self.PlayerIDB, self.NewMarryTime, self.MarryTime, self.BridePriceState, self.BreakRequestID, self.BreakRequestTime, self.BreakRequestTimeA, self.BreakRequestTimeB, self.ADOResult, ) return output def dumpString(self): output = '''%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s'''%( self.PlayerIDA, self.PlayerIDB, self.NewMarryTime, self.MarryTime, self.BridePriceState, self.BreakRequestID, self.BreakRequestTime, self.BreakRequestTimeA, self.BreakRequestTimeB, ) return output # ¸£µØ¿óÎï±í #tagDBPyMineAreaItem class tagDBPyMineAreaItem(Structure): _pack_ = 1 _fields_ = [ ('PlayerID', ctypes.c_ulong), ('Index', ctypes.c_ubyte), ('MineID', ctypes.c_ushort), ('MineType', ctypes.c_ubyte), ('UpdTime', ctypes.c_ulong), ('PosLen', ctypes.c_ubyte), ('Position', ctypes.c_char_p), ('WorkerCount', ctypes.c_ubyte), ('WorkerState', ctypes.c_ubyte), ('RobPlayerID', ctypes.c_ulong), ('RobWorkerCount', ctypes.c_ubyte), ('RobWorkerState', ctypes.c_ubyte), ('ADOResult', ctypes.c_ulong), ] def __init__(self): Structure.__init__(self) self.clear() def clear(self): self.PlayerID = 0 self.Index = 0 self.MineID = 0 self.MineType = 0 self.UpdTime = 0 self.PosLen = 0 self.Position = '' self.WorkerCount = 0 self.WorkerState = 0 self.RobPlayerID = 0 self.RobWorkerCount = 0 self.RobWorkerState = 0 def readData(self, buf, pos = 0, length = 0): if not pos <= length: msg = error.formatMsg('error', error.ERROR_NO_148, '(pos = %s) > (length = %s)'%(pos, length)) mylog.error(msg) return -1 if len(buf) < pos + self.getLength(): msg = error.formatMsg('error', error.ERROR_NO_149, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength())) mylog.error(msg) self.clear() self.PlayerID, pos = CommFunc.ReadDWORD(buf, pos) self.Index, pos = CommFunc.ReadBYTE(buf, pos) self.MineID, pos = CommFunc.ReadWORD(buf, pos) self.MineType, pos = CommFunc.ReadBYTE(buf, pos) self.UpdTime, pos = CommFunc.ReadDWORD(buf, pos) self.PosLen, pos = CommFunc.ReadBYTE(buf, pos) tmp, pos = CommFunc.ReadString(buf, pos, self.PosLen) self.Position = ctypes.c_char_p(tmp) self.WorkerCount, pos = CommFunc.ReadBYTE(buf, pos) self.WorkerState, pos = CommFunc.ReadBYTE(buf, pos) self.RobPlayerID, pos = CommFunc.ReadDWORD(buf, pos) self.RobWorkerCount, pos = CommFunc.ReadBYTE(buf, pos) self.RobWorkerState, pos = CommFunc.ReadBYTE(buf, pos) return self.getLength() def getBuffer(self): buf = '' buf = CommFunc.WriteDWORD(buf, self.PlayerID) buf = CommFunc.WriteBYTE(buf, self.Index) buf = CommFunc.WriteWORD(buf, self.MineID) buf = CommFunc.WriteBYTE(buf, self.MineType) buf = CommFunc.WriteDWORD(buf, self.UpdTime) buf = CommFunc.WriteBYTE(buf, self.PosLen) buf = CommFunc.WriteString(buf, self.PosLen, self.Position) buf = CommFunc.WriteBYTE(buf, self.WorkerCount) buf = CommFunc.WriteBYTE(buf, self.WorkerState) buf = CommFunc.WriteDWORD(buf, self.RobPlayerID) buf = CommFunc.WriteBYTE(buf, self.RobWorkerCount) buf = CommFunc.WriteBYTE(buf, self.RobWorkerState) return buf def getLength(self): length = 0 length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ubyte) length += sizeof(ctypes.c_ushort) length += sizeof(ctypes.c_ubyte) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ubyte) length += self.PosLen length += sizeof(ctypes.c_ubyte) length += sizeof(ctypes.c_ubyte) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ubyte) length += sizeof(ctypes.c_ubyte) return length def getRecord(self): '''×éÖ¯´æ´¢¼Ç¼''' rec = {} rec[u'PlayerID'] = self.PlayerID rec[u'Index'] = self.Index rec[u'MineID'] = self.MineID rec[u'MineType'] = self.MineType rec[u'UpdTime'] = self.UpdTime rec[u'PosLen'] = self.PosLen rec[u'Position'] = fix_incomingText(self.Position) rec[u'WorkerCount'] = self.WorkerCount rec[u'WorkerState'] = self.WorkerState rec[u'RobPlayerID'] = self.RobPlayerID rec[u'RobWorkerCount'] = self.RobWorkerCount rec[u'RobWorkerState'] = self.RobWorkerState return rec def readRecord(self, rec): '''ÓÉÓÚMongoDB¶Á³öÀ´ÊÇunicode,ËùÓÐ×Ö·û´®ÐèÒª½øÐÐת»»''' self.PlayerID = rec.get(u'PlayerID', 0) self.Index = rec.get(u'Index', 0) self.MineID = rec.get(u'MineID', 0) self.MineType = rec.get(u'MineType', 0) self.UpdTime = rec.get(u'UpdTime', 0) self.PosLen = rec.get(u'PosLen', 0) self.Position = fix_outgoingText(rec.get(u'Position', u'')) self.WorkerCount = rec.get(u'WorkerCount', 0) self.WorkerState = rec.get(u'WorkerState', 0) self.RobPlayerID = rec.get(u'RobPlayerID', 0) self.RobWorkerCount = rec.get(u'RobWorkerCount', 0) self.RobWorkerState = rec.get(u'RobWorkerState', 0) #Can not implement adoLoadStr method:No key defined! #Can not implement adoInsertStr method:No key defined! #Can not implement adoUpdateStr method:No key defined! #Can not implement adoUpdateStr method:No key defined! #Can not implement adoCheckUpdateStr method:No key defined! #Can not implement adoCheckUpdateExStr method:No key defined! def getAdoRecords(self, resultCollection): '''²éѯ½á¹û´ò°ü³É¶þ½øÖÆÁ÷''' result = '' result = CommFunc.WriteDWORD(result, resultCollection.count()) for rec in resultCollection: self.readRecord(rec) result += self.getBuffer() return result #Can not implement adoQueryIndexStr method:No key defined! def adoQueryCustom(self, collection, queryDict): '''×Ô¶¨Òå²éѯ''' resultCollection = collection.find(queryDict) return self.getAdoRecords(resultCollection) def adoQueryAll(self, collection): '''²éѯËùÓÐ''' resultCollection = collection.find() return self.getAdoRecords(resultCollection) #Can not implement adoDeleteByIndexStr method:No key defined! def outputString(self): output = '''// ¸£µØ¿óÎï±í #tagDBPyMineAreaItem: PlayerID = %s, Index = %s, MineID = %s, MineType = %s, UpdTime = %s, PosLen = %s, Position = %s, WorkerCount = %s, WorkerState = %s, RobPlayerID = %s, RobWorkerCount = %s, RobWorkerState = %s, ADOResult = %s, '''%( self.PlayerID, self.Index, self.MineID, self.MineType, self.UpdTime, self.PosLen, self.Position, self.WorkerCount, self.WorkerState, self.RobPlayerID, self.RobWorkerCount, self.RobWorkerState, self.ADOResult, ) return output def dumpString(self): output = '''%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s'''%( self.PlayerID, self.Index, self.MineID, self.MineType, self.UpdTime, self.PosLen, self.Position, self.WorkerCount, self.WorkerState, self.RobPlayerID, self.RobWorkerCount, self.RobWorkerState, ) return output # ¸£µØ¼Ç¼±í #tagDBPyMineAreaRecord class tagDBPyMineAreaRecord(Structure): _pack_ = 1 _fields_ = [ ('PlayerID', ctypes.c_ulong), ('RecordType', ctypes.c_ulong), ('TagPlayerID', ctypes.c_ulong), ('RecordTime', ctypes.c_ulong), ('MineID', ctypes.c_ushort), ('DataLen', ctypes.c_ushort), ('Data', ctypes.c_char_p), ('ADOResult', ctypes.c_ulong), ] def __init__(self): Structure.__init__(self) self.clear() def clear(self): self.PlayerID = 0 self.RecordType = 0 self.TagPlayerID = 0 self.RecordTime = 0 self.MineID = 0 self.DataLen = 0 self.Data = '' def readData(self, buf, pos = 0, length = 0): if not pos <= length: msg = error.formatMsg('error', error.ERROR_NO_148, '(pos = %s) > (length = %s)'%(pos, length)) mylog.error(msg) return -1 if len(buf) < pos + self.getLength(): msg = error.formatMsg('error', error.ERROR_NO_149, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength())) mylog.error(msg) self.clear() self.PlayerID, pos = CommFunc.ReadDWORD(buf, pos) self.RecordType, pos = CommFunc.ReadDWORD(buf, pos) self.TagPlayerID, pos = CommFunc.ReadDWORD(buf, pos) self.RecordTime, pos = CommFunc.ReadDWORD(buf, pos) self.MineID, pos = CommFunc.ReadWORD(buf, pos) self.DataLen, pos = CommFunc.ReadWORD(buf, pos) tmp, pos = CommFunc.ReadString(buf, pos, self.DataLen) self.Data = ctypes.c_char_p(tmp) return self.getLength() def getBuffer(self): buf = '' buf = CommFunc.WriteDWORD(buf, self.PlayerID) buf = CommFunc.WriteDWORD(buf, self.RecordType) buf = CommFunc.WriteDWORD(buf, self.TagPlayerID) buf = CommFunc.WriteDWORD(buf, self.RecordTime) buf = CommFunc.WriteWORD(buf, self.MineID) buf = CommFunc.WriteWORD(buf, self.DataLen) buf = CommFunc.WriteString(buf, self.DataLen, self.Data) return buf def getLength(self): length = 0 length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ushort) length += sizeof(ctypes.c_ushort) length += self.DataLen return length def getRecord(self): '''×éÖ¯´æ´¢¼Ç¼''' rec = {} rec[u'PlayerID'] = self.PlayerID rec[u'RecordType'] = self.RecordType rec[u'TagPlayerID'] = self.TagPlayerID rec[u'RecordTime'] = self.RecordTime rec[u'MineID'] = self.MineID rec[u'DataLen'] = self.DataLen rec[u'Data'] = fix_incomingText(self.Data) return rec def readRecord(self, rec): '''ÓÉÓÚMongoDB¶Á³öÀ´ÊÇunicode,ËùÓÐ×Ö·û´®ÐèÒª½øÐÐת»»''' self.PlayerID = rec.get(u'PlayerID', 0) self.RecordType = rec.get(u'RecordType', 0) self.TagPlayerID = rec.get(u'TagPlayerID', 0) self.RecordTime = rec.get(u'RecordTime', 0) self.MineID = rec.get(u'MineID', 0) self.DataLen = rec.get(u'DataLen', 0) self.Data = fix_outgoingText(rec.get(u'Data', u'')) #Can not implement adoLoadStr method:No key defined! #Can not implement adoInsertStr method:No key defined! #Can not implement adoUpdateStr method:No key defined! #Can not implement adoUpdateStr method:No key defined! #Can not implement adoCheckUpdateStr method:No key defined! #Can not implement adoCheckUpdateExStr method:No key defined! def getAdoRecords(self, resultCollection): '''²éѯ½á¹û´ò°ü³É¶þ½øÖÆÁ÷''' result = '' result = CommFunc.WriteDWORD(result, resultCollection.count()) for rec in resultCollection: self.readRecord(rec) result += self.getBuffer() return result #Can not implement adoQueryIndexStr method:No key defined! def adoQueryCustom(self, collection, queryDict): '''×Ô¶¨Òå²éѯ''' resultCollection = collection.find(queryDict) return self.getAdoRecords(resultCollection) def adoQueryAll(self, collection): '''²éѯËùÓÐ''' resultCollection = collection.find() return self.getAdoRecords(resultCollection) #Can not implement adoDeleteByIndexStr method:No key defined! def outputString(self): output = '''// ¸£µØ¼Ç¼±í #tagDBPyMineAreaRecord: PlayerID = %s, RecordType = %s, TagPlayerID = %s, RecordTime = %s, MineID = %s, DataLen = %s, Data = %s, ADOResult = %s, '''%( self.PlayerID, self.RecordType, self.TagPlayerID, self.RecordTime, self.MineID, self.DataLen, self.Data, self.ADOResult, ) return output def dumpString(self): output = '''%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s'''%( self.PlayerID, self.RecordType, self.TagPlayerID, self.RecordTime, self.MineID, self.DataLen, self.Data, ) return output # ¸£µØ½áËã½±Àø±í #tagDBPyMineAreaAward class tagDBPyMineAreaAward(Structure): _pack_ = 1 _fields_ = [ ('GUIDLen', ctypes.c_ubyte), ('GUID', ctypes.c_char_p), ('PlayerID', ctypes.c_ulong), ('AwardTime', ctypes.c_ulong), ('MineID', ctypes.c_ushort), ('WorkerCount', ctypes.c_ubyte), ('AreaPlayerID', ctypes.c_ulong), ('ADOResult', ctypes.c_ulong), ] def __init__(self): Structure.__init__(self) self.clear() def clear(self): self.GUIDLen = 0 self.GUID = '' self.PlayerID = 0 self.AwardTime = 0 self.MineID = 0 self.WorkerCount = 0 self.AreaPlayerID = 0 def readData(self, buf, pos = 0, length = 0): if not pos <= length: msg = error.formatMsg('error', error.ERROR_NO_148, '(pos = %s) > (length = %s)'%(pos, length)) mylog.error(msg) return -1 if len(buf) < pos + self.getLength(): msg = error.formatMsg('error', error.ERROR_NO_149, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength())) mylog.error(msg) self.clear() self.GUIDLen, pos = CommFunc.ReadBYTE(buf, pos) tmp, pos = CommFunc.ReadString(buf, pos, self.GUIDLen) self.GUID = ctypes.c_char_p(tmp) self.PlayerID, pos = CommFunc.ReadDWORD(buf, pos) self.AwardTime, pos = CommFunc.ReadDWORD(buf, pos) self.MineID, pos = CommFunc.ReadWORD(buf, pos) self.WorkerCount, pos = CommFunc.ReadBYTE(buf, pos) self.AreaPlayerID, pos = CommFunc.ReadDWORD(buf, pos) return self.getLength() def getBuffer(self): buf = '' buf = CommFunc.WriteBYTE(buf, self.GUIDLen) buf = CommFunc.WriteString(buf, self.GUIDLen, self.GUID) buf = CommFunc.WriteDWORD(buf, self.PlayerID) buf = CommFunc.WriteDWORD(buf, self.AwardTime) buf = CommFunc.WriteWORD(buf, self.MineID) buf = CommFunc.WriteBYTE(buf, self.WorkerCount) buf = CommFunc.WriteDWORD(buf, self.AreaPlayerID) return buf def getLength(self): length = 0 length += sizeof(ctypes.c_ubyte) length += self.GUIDLen length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ushort) length += sizeof(ctypes.c_ubyte) length += sizeof(ctypes.c_ulong) return length def getRecord(self): '''×éÖ¯´æ´¢¼Ç¼''' rec = {} rec[u'GUIDLen'] = self.GUIDLen rec[u'GUID'] = fix_incomingText(self.GUID) rec[u'PlayerID'] = self.PlayerID rec[u'AwardTime'] = self.AwardTime rec[u'MineID'] = self.MineID rec[u'WorkerCount'] = self.WorkerCount rec[u'AreaPlayerID'] = self.AreaPlayerID return rec def readRecord(self, rec): '''ÓÉÓÚMongoDB¶Á³öÀ´ÊÇunicode,ËùÓÐ×Ö·û´®ÐèÒª½øÐÐת»»''' self.GUIDLen = rec.get(u'GUIDLen', 0) self.GUID = fix_outgoingText(rec.get(u'GUID', u'')) self.PlayerID = rec.get(u'PlayerID', 0) self.AwardTime = rec.get(u'AwardTime', 0) self.MineID = rec.get(u'MineID', 0) self.WorkerCount = rec.get(u'WorkerCount', 0) self.AreaPlayerID = rec.get(u'AreaPlayerID', 0) #Can not implement adoLoadStr method:No key defined! #Can not implement adoInsertStr method:No key defined! #Can not implement adoUpdateStr method:No key defined! #Can not implement adoUpdateStr method:No key defined! #Can not implement adoCheckUpdateStr method:No key defined! #Can not implement adoCheckUpdateExStr method:No key defined! def getAdoRecords(self, resultCollection): '''²éѯ½á¹û´ò°ü³É¶þ½øÖÆÁ÷''' result = '' result = CommFunc.WriteDWORD(result, resultCollection.count()) for rec in resultCollection: self.readRecord(rec) result += self.getBuffer() return result #Can not implement adoQueryIndexStr method:No key defined! def adoQueryCustom(self, collection, queryDict): '''×Ô¶¨Òå²éѯ''' resultCollection = collection.find(queryDict) return self.getAdoRecords(resultCollection) def adoQueryAll(self, collection): '''²éѯËùÓÐ''' resultCollection = collection.find() return self.getAdoRecords(resultCollection) #Can not implement adoDeleteByIndexStr method:No key defined! def outputString(self): output = '''// ¸£µØ½áËã½±Àø±í #tagDBPyMineAreaAward: GUIDLen = %s, GUID = %s, PlayerID = %s, AwardTime = %s, MineID = %s, WorkerCount = %s, AreaPlayerID = %s, ADOResult = %s, '''%( self.GUIDLen, self.GUID, self.PlayerID, self.AwardTime, self.MineID, self.WorkerCount, self.AreaPlayerID, self.ADOResult, ) return output def dumpString(self): output = '''%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s'''%( self.GUIDLen, self.GUID, self.PlayerID, self.AwardTime, self.MineID, self.WorkerCount, self.AreaPlayerID, ) return output # Íæ¼Ò¼Ç¼±í #tagDBPlayerRecData class tagDBPlayerRecData(Structure): _pack_ = 1 _fields_ = [ ('PlayerID', ctypes.c_ulong), ('RecType', ctypes.c_ushort), ('Time', ctypes.c_double), ('Value1', ctypes.c_ulong), ('Value2', ctypes.c_ulong), ('Value3', ctypes.c_ulong), ('Value4', ctypes.c_ulong), ('Value5', ctypes.c_ulong), ('Value6', ctypes.c_ulong), ('Value7', ctypes.c_ulong), ('Value8', ctypes.c_ulong), ('UserDataLen', ctypes.c_ushort), ('UserData', ctypes.c_char_p), ('ADOResult', ctypes.c_ulong), ] def __init__(self): Structure.__init__(self) self.clear() def clear(self): self.PlayerID = 0 self.RecType = 0 self.Time = 0.0 self.Value1 = 0 self.Value2 = 0 self.Value3 = 0 self.Value4 = 0 self.Value5 = 0 self.Value6 = 0 self.Value7 = 0 self.Value8 = 0 self.UserDataLen = 0 self.UserData = '' def readData(self, buf, pos = 0, length = 0): if not pos <= length: msg = error.formatMsg('error', error.ERROR_NO_148, '(pos = %s) > (length = %s)'%(pos, length)) mylog.error(msg) return -1 if len(buf) < pos + self.getLength(): msg = error.formatMsg('error', error.ERROR_NO_149, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength())) mylog.error(msg) self.clear() self.PlayerID, pos = CommFunc.ReadDWORD(buf, pos) self.RecType, pos = CommFunc.ReadWORD(buf, pos) self.Time, pos = CommFunc.ReadDouble(buf, pos) self.Value1, pos = CommFunc.ReadDWORD(buf, pos) self.Value2, pos = CommFunc.ReadDWORD(buf, pos) self.Value3, pos = CommFunc.ReadDWORD(buf, pos) self.Value4, pos = CommFunc.ReadDWORD(buf, pos) self.Value5, pos = CommFunc.ReadDWORD(buf, pos) self.Value6, pos = CommFunc.ReadDWORD(buf, pos) self.Value7, pos = CommFunc.ReadDWORD(buf, pos) self.Value8, pos = CommFunc.ReadDWORD(buf, pos) self.UserDataLen, pos = CommFunc.ReadWORD(buf, pos) tmp, pos = CommFunc.ReadString(buf, pos, self.UserDataLen) self.UserData = ctypes.c_char_p(tmp) return self.getLength() def getBuffer(self): buf = '' buf = CommFunc.WriteDWORD(buf, self.PlayerID) buf = CommFunc.WriteWORD(buf, self.RecType) buf = CommFunc.WriteDouble(buf, self.Time) buf = CommFunc.WriteDWORD(buf, self.Value1) buf = CommFunc.WriteDWORD(buf, self.Value2) buf = CommFunc.WriteDWORD(buf, self.Value3) buf = CommFunc.WriteDWORD(buf, self.Value4) buf = CommFunc.WriteDWORD(buf, self.Value5) buf = CommFunc.WriteDWORD(buf, self.Value6) buf = CommFunc.WriteDWORD(buf, self.Value7) buf = CommFunc.WriteDWORD(buf, self.Value8) buf = CommFunc.WriteWORD(buf, self.UserDataLen) buf = CommFunc.WriteString(buf, self.UserDataLen, self.UserData) return buf def getLength(self): length = 0 length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ushort) length += sizeof(ctypes.c_double) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ushort) length += self.UserDataLen return length def getRecord(self): '''×éÖ¯´æ´¢¼Ç¼''' rec = {} rec[u'PlayerID'] = self.PlayerID rec[u'RecType'] = self.RecType rec[u'Time'] = self.Time rec[u'Value1'] = self.Value1 rec[u'Value2'] = self.Value2 rec[u'Value3'] = self.Value3 rec[u'Value4'] = self.Value4 rec[u'Value5'] = self.Value5 rec[u'Value6'] = self.Value6 rec[u'Value7'] = self.Value7 rec[u'Value8'] = self.Value8 rec[u'UserDataLen'] = self.UserDataLen rec[u'UserData'] = fix_incomingText(self.UserData) return rec def readRecord(self, rec): '''ÓÉÓÚMongoDB¶Á³öÀ´ÊÇunicode,ËùÓÐ×Ö·û´®ÐèÒª½øÐÐת»»''' self.PlayerID = rec.get(u'PlayerID', 0) self.RecType = rec.get(u'RecType', 0) self.Time = rec.get(u'Time', 0) self.Value1 = rec.get(u'Value1', 0) self.Value2 = rec.get(u'Value2', 0) self.Value3 = rec.get(u'Value3', 0) self.Value4 = rec.get(u'Value4', 0) self.Value5 = rec.get(u'Value5', 0) self.Value6 = rec.get(u'Value6', 0) self.Value7 = rec.get(u'Value7', 0) self.Value8 = rec.get(u'Value8', 0) self.UserDataLen = rec.get(u'UserDataLen', 0) self.UserData = fix_outgoingText(rec.get(u'UserData', u'')) #Can not implement adoLoadStr method:No key defined! def adoInsert(self, collection): '''Ö´ÐвåÈë''' trycnt = 0 rec = self.getRecord() while(True): try: collection.insert(rec, False, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_152, 'Insert failed!PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True #Can not implement adoUpdateStr method:No key defined! def adoUpdateEx(self, collection, spec): '''Ö´ÐиüÐÂ''' trycnt = 0 rec = self.getRecord() while(True): try: collection.update(spec, {'$set':rec}, False, False, True, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_154, 'Update failed!PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True #Can not implement adoCheckUpdateStr method:No key defined! #Can not implement adoCheckUpdateExStr method:No key defined! def getAdoRecords(self, resultCollection): '''²éѯ½á¹û´ò°ü³É¶þ½øÖÆÁ÷''' result = '' result = CommFunc.WriteDWORD(result, resultCollection.count()) for rec in resultCollection: self.readRecord(rec) result += self.getBuffer() return result def adoQueryIndex(self, collection): '''ÓÃË÷Òý×ֶβéÕÒ''' resultCollection = collection.find({'PlayerID':self.PlayerID}) return self.getAdoRecords(resultCollection) def adoQueryCustom(self, collection, queryDict): '''×Ô¶¨Òå²éѯ''' resultCollection = collection.find(queryDict) return self.getAdoRecords(resultCollection) def adoQueryAll(self, collection): '''²éѯËùÓÐ''' resultCollection = collection.find() return self.getAdoRecords(resultCollection) def adoDeleteByIndex(self, collection): '''¸ù¾ÝË÷Òýɾ³ý''' trycnt = 0 while(True): try: collection.remove({'PlayerID':self.PlayerID}) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:PlayerID = %s"%(self.__class__.__name__, inspect.stack()[0][3], self.PlayerID)) msg = error.formatMsg('error', error.ERROR_NO_155, 'delete failure!self.PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True def outputString(self): output = '''// Íæ¼Ò¼Ç¼±í #tagDBPlayerRecData: PlayerID = %s, RecType = %s, Time = %s, Value1 = %s, Value2 = %s, Value3 = %s, Value4 = %s, Value5 = %s, Value6 = %s, Value7 = %s, Value8 = %s, UserDataLen = %s, UserData = %s, ADOResult = %s, '''%( self.PlayerID, self.RecType, self.Time, self.Value1, self.Value2, self.Value3, self.Value4, self.Value5, self.Value6, self.Value7, self.Value8, self.UserDataLen, self.UserData, self.ADOResult, ) return output def dumpString(self): output = '''%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s'''%( self.PlayerID, self.RecType, self.Time, self.Value1, self.Value2, self.Value3, self.Value4, self.Value5, self.Value6, self.Value7, self.Value8, self.UserDataLen, self.UserData, ) return output # ¹¦ÄܶÓÎé³ÉÔ±±í #tagDBPyFuncTeamMem class tagDBPyFuncTeamMem(Structure): _pack_ = 1 _fields_ = [ ('TeamID', ctypes.c_ulong), ('PlayerID', ctypes.c_ulong), ('Value1', ctypes.c_ulong), ('Value2', ctypes.c_ulong), ('Value3', ctypes.c_ulong), ('Value4', ctypes.c_ulong), ('Value5', ctypes.c_ulong), ('ADOResult', ctypes.c_ulong), ] def __init__(self): Structure.__init__(self) self.clear() def clear(self): memset(addressof(self), 0, self.getLength()) def readData(self, buf, pos = 0, length = 0): if not pos <= length: msg = error.formatMsg('error', error.ERROR_NO_148, '(pos = %s) > (length = %s)'%(pos, length)) mylog.error(msg) return -1 if len(buf) < pos + self.getLength(): msg = error.formatMsg('error', error.ERROR_NO_149, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength())) mylog.error(msg) self.clear() self.TeamID, pos = CommFunc.ReadDWORD(buf, pos) self.PlayerID, pos = CommFunc.ReadDWORD(buf, pos) self.Value1, pos = CommFunc.ReadDWORD(buf, pos) self.Value2, pos = CommFunc.ReadDWORD(buf, pos) self.Value3, pos = CommFunc.ReadDWORD(buf, pos) self.Value4, pos = CommFunc.ReadDWORD(buf, pos) self.Value5, pos = CommFunc.ReadDWORD(buf, pos) return self.getLength() def getBuffer(self): buf = create_string_buffer(self.getLength()) memmove(addressof(buf), addressof(self), self.getLength()) return string_at(addressof(buf), self.getLength()) def getLength(self): return sizeof(tagDBPyFuncTeamMem) def getRecord(self): '''×éÖ¯´æ´¢¼Ç¼''' rec = {} rec[u'TeamID'] = self.TeamID rec[u'PlayerID'] = self.PlayerID rec[u'Value1'] = self.Value1 rec[u'Value2'] = self.Value2 rec[u'Value3'] = self.Value3 rec[u'Value4'] = self.Value4 rec[u'Value5'] = self.Value5 return rec def readRecord(self, rec): '''ÓÉÓÚMongoDB¶Á³öÀ´ÊÇunicode,ËùÓÐ×Ö·û´®ÐèÒª½øÐÐת»»''' self.TeamID = rec.get(u'TeamID', 0) self.PlayerID = rec.get(u'PlayerID', 0) self.Value1 = rec.get(u'Value1', 0) self.Value2 = rec.get(u'Value2', 0) self.Value3 = rec.get(u'Value3', 0) self.Value4 = rec.get(u'Value4', 0) self.Value5 = rec.get(u'Value5', 0) #Can not implement adoLoadStr method:No key defined! #Can not implement adoInsertStr method:No key defined! #Can not implement adoUpdateStr method:No key defined! #Can not implement adoUpdateStr method:No key defined! #Can not implement adoCheckUpdateStr method:No key defined! #Can not implement adoCheckUpdateExStr method:No key defined! def getAdoRecords(self, resultCollection): '''²éѯ½á¹û´ò°ü³É¶þ½øÖÆÁ÷''' result = '' result = CommFunc.WriteDWORD(result, resultCollection.count()) for rec in resultCollection: self.readRecord(rec) result += self.getBuffer() return result #Can not implement adoQueryIndexStr method:No key defined! def adoQueryCustom(self, collection, queryDict): '''×Ô¶¨Òå²éѯ''' resultCollection = collection.find(queryDict) return self.getAdoRecords(resultCollection) def adoQueryAll(self, collection): '''²éѯËùÓÐ''' resultCollection = collection.find() return self.getAdoRecords(resultCollection) #Can not implement adoDeleteByIndexStr method:No key defined! def outputString(self): output = '''// ¹¦ÄܶÓÎé³ÉÔ±±í #tagDBPyFuncTeamMem: TeamID = %s, PlayerID = %s, Value1 = %s, Value2 = %s, Value3 = %s, Value4 = %s, Value5 = %s, ADOResult = %s, '''%( self.TeamID, self.PlayerID, self.Value1, self.Value2, self.Value3, self.Value4, self.Value5, self.ADOResult, ) return output def dumpString(self): output = '''%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s'''%( self.TeamID, self.PlayerID, self.Value1, self.Value2, self.Value3, self.Value4, self.Value5, ) return output # ¹¦ÄܶÓÎé±í #tagDBPyFuncTeam class tagDBPyFuncTeam(Structure): _pack_ = 1 _fields_ = [ ('TeamID', ctypes.c_ulong), ('TeamName', ctypes.c_char * 33), ('ZoneID', ctypes.c_ubyte), ('FuncMapID', ctypes.c_ulong), ('FuncMapEx', ctypes.c_ulong), ('CreateTime', ctypes.c_ulong), ('CaptainID', ctypes.c_ulong), ('MinLV', ctypes.c_ushort), ('MinFightPower', ctypes.c_ulong), ('MinFightPowerEx', ctypes.c_ulong), ('ServerOnly', ctypes.c_ubyte), ('NeedCheck', ctypes.c_ubyte), ('ApplyIDLen', ctypes.c_ushort), ('ApplyIDList', ctypes.c_char_p), ('Value1', ctypes.c_ulong), ('Value2', ctypes.c_ulong), ('Value3', ctypes.c_ulong), ('Value4', ctypes.c_ulong), ('Value5', ctypes.c_ulong), ('ADOResult', ctypes.c_ulong), ] def __init__(self): Structure.__init__(self) self.clear() def clear(self): self.TeamID = 0 self.TeamName = '' self.ZoneID = 0 self.FuncMapID = 0 self.FuncMapEx = 0 self.CreateTime = 0 self.CaptainID = 0 self.MinLV = 0 self.MinFightPower = 0 self.MinFightPowerEx = 0 self.ServerOnly = 0 self.NeedCheck = 0 self.ApplyIDLen = 0 self.ApplyIDList = '' self.Value1 = 0 self.Value2 = 0 self.Value3 = 0 self.Value4 = 0 self.Value5 = 0 def readData(self, buf, pos = 0, length = 0): if not pos <= length: msg = error.formatMsg('error', error.ERROR_NO_148, '(pos = %s) > (length = %s)'%(pos, length)) mylog.error(msg) return -1 if len(buf) < pos + self.getLength(): msg = error.formatMsg('error', error.ERROR_NO_149, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength())) mylog.error(msg) self.clear() self.TeamID, pos = CommFunc.ReadDWORD(buf, pos) self.TeamName, pos = CommFunc.ReadString(buf, pos, 33) self.ZoneID, pos = CommFunc.ReadBYTE(buf, pos) self.FuncMapID, pos = CommFunc.ReadDWORD(buf, pos) self.FuncMapEx, pos = CommFunc.ReadDWORD(buf, pos) self.CreateTime, pos = CommFunc.ReadDWORD(buf, pos) self.CaptainID, pos = CommFunc.ReadDWORD(buf, pos) self.MinLV, pos = CommFunc.ReadWORD(buf, pos) self.MinFightPower, pos = CommFunc.ReadDWORD(buf, pos) self.MinFightPowerEx, pos = CommFunc.ReadDWORD(buf, pos) self.ServerOnly, pos = CommFunc.ReadBYTE(buf, pos) self.NeedCheck, pos = CommFunc.ReadBYTE(buf, pos) self.ApplyIDLen, pos = CommFunc.ReadWORD(buf, pos) tmp, pos = CommFunc.ReadString(buf, pos, self.ApplyIDLen) self.ApplyIDList = ctypes.c_char_p(tmp) self.Value1, pos = CommFunc.ReadDWORD(buf, pos) self.Value2, pos = CommFunc.ReadDWORD(buf, pos) self.Value3, pos = CommFunc.ReadDWORD(buf, pos) self.Value4, pos = CommFunc.ReadDWORD(buf, pos) self.Value5, pos = CommFunc.ReadDWORD(buf, pos) return self.getLength() def getBuffer(self): buf = '' buf = CommFunc.WriteDWORD(buf, self.TeamID) buf = CommFunc.WriteString(buf, sizeof(ctypes.c_char) * 33, self.TeamName) buf = CommFunc.WriteBYTE(buf, self.ZoneID) buf = CommFunc.WriteDWORD(buf, self.FuncMapID) buf = CommFunc.WriteDWORD(buf, self.FuncMapEx) buf = CommFunc.WriteDWORD(buf, self.CreateTime) buf = CommFunc.WriteDWORD(buf, self.CaptainID) buf = CommFunc.WriteWORD(buf, self.MinLV) buf = CommFunc.WriteDWORD(buf, self.MinFightPower) buf = CommFunc.WriteDWORD(buf, self.MinFightPowerEx) buf = CommFunc.WriteBYTE(buf, self.ServerOnly) buf = CommFunc.WriteBYTE(buf, self.NeedCheck) buf = CommFunc.WriteWORD(buf, self.ApplyIDLen) buf = CommFunc.WriteString(buf, self.ApplyIDLen, self.ApplyIDList) buf = CommFunc.WriteDWORD(buf, self.Value1) buf = CommFunc.WriteDWORD(buf, self.Value2) buf = CommFunc.WriteDWORD(buf, self.Value3) buf = CommFunc.WriteDWORD(buf, self.Value4) buf = CommFunc.WriteDWORD(buf, self.Value5) return buf def getLength(self): length = 0 length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_char) * 33 length += sizeof(ctypes.c_ubyte) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ushort) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ubyte) length += sizeof(ctypes.c_ubyte) length += sizeof(ctypes.c_ushort) length += self.ApplyIDLen length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) return length def getRecord(self): '''×éÖ¯´æ´¢¼Ç¼''' rec = {} rec[u'TeamID'] = self.TeamID rec[u'TeamName'] = fix_incomingText(self.TeamName) rec[u'ZoneID'] = self.ZoneID rec[u'FuncMapID'] = self.FuncMapID rec[u'FuncMapEx'] = self.FuncMapEx rec[u'CreateTime'] = self.CreateTime rec[u'CaptainID'] = self.CaptainID rec[u'MinLV'] = self.MinLV rec[u'MinFightPower'] = self.MinFightPower rec[u'MinFightPowerEx'] = self.MinFightPowerEx rec[u'ServerOnly'] = self.ServerOnly rec[u'NeedCheck'] = self.NeedCheck rec[u'ApplyIDLen'] = self.ApplyIDLen rec[u'ApplyIDList'] = fix_incomingText(self.ApplyIDList) rec[u'Value1'] = self.Value1 rec[u'Value2'] = self.Value2 rec[u'Value3'] = self.Value3 rec[u'Value4'] = self.Value4 rec[u'Value5'] = self.Value5 return rec def readRecord(self, rec): '''ÓÉÓÚMongoDB¶Á³öÀ´ÊÇunicode,ËùÓÐ×Ö·û´®ÐèÒª½øÐÐת»»''' self.TeamID = rec.get(u'TeamID', 0) self.TeamName = fix_outgoingText(rec.get(u'TeamName', u'')) self.ZoneID = rec.get(u'ZoneID', 0) self.FuncMapID = rec.get(u'FuncMapID', 0) self.FuncMapEx = rec.get(u'FuncMapEx', 0) self.CreateTime = rec.get(u'CreateTime', 0) self.CaptainID = rec.get(u'CaptainID', 0) self.MinLV = rec.get(u'MinLV', 0) self.MinFightPower = rec.get(u'MinFightPower', 0) self.MinFightPowerEx = rec.get(u'MinFightPowerEx', 0) self.ServerOnly = rec.get(u'ServerOnly', 0) self.NeedCheck = rec.get(u'NeedCheck', 0) self.ApplyIDLen = rec.get(u'ApplyIDLen', 0) self.ApplyIDList = fix_outgoingText(rec.get(u'ApplyIDList', u'')) self.Value1 = rec.get(u'Value1', 0) self.Value2 = rec.get(u'Value2', 0) self.Value3 = rec.get(u'Value3', 0) self.Value4 = rec.get(u'Value4', 0) self.Value5 = rec.get(u'Value5', 0) #Can not implement adoLoadStr method:No key defined! #Can not implement adoInsertStr method:No key defined! #Can not implement adoUpdateStr method:No key defined! #Can not implement adoUpdateStr method:No key defined! #Can not implement adoCheckUpdateStr method:No key defined! #Can not implement adoCheckUpdateExStr method:No key defined! def getAdoRecords(self, resultCollection): '''²éѯ½á¹û´ò°ü³É¶þ½øÖÆÁ÷''' result = '' result = CommFunc.WriteDWORD(result, resultCollection.count()) for rec in resultCollection: self.readRecord(rec) result += self.getBuffer() return result #Can not implement adoQueryIndexStr method:No key defined! def adoQueryCustom(self, collection, queryDict): '''×Ô¶¨Òå²éѯ''' resultCollection = collection.find(queryDict) return self.getAdoRecords(resultCollection) def adoQueryAll(self, collection): '''²éѯËùÓÐ''' resultCollection = collection.find() return self.getAdoRecords(resultCollection) #Can not implement adoDeleteByIndexStr method:No key defined! def outputString(self): output = '''// ¹¦ÄܶÓÎé±í #tagDBPyFuncTeam: TeamID = %s, TeamName = %s, ZoneID = %s, FuncMapID = %s, FuncMapEx = %s, CreateTime = %s, CaptainID = %s, MinLV = %s, MinFightPower = %s, MinFightPowerEx = %s, ServerOnly = %s, NeedCheck = %s, ApplyIDLen = %s, ApplyIDList = %s, Value1 = %s, Value2 = %s, Value3 = %s, Value4 = %s, Value5 = %s, ADOResult = %s, '''%( self.TeamID, self.TeamName, self.ZoneID, self.FuncMapID, self.FuncMapEx, self.CreateTime, self.CaptainID, self.MinLV, self.MinFightPower, self.MinFightPowerEx, self.ServerOnly, self.NeedCheck, self.ApplyIDLen, self.ApplyIDList, self.Value1, self.Value2, self.Value3, self.Value4, self.Value5, self.ADOResult, ) return output def dumpString(self): output = '''%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s'''%( self.TeamID, self.TeamName, self.ZoneID, self.FuncMapID, self.FuncMapEx, self.CreateTime, self.CaptainID, self.MinLV, self.MinFightPower, self.MinFightPowerEx, self.ServerOnly, self.NeedCheck, self.ApplyIDLen, self.ApplyIDList, self.Value1, self.Value2, self.Value3, self.Value4, self.Value5, ) return output #CharÊý×éÀàÐÍSet½Ó¿Ú,ʹÓøýӿڶԴËÀàÐÍÊý¾Ý¸³Öµ£¬·ÀÖ¹¸³ÖµµÄÊý¾Ý¹ý³¤±¨´í def SetTeamName(self,Str): if len(Str)<=33: self.TeamName = Str else: self.TeamName = Str[:33] # ͨÓüǼ±íР#tagDBGameRec class tagDBGameRec(Structure): _pack_ = 1 _fields_ = [ ('RecType', ctypes.c_ushort), ('RecID', ctypes.c_ulong), ('Time', ctypes.c_double), ('Value1', ctypes.c_ulong), ('Value2', ctypes.c_ulong), ('Value3', ctypes.c_ulong), ('Value4', ctypes.c_ulong), ('Value5', ctypes.c_ulong), ('Value6', ctypes.c_ulong), ('Value7', ctypes.c_ulong), ('Value8', ctypes.c_ulong), ('UserDataLen', ctypes.c_ushort), ('UserData', ctypes.c_char_p), ('ADOResult', ctypes.c_ulong), ] def __init__(self): Structure.__init__(self) self.clear() def clear(self): self.RecType = 0 self.RecID = 0 self.Time = 0.0 self.Value1 = 0 self.Value2 = 0 self.Value3 = 0 self.Value4 = 0 self.Value5 = 0 self.Value6 = 0 self.Value7 = 0 self.Value8 = 0 self.UserDataLen = 0 self.UserData = '' def readData(self, buf, pos = 0, length = 0): if not pos <= length: msg = error.formatMsg('error', error.ERROR_NO_148, '(pos = %s) > (length = %s)'%(pos, length)) mylog.error(msg) return -1 if len(buf) < pos + self.getLength(): msg = error.formatMsg('error', error.ERROR_NO_149, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength())) mylog.error(msg) self.clear() self.RecType, pos = CommFunc.ReadWORD(buf, pos) self.RecID, pos = CommFunc.ReadDWORD(buf, pos) self.Time, pos = CommFunc.ReadDouble(buf, pos) self.Value1, pos = CommFunc.ReadDWORD(buf, pos) self.Value2, pos = CommFunc.ReadDWORD(buf, pos) self.Value3, pos = CommFunc.ReadDWORD(buf, pos) self.Value4, pos = CommFunc.ReadDWORD(buf, pos) self.Value5, pos = CommFunc.ReadDWORD(buf, pos) self.Value6, pos = CommFunc.ReadDWORD(buf, pos) self.Value7, pos = CommFunc.ReadDWORD(buf, pos) self.Value8, pos = CommFunc.ReadDWORD(buf, pos) self.UserDataLen, pos = CommFunc.ReadWORD(buf, pos) tmp, pos = CommFunc.ReadString(buf, pos, self.UserDataLen) self.UserData = ctypes.c_char_p(tmp) return self.getLength() def getBuffer(self): buf = '' buf = CommFunc.WriteWORD(buf, self.RecType) buf = CommFunc.WriteDWORD(buf, self.RecID) buf = CommFunc.WriteDouble(buf, self.Time) buf = CommFunc.WriteDWORD(buf, self.Value1) buf = CommFunc.WriteDWORD(buf, self.Value2) buf = CommFunc.WriteDWORD(buf, self.Value3) buf = CommFunc.WriteDWORD(buf, self.Value4) buf = CommFunc.WriteDWORD(buf, self.Value5) buf = CommFunc.WriteDWORD(buf, self.Value6) buf = CommFunc.WriteDWORD(buf, self.Value7) buf = CommFunc.WriteDWORD(buf, self.Value8) buf = CommFunc.WriteWORD(buf, self.UserDataLen) buf = CommFunc.WriteString(buf, self.UserDataLen, self.UserData) return buf def getLength(self): length = 0 length += sizeof(ctypes.c_ushort) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_double) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ushort) length += self.UserDataLen return length def getRecord(self): '''×éÖ¯´æ´¢¼Ç¼''' rec = {} rec[u'RecType'] = self.RecType rec[u'RecID'] = self.RecID rec[u'Time'] = self.Time rec[u'Value1'] = self.Value1 rec[u'Value2'] = self.Value2 rec[u'Value3'] = self.Value3 rec[u'Value4'] = self.Value4 rec[u'Value5'] = self.Value5 rec[u'Value6'] = self.Value6 rec[u'Value7'] = self.Value7 rec[u'Value8'] = self.Value8 rec[u'UserDataLen'] = self.UserDataLen rec[u'UserData'] = fix_incomingText(self.UserData) return rec def readRecord(self, rec): '''ÓÉÓÚMongoDB¶Á³öÀ´ÊÇunicode,ËùÓÐ×Ö·û´®ÐèÒª½øÐÐת»»''' self.RecType = rec.get(u'RecType', 0) self.RecID = rec.get(u'RecID', 0) self.Time = rec.get(u'Time', 0) self.Value1 = rec.get(u'Value1', 0) self.Value2 = rec.get(u'Value2', 0) self.Value3 = rec.get(u'Value3', 0) self.Value4 = rec.get(u'Value4', 0) self.Value5 = rec.get(u'Value5', 0) self.Value6 = rec.get(u'Value6', 0) self.Value7 = rec.get(u'Value7', 0) self.Value8 = rec.get(u'Value8', 0) self.UserDataLen = rec.get(u'UserDataLen', 0) self.UserData = fix_outgoingText(rec.get(u'UserData', u'')) #Can not implement adoLoadStr method:No key defined! #Can not implement adoInsertStr method:No key defined! #Can not implement adoUpdateStr method:No key defined! #Can not implement adoUpdateStr method:No key defined! #Can not implement adoCheckUpdateStr method:No key defined! #Can not implement adoCheckUpdateExStr method:No key defined! def getAdoRecords(self, resultCollection): '''²éѯ½á¹û´ò°ü³É¶þ½øÖÆÁ÷''' result = '' result = CommFunc.WriteDWORD(result, resultCollection.count()) for rec in resultCollection: self.readRecord(rec) result += self.getBuffer() return result #Can not implement adoQueryIndexStr method:No key defined! def adoQueryCustom(self, collection, queryDict): '''×Ô¶¨Òå²éѯ''' resultCollection = collection.find(queryDict) return self.getAdoRecords(resultCollection) def adoQueryAll(self, collection): '''²éѯËùÓÐ''' resultCollection = collection.find() return self.getAdoRecords(resultCollection) #Can not implement adoDeleteByIndexStr method:No key defined! def outputString(self): output = '''// ͨÓüǼ±íР#tagDBGameRec: RecType = %s, RecID = %s, Time = %s, Value1 = %s, Value2 = %s, Value3 = %s, Value4 = %s, Value5 = %s, Value6 = %s, Value7 = %s, Value8 = %s, UserDataLen = %s, UserData = %s, ADOResult = %s, '''%( self.RecType, self.RecID, self.Time, self.Value1, self.Value2, self.Value3, self.Value4, self.Value5, self.Value6, self.Value7, self.Value8, self.UserDataLen, self.UserData, self.ADOResult, ) return output def dumpString(self): output = '''%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s'''%( self.RecType, self.RecID, self.Time, self.Value1, self.Value2, self.Value3, self.Value4, self.Value5, self.Value6, self.Value7, self.Value8, self.UserDataLen, self.UserData, ) return output # Íæ¼ÒÊý¾Ý´ò°ü±í #tagDBPlayerPackData class tagDBPlayerPackData(Structure): _pack_ = 1 _fields_ = [ ('PlayerID', ctypes.c_ulong), ('UpdTime', ctypes.c_ulong), ('PackDataSize', ctypes.c_ulong), ('PackData', ctypes.c_char_p), ('ADOResult', ctypes.c_ulong), ] def __init__(self): Structure.__init__(self) self.clear() def clear(self): self.PlayerID = 0 self.UpdTime = 0 self.PackDataSize = 0 self.PackData = '' def readData(self, buf, pos = 0, length = 0): if not pos <= length: msg = error.formatMsg('error', error.ERROR_NO_148, '(pos = %s) > (length = %s)'%(pos, length)) mylog.error(msg) return -1 if len(buf) < pos + self.getLength(): msg = error.formatMsg('error', error.ERROR_NO_149, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength())) mylog.error(msg) self.clear() self.PlayerID, pos = CommFunc.ReadDWORD(buf, pos) self.UpdTime, pos = CommFunc.ReadDWORD(buf, pos) self.PackDataSize, pos = CommFunc.ReadDWORD(buf, pos) tmp, pos = CommFunc.ReadString(buf, pos, self.PackDataSize) self.PackData = ctypes.c_char_p(tmp) return self.getLength() def getBuffer(self): buf = '' buf = CommFunc.WriteDWORD(buf, self.PlayerID) buf = CommFunc.WriteDWORD(buf, self.UpdTime) buf = CommFunc.WriteDWORD(buf, self.PackDataSize) buf = CommFunc.WriteString(buf, self.PackDataSize, self.PackData) return buf def getLength(self): length = 0 length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += self.PackDataSize return length def getRecord(self): '''×éÖ¯´æ´¢¼Ç¼''' rec = {} rec[u'PlayerID'] = self.PlayerID rec[u'UpdTime'] = self.UpdTime rec[u'PackDataSize'] = self.PackDataSize rec[u'PackData'] = fix_incomingText(self.PackData) return rec def readRecord(self, rec): '''ÓÉÓÚMongoDB¶Á³öÀ´ÊÇunicode,ËùÓÐ×Ö·û´®ÐèÒª½øÐÐת»»''' self.PlayerID = rec.get(u'PlayerID', 0) self.UpdTime = rec.get(u'UpdTime', 0) self.PackDataSize = rec.get(u'PackDataSize', 0) self.PackData = fix_outgoingText(rec.get(u'PackData', u'')) #Can not implement adoLoadStr method:No key defined! #Can not implement adoInsertStr method:No key defined! #Can not implement adoUpdateStr method:No key defined! #Can not implement adoUpdateStr method:No key defined! #Can not implement adoCheckUpdateStr method:No key defined! #Can not implement adoCheckUpdateExStr method:No key defined! def getAdoRecords(self, resultCollection): '''²éѯ½á¹û´ò°ü³É¶þ½øÖÆÁ÷''' result = '' result = CommFunc.WriteDWORD(result, resultCollection.count()) for rec in resultCollection: self.readRecord(rec) result += self.getBuffer() return result #Can not implement adoQueryIndexStr method:No key defined! def adoQueryCustom(self, collection, queryDict): '''×Ô¶¨Òå²éѯ''' resultCollection = collection.find(queryDict) return self.getAdoRecords(resultCollection) def adoQueryAll(self, collection): '''²éѯËùÓÐ''' resultCollection = collection.find() return self.getAdoRecords(resultCollection) #Can not implement adoDeleteByIndexStr method:No key defined! def outputString(self): output = '''// Íæ¼ÒÊý¾Ý´ò°ü±í #tagDBPlayerPackData: PlayerID = %s, UpdTime = %s, PackDataSize = %s, PackData = %s, ADOResult = %s, '''%( self.PlayerID, self.UpdTime, self.PackDataSize, self.PackData, self.ADOResult, ) return output def dumpString(self): output = '''%1s\t%1s\t%1s\t%1s'''%( self.PlayerID, self.UpdTime, self.PackDataSize, self.PackData, ) return output # ʼþ´¥·¢±í #tagDBEventTrig class tagDBEventTrig(Structure): _pack_ = 1 _fields_ = [ ('EventLen', ctypes.c_ulong), ('EventID', ctypes.c_char_p), ('EventValue', ctypes.c_ulong), ('ADOResult', ctypes.c_ulong), ] def __init__(self): Structure.__init__(self) self.clear() def clear(self): self.EventLen = 0 self.EventID = '' self.EventValue = 0 def readData(self, buf, pos = 0, length = 0): if not pos <= length: msg = error.formatMsg('error', error.ERROR_NO_148, '(pos = %s) > (length = %s)'%(pos, length)) mylog.error(msg) return -1 if len(buf) < pos + self.getLength(): msg = error.formatMsg('error', error.ERROR_NO_149, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength())) mylog.error(msg) self.clear() self.EventLen, pos = CommFunc.ReadDWORD(buf, pos) tmp, pos = CommFunc.ReadString(buf, pos, self.EventLen) self.EventID = ctypes.c_char_p(tmp) self.EventValue, pos = CommFunc.ReadDWORD(buf, pos) return self.getLength() def getBuffer(self): buf = '' buf = CommFunc.WriteDWORD(buf, self.EventLen) buf = CommFunc.WriteString(buf, self.EventLen, self.EventID) buf = CommFunc.WriteDWORD(buf, self.EventValue) return buf def getLength(self): length = 0 length += sizeof(ctypes.c_ulong) length += self.EventLen length += sizeof(ctypes.c_ulong) return length def getRecord(self): '''×éÖ¯´æ´¢¼Ç¼''' rec = {} rec[u'EventLen'] = self.EventLen rec[u'EventID'] = fix_incomingText(self.EventID) rec[u'EventValue'] = self.EventValue return rec def readRecord(self, rec): '''ÓÉÓÚMongoDB¶Á³öÀ´ÊÇunicode,ËùÓÐ×Ö·û´®ÐèÒª½øÐÐת»»''' self.EventLen = rec.get(u'EventLen', 0) self.EventID = fix_outgoingText(rec.get(u'EventID', u'')) self.EventValue = rec.get(u'EventValue', 0) def adoLoad(self, collection): '''ʹÓÃKEY²éÕÒ²¢¶ÁÈ¡''' resultCollection = collection.find({'EventID':fix_incomingText(self.EventID)}) if resultCollection.count() <= 0: return False #ÓÉÓÚÊÇKEY²éÕÒ£¬ËùÓÐÈç¹û´æÔÚ¾ÍÖ»ÓÐÒ»Ìõ¼Ç¼ rec = resultCollection[0] #¶ÁÈ¡Êý¾Ý self.readRecord(rec) return True def adoInsert(self, collection): '''Ö´ÐвåÈë''' trycnt = 0 rec = self.getRecord() while(True): try: collection.insert(rec, False, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_152, 'Insert failed!EventID = %s, error = %s, trycnt = %d'%(self.EventID, err, trycnt)) mylog.error(msg) return False return True def adoUpdate(self, collection): '''Ö´ÐиüÐÂ''' trycnt = 0 rec = self.getRecord() while(True): try: collection.update({'EventID':fix_incomingText(self.EventID)}, {'$set':rec}, False, False, True, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_153, 'Update failed!EventID = %s, error = %s, trycnt = %d'%(self.EventID, err, trycnt)) mylog.error(msg) return False return True def adoUpdateEx(self, collection, spec): '''Ö´ÐиüÐÂ''' trycnt = 0 rec = self.getRecord() while(True): try: collection.update(spec, {'$set':rec}, False, False, True, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_154, 'Update failed!EventID = %s, error = %s, trycnt = %d'%(self.EventID, err, trycnt)) mylog.error(msg) return False return True def adoCheckUpdate(self, collection): '''¸ù¾ÝÇé¿öÖ´ÐвåÈë»ò¸üÐÂ''' resultCollection = collection.find({'EventID':fix_incomingText(self.EventID)}) if resultCollection.count() <= 0: return self.adoInsert(collection) return self.adoUpdate(collection) def adoCheckUpdateEx(self, collection, spec): '''¸ù¾ÝÇé¿öÖ´ÐвåÈë»ò¸üÐÂ''' resultCollection = collection.find(spec) if resultCollection.count() <= 0: return self.adoInsert(collection) return self.adoUpdateEx(collection, spec) def getAdoRecords(self, resultCollection): '''²éѯ½á¹û´ò°ü³É¶þ½øÖÆÁ÷''' result = '' result = CommFunc.WriteDWORD(result, resultCollection.count()) for rec in resultCollection: self.readRecord(rec) result += self.getBuffer() return result def adoQueryIndex(self, collection): '''ÓÃË÷Òý×ֶβéÕÒ''' resultCollection = collection.find({'EventID':fix_incomingText(self.EventID)}) return self.getAdoRecords(resultCollection) def adoQueryCustom(self, collection, queryDict): '''×Ô¶¨Òå²éѯ''' resultCollection = collection.find(queryDict) return self.getAdoRecords(resultCollection) def adoQueryAll(self, collection): '''²éѯËùÓÐ''' resultCollection = collection.find() return self.getAdoRecords(resultCollection) def adoDeleteByIndex(self, collection): '''¸ù¾ÝË÷Òýɾ³ý''' trycnt = 0 while(True): try: collection.remove({'EventID':fix_incomingText(self.EventID)}) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:EventID = %s"%(self.__class__.__name__, inspect.stack()[0][3], self.EventID)) msg = error.formatMsg('error', error.ERROR_NO_155, 'delete failure!self.EventID = %s, error = %s, trycnt = %d'%(self.EventID, err, trycnt)) mylog.error(msg) return False return True def outputString(self): output = '''// ʼþ´¥·¢±í #tagDBEventTrig: EventLen = %s, EventID = %s, EventValue = %s, ADOResult = %s, '''%( self.EventLen, self.EventID, self.EventValue, self.ADOResult, ) return output def dumpString(self): output = '''%1s\t%1s\t%1s'''%( self.EventLen, self.EventID, self.EventValue, ) return output # Íæ¼Ò²é¿´»º´æ±í #tagDBPlayerViewCache class tagDBPlayerViewCache(Structure): _pack_ = 1 _fields_ = [ ('PlayerID', ctypes.c_ulong), ('AccID', ctypes.c_char * 65), ('PlayerName', ctypes.c_char * 33), ('LV', ctypes.c_int), ('Job', ctypes.c_int), ('RealmLV', ctypes.c_ubyte), ('Face', ctypes.c_int), ('FacePic', ctypes.c_int), ('FamilyID', ctypes.c_ulong), ('FamilyName', ctypes.c_char * 33), ('FamilyEmblemID', ctypes.c_ushort), ('TitleID', ctypes.c_ulong), ('FightPower', ctypes.c_ulong), ('FightPowerEx', ctypes.c_ulong), ('ServerID', ctypes.c_ulong), ('OffTime', ctypes.c_ulong), ('PlusDataSize', ctypes.c_ulong), ('PlusData', ctypes.c_char_p), ('ADOResult', ctypes.c_ulong), ] def __init__(self): Structure.__init__(self) self.clear() def clear(self): self.PlayerID = 0 self.AccID = '' self.PlayerName = '' self.LV = 0 self.Job = 0 self.RealmLV = 0 self.Face = 0 self.FacePic = 0 self.FamilyID = 0 self.FamilyName = '' self.FamilyEmblemID = 0 self.TitleID = 0 self.FightPower = 0 self.FightPowerEx = 0 self.ServerID = 0 self.OffTime = 0 self.PlusDataSize = 0 self.PlusData = '' def readData(self, buf, pos = 0, length = 0): if not pos <= length: msg = error.formatMsg('error', error.ERROR_NO_148, '(pos = %s) > (length = %s)'%(pos, length)) mylog.error(msg) return -1 if len(buf) < pos + self.getLength(): msg = error.formatMsg('error', error.ERROR_NO_149, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength())) mylog.error(msg) self.clear() self.PlayerID, pos = CommFunc.ReadDWORD(buf, pos) self.AccID, pos = CommFunc.ReadString(buf, pos, 65) self.PlayerName, pos = CommFunc.ReadString(buf, pos, 33) self.LV, pos = CommFunc.ReadDWORD(buf, pos) self.Job, pos = CommFunc.ReadDWORD(buf, pos) self.RealmLV, pos = CommFunc.ReadBYTE(buf, pos) self.Face, pos = CommFunc.ReadDWORD(buf, pos) self.FacePic, pos = CommFunc.ReadDWORD(buf, pos) self.FamilyID, pos = CommFunc.ReadDWORD(buf, pos) self.FamilyName, pos = CommFunc.ReadString(buf, pos, 33) self.FamilyEmblemID, pos = CommFunc.ReadWORD(buf, pos) self.TitleID, pos = CommFunc.ReadDWORD(buf, pos) self.FightPower, pos = CommFunc.ReadDWORD(buf, pos) self.FightPowerEx, pos = CommFunc.ReadDWORD(buf, pos) self.ServerID, pos = CommFunc.ReadDWORD(buf, pos) self.OffTime, pos = CommFunc.ReadDWORD(buf, pos) self.PlusDataSize, pos = CommFunc.ReadDWORD(buf, pos) tmp, pos = CommFunc.ReadString(buf, pos, self.PlusDataSize) self.PlusData = ctypes.c_char_p(tmp) return self.getLength() def getBuffer(self): buf = '' buf = CommFunc.WriteDWORD(buf, self.PlayerID) buf = CommFunc.WriteString(buf, sizeof(ctypes.c_char) * 65, self.AccID) buf = CommFunc.WriteString(buf, sizeof(ctypes.c_char) * 33, self.PlayerName) buf = CommFunc.WriteDWORD(buf, self.LV) buf = CommFunc.WriteDWORD(buf, self.Job) buf = CommFunc.WriteBYTE(buf, self.RealmLV) buf = CommFunc.WriteDWORD(buf, self.Face) buf = CommFunc.WriteDWORD(buf, self.FacePic) buf = CommFunc.WriteDWORD(buf, self.FamilyID) buf = CommFunc.WriteString(buf, sizeof(ctypes.c_char) * 33, self.FamilyName) buf = CommFunc.WriteWORD(buf, self.FamilyEmblemID) buf = CommFunc.WriteDWORD(buf, self.TitleID) buf = CommFunc.WriteDWORD(buf, self.FightPower) buf = CommFunc.WriteDWORD(buf, self.FightPowerEx) buf = CommFunc.WriteDWORD(buf, self.ServerID) buf = CommFunc.WriteDWORD(buf, self.OffTime) buf = CommFunc.WriteDWORD(buf, self.PlusDataSize) buf = CommFunc.WriteString(buf, self.PlusDataSize, self.PlusData) return buf def getLength(self): length = 0 length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_char) * 65 length += sizeof(ctypes.c_char) * 33 length += sizeof(ctypes.c_int) length += sizeof(ctypes.c_int) length += sizeof(ctypes.c_ubyte) length += sizeof(ctypes.c_int) length += sizeof(ctypes.c_int) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_char) * 33 length += sizeof(ctypes.c_ushort) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += self.PlusDataSize return length def getRecord(self): '''×éÖ¯´æ´¢¼Ç¼''' rec = {} rec[u'PlayerID'] = self.PlayerID rec[u'AccID'] = fix_incomingText(self.AccID) rec[u'PlayerName'] = fix_incomingText(self.PlayerName) rec[u'LV'] = self.LV rec[u'Job'] = self.Job rec[u'RealmLV'] = self.RealmLV rec[u'Face'] = self.Face rec[u'FacePic'] = self.FacePic rec[u'FamilyID'] = self.FamilyID rec[u'FamilyName'] = fix_incomingText(self.FamilyName) rec[u'FamilyEmblemID'] = self.FamilyEmblemID rec[u'TitleID'] = self.TitleID rec[u'FightPower'] = self.FightPower rec[u'FightPowerEx'] = self.FightPowerEx rec[u'ServerID'] = self.ServerID rec[u'OffTime'] = self.OffTime rec[u'PlusDataSize'] = self.PlusDataSize rec[u'PlusData'] = fix_incomingText(self.PlusData) return rec def readRecord(self, rec): '''ÓÉÓÚMongoDB¶Á³öÀ´ÊÇunicode,ËùÓÐ×Ö·û´®ÐèÒª½øÐÐת»»''' self.PlayerID = rec.get(u'PlayerID', 0) self.AccID = fix_outgoingText(rec.get(u'AccID', u'')) self.PlayerName = fix_outgoingText(rec.get(u'PlayerName', u'')) self.LV = rec.get(u'LV', 0) self.Job = rec.get(u'Job', 0) self.RealmLV = rec.get(u'RealmLV', 0) self.Face = rec.get(u'Face', 0) self.FacePic = rec.get(u'FacePic', 0) self.FamilyID = rec.get(u'FamilyID', 0) self.FamilyName = fix_outgoingText(rec.get(u'FamilyName', u'')) self.FamilyEmblemID = rec.get(u'FamilyEmblemID', 0) self.TitleID = rec.get(u'TitleID', 0) self.FightPower = rec.get(u'FightPower', 0) self.FightPowerEx = rec.get(u'FightPowerEx', 0) self.ServerID = rec.get(u'ServerID', 0) self.OffTime = rec.get(u'OffTime', 0) self.PlusDataSize = rec.get(u'PlusDataSize', 0) self.PlusData = fix_outgoingText(rec.get(u'PlusData', u'')) #Can not implement adoLoadStr method:No key defined! def adoInsert(self, collection): '''Ö´ÐвåÈë''' trycnt = 0 rec = self.getRecord() while(True): try: collection.insert(rec, False, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_152, 'Insert failed!PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True #Can not implement adoUpdateStr method:No key defined! def adoUpdateEx(self, collection, spec): '''Ö´ÐиüÐÂ''' trycnt = 0 rec = self.getRecord() while(True): try: collection.update(spec, {'$set':rec}, False, False, True, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_154, 'Update failed!PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True #Can not implement adoCheckUpdateStr method:No key defined! #Can not implement adoCheckUpdateExStr method:No key defined! def getAdoRecords(self, resultCollection): '''²éѯ½á¹û´ò°ü³É¶þ½øÖÆÁ÷''' result = '' result = CommFunc.WriteDWORD(result, resultCollection.count()) for rec in resultCollection: self.readRecord(rec) result += self.getBuffer() return result def adoQueryIndex(self, collection): '''ÓÃË÷Òý×ֶβéÕÒ''' resultCollection = collection.find({'PlayerID':self.PlayerID}) return self.getAdoRecords(resultCollection) def adoQueryCustom(self, collection, queryDict): '''×Ô¶¨Òå²éѯ''' resultCollection = collection.find(queryDict) return self.getAdoRecords(resultCollection) def adoQueryAll(self, collection): '''²éѯËùÓÐ''' resultCollection = collection.find() return self.getAdoRecords(resultCollection) def adoDeleteByIndex(self, collection): '''¸ù¾ÝË÷Òýɾ³ý''' trycnt = 0 while(True): try: collection.remove({'PlayerID':self.PlayerID}) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:PlayerID = %s"%(self.__class__.__name__, inspect.stack()[0][3], self.PlayerID)) msg = error.formatMsg('error', error.ERROR_NO_155, 'delete failure!self.PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True def outputString(self): output = '''// Íæ¼Ò²é¿´»º´æ±í #tagDBPlayerViewCache: PlayerID = %s, AccID = %s, PlayerName = %s, LV = %s, Job = %s, RealmLV = %s, Face = %s, FacePic = %s, FamilyID = %s, FamilyName = %s, FamilyEmblemID = %s, TitleID = %s, FightPower = %s, FightPowerEx = %s, ServerID = %s, OffTime = %s, PlusDataSize = %s, PlusData = %s, ADOResult = %s, '''%( self.PlayerID, self.AccID, self.PlayerName, self.LV, self.Job, self.RealmLV, self.Face, self.FacePic, self.FamilyID, self.FamilyName, self.FamilyEmblemID, self.TitleID, self.FightPower, self.FightPowerEx, self.ServerID, self.OffTime, self.PlusDataSize, self.PlusData, self.ADOResult, ) return output def dumpString(self): output = '''%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s'''%( self.PlayerID, self.AccID, self.PlayerName, self.LV, self.Job, self.RealmLV, self.Face, self.FacePic, self.FamilyID, self.FamilyName, self.FamilyEmblemID, self.TitleID, self.FightPower, self.FightPowerEx, self.ServerID, self.OffTime, self.PlusDataSize, self.PlusData, ) return output #CharÊý×éÀàÐÍSet½Ó¿Ú,ʹÓøýӿڶԴËÀàÐÍÊý¾Ý¸³Öµ£¬·ÀÖ¹¸³ÖµµÄÊý¾Ý¹ý³¤±¨´í def SetAccID(self,Str): if len(Str)<=65: self.AccID = Str else: self.AccID = Str[:65] def SetPlayerName(self,Str): if len(Str)<=33: self.PlayerName = Str else: self.PlayerName = Str[:33] def SetFamilyName(self,Str): if len(Str)<=33: self.FamilyName = Str else: self.FamilyName = Str[:33] # ÅÅÐаñ±í #tagDBBillboard class tagDBBillboard(Structure): _pack_ = 1 _fields_ = [ ('GroupValue1', ctypes.c_ulong), ('GroupValue2', ctypes.c_ulong), ('BillboardType', ctypes.c_ubyte), ('ID', ctypes.c_ulong), ('ID2', ctypes.c_ulong), ('Name1', ctypes.c_char * 33), ('Name2', ctypes.c_char * 65), ('Type2', ctypes.c_ubyte), ('Value1', ctypes.c_ulong), ('Value2', ctypes.c_ulong), ('Value3', ctypes.c_ulong), ('Value4', ctypes.c_ulong), ('Value5', ctypes.c_ulong), ('Value6', ctypes.c_ulong), ('Value7', ctypes.c_ulong), ('Value8', ctypes.c_ulong), ('CmpValue', ctypes.c_ulong), ('CmpValue2', ctypes.c_ulong), ('CmpValue3', ctypes.c_ulong), ('DataLen', ctypes.c_ushort), ('UserData', ctypes.c_char_p), ('ADOResult', ctypes.c_ulong), ] def __init__(self): Structure.__init__(self) self.clear() def clear(self): self.GroupValue1 = 0 self.GroupValue2 = 0 self.BillboardType = 0 self.ID = 0 self.ID2 = 0 self.Name1 = '' self.Name2 = '' self.Type2 = 0 self.Value1 = 0 self.Value2 = 0 self.Value3 = 0 self.Value4 = 0 self.Value5 = 0 self.Value6 = 0 self.Value7 = 0 self.Value8 = 0 self.CmpValue = 0 self.CmpValue2 = 0 self.CmpValue3 = 0 self.DataLen = 0 self.UserData = '' def readData(self, buf, pos = 0, length = 0): if not pos <= length: msg = error.formatMsg('error', error.ERROR_NO_148, '(pos = %s) > (length = %s)'%(pos, length)) mylog.error(msg) return -1 if len(buf) < pos + self.getLength(): msg = error.formatMsg('error', error.ERROR_NO_149, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength())) mylog.error(msg) self.clear() self.GroupValue1, pos = CommFunc.ReadDWORD(buf, pos) self.GroupValue2, pos = CommFunc.ReadDWORD(buf, pos) self.BillboardType, pos = CommFunc.ReadBYTE(buf, pos) self.ID, pos = CommFunc.ReadDWORD(buf, pos) self.ID2, pos = CommFunc.ReadDWORD(buf, pos) self.Name1, pos = CommFunc.ReadString(buf, pos, 33) self.Name2, pos = CommFunc.ReadString(buf, pos, 65) self.Type2, pos = CommFunc.ReadBYTE(buf, pos) self.Value1, pos = CommFunc.ReadDWORD(buf, pos) self.Value2, pos = CommFunc.ReadDWORD(buf, pos) self.Value3, pos = CommFunc.ReadDWORD(buf, pos) self.Value4, pos = CommFunc.ReadDWORD(buf, pos) self.Value5, pos = CommFunc.ReadDWORD(buf, pos) self.Value6, pos = CommFunc.ReadDWORD(buf, pos) self.Value7, pos = CommFunc.ReadDWORD(buf, pos) self.Value8, pos = CommFunc.ReadDWORD(buf, pos) self.CmpValue, pos = CommFunc.ReadDWORD(buf, pos) self.CmpValue2, pos = CommFunc.ReadDWORD(buf, pos) self.CmpValue3, pos = CommFunc.ReadDWORD(buf, pos) self.DataLen, pos = CommFunc.ReadWORD(buf, pos) tmp, pos = CommFunc.ReadString(buf, pos, self.DataLen) self.UserData = ctypes.c_char_p(tmp) return self.getLength() def getBuffer(self): buf = '' buf = CommFunc.WriteDWORD(buf, self.GroupValue1) buf = CommFunc.WriteDWORD(buf, self.GroupValue2) buf = CommFunc.WriteBYTE(buf, self.BillboardType) buf = CommFunc.WriteDWORD(buf, self.ID) buf = CommFunc.WriteDWORD(buf, self.ID2) buf = CommFunc.WriteString(buf, sizeof(ctypes.c_char) * 33, self.Name1) buf = CommFunc.WriteString(buf, sizeof(ctypes.c_char) * 65, self.Name2) buf = CommFunc.WriteBYTE(buf, self.Type2) buf = CommFunc.WriteDWORD(buf, self.Value1) buf = CommFunc.WriteDWORD(buf, self.Value2) buf = CommFunc.WriteDWORD(buf, self.Value3) buf = CommFunc.WriteDWORD(buf, self.Value4) buf = CommFunc.WriteDWORD(buf, self.Value5) buf = CommFunc.WriteDWORD(buf, self.Value6) buf = CommFunc.WriteDWORD(buf, self.Value7) buf = CommFunc.WriteDWORD(buf, self.Value8) buf = CommFunc.WriteDWORD(buf, self.CmpValue) buf = CommFunc.WriteDWORD(buf, self.CmpValue2) buf = CommFunc.WriteDWORD(buf, self.CmpValue3) buf = CommFunc.WriteWORD(buf, self.DataLen) buf = CommFunc.WriteString(buf, self.DataLen, self.UserData) return buf def getLength(self): length = 0 length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ubyte) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_char) * 33 length += sizeof(ctypes.c_char) * 65 length += sizeof(ctypes.c_ubyte) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ushort) length += self.DataLen return length def getRecord(self): '''×éÖ¯´æ´¢¼Ç¼''' rec = {} rec[u'GroupValue1'] = self.GroupValue1 rec[u'GroupValue2'] = self.GroupValue2 rec[u'BillboardType'] = self.BillboardType rec[u'ID'] = self.ID rec[u'ID2'] = self.ID2 rec[u'Name1'] = fix_incomingText(self.Name1) rec[u'Name2'] = fix_incomingText(self.Name2) rec[u'Type2'] = self.Type2 rec[u'Value1'] = self.Value1 rec[u'Value2'] = self.Value2 rec[u'Value3'] = self.Value3 rec[u'Value4'] = self.Value4 rec[u'Value5'] = self.Value5 rec[u'Value6'] = self.Value6 rec[u'Value7'] = self.Value7 rec[u'Value8'] = self.Value8 rec[u'CmpValue'] = self.CmpValue rec[u'CmpValue2'] = self.CmpValue2 rec[u'CmpValue3'] = self.CmpValue3 rec[u'DataLen'] = self.DataLen rec[u'UserData'] = fix_incomingText(self.UserData) return rec def readRecord(self, rec): '''ÓÉÓÚMongoDB¶Á³öÀ´ÊÇunicode,ËùÓÐ×Ö·û´®ÐèÒª½øÐÐת»»''' self.GroupValue1 = rec.get(u'GroupValue1', 0) self.GroupValue2 = rec.get(u'GroupValue2', 0) self.BillboardType = rec.get(u'BillboardType', 0) self.ID = rec.get(u'ID', 0) self.ID2 = rec.get(u'ID2', 0) self.Name1 = fix_outgoingText(rec.get(u'Name1', u'')) self.Name2 = fix_outgoingText(rec.get(u'Name2', u'')) self.Type2 = rec.get(u'Type2', 0) self.Value1 = rec.get(u'Value1', 0) self.Value2 = rec.get(u'Value2', 0) self.Value3 = rec.get(u'Value3', 0) self.Value4 = rec.get(u'Value4', 0) self.Value5 = rec.get(u'Value5', 0) self.Value6 = rec.get(u'Value6', 0) self.Value7 = rec.get(u'Value7', 0) self.Value8 = rec.get(u'Value8', 0) self.CmpValue = rec.get(u'CmpValue', 0) self.CmpValue2 = rec.get(u'CmpValue2', 0) self.CmpValue3 = rec.get(u'CmpValue3', 0) self.DataLen = rec.get(u'DataLen', 0) self.UserData = fix_outgoingText(rec.get(u'UserData', u'')) #Can not implement adoLoadStr method:No key defined! #Can not implement adoInsertStr method:No key defined! #Can not implement adoUpdateStr method:No key defined! #Can not implement adoUpdateStr method:No key defined! #Can not implement adoCheckUpdateStr method:No key defined! #Can not implement adoCheckUpdateExStr method:No key defined! def getAdoRecords(self, resultCollection): '''²éѯ½á¹û´ò°ü³É¶þ½øÖÆÁ÷''' result = '' result = CommFunc.WriteDWORD(result, resultCollection.count()) for rec in resultCollection: self.readRecord(rec) result += self.getBuffer() return result #Can not implement adoQueryIndexStr method:No key defined! def adoQueryCustom(self, collection, queryDict): '''×Ô¶¨Òå²éѯ''' resultCollection = collection.find(queryDict) return self.getAdoRecords(resultCollection) def adoQueryAll(self, collection): '''²éѯËùÓÐ''' resultCollection = collection.find() return self.getAdoRecords(resultCollection) #Can not implement adoDeleteByIndexStr method:No key defined! def outputString(self): output = '''// ÅÅÐаñ±í #tagDBBillboard: GroupValue1 = %s, GroupValue2 = %s, BillboardType = %s, ID = %s, ID2 = %s, Name1 = %s, Name2 = %s, Type2 = %s, Value1 = %s, Value2 = %s, Value3 = %s, Value4 = %s, Value5 = %s, Value6 = %s, Value7 = %s, Value8 = %s, CmpValue = %s, CmpValue2 = %s, CmpValue3 = %s, DataLen = %s, UserData = %s, ADOResult = %s, '''%( self.GroupValue1, self.GroupValue2, self.BillboardType, self.ID, self.ID2, self.Name1, self.Name2, self.Type2, self.Value1, self.Value2, self.Value3, self.Value4, self.Value5, self.Value6, self.Value7, self.Value8, self.CmpValue, self.CmpValue2, self.CmpValue3, self.DataLen, self.UserData, self.ADOResult, ) return output def dumpString(self): output = '''%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s'''%( self.GroupValue1, self.GroupValue2, self.BillboardType, self.ID, self.ID2, self.Name1, self.Name2, self.Type2, self.Value1, self.Value2, self.Value3, self.Value4, self.Value5, self.Value6, self.Value7, self.Value8, self.CmpValue, self.CmpValue2, self.CmpValue3, self.DataLen, self.UserData, ) return output #CharÊý×éÀàÐÍSet½Ó¿Ú,ʹÓøýӿڶԴËÀàÐÍÊý¾Ý¸³Öµ£¬·ÀÖ¹¸³ÖµµÄÊý¾Ý¹ý³¤±¨´í def SetName1(self,Str): if len(Str)<=33: self.Name1 = Str else: self.Name1 = Str[:33] def SetName2(self,Str): if len(Str)<=65: self.Name2 = Str else: self.Name2 = Str[:65] # Óʼþ¸öÈËÓʼþ±í #tagDBMailPersonal class tagDBMailPersonal(Structure): _pack_ = 1 _fields_ = [ ('PlayerID', ctypes.c_ulong), ('GUID', ctypes.c_char * 36), ('Type', ctypes.c_ubyte), ('CreateTime', ctypes.c_char * 30), ('LimitDays', ctypes.c_ubyte), ('TitleLen', ctypes.c_ubyte), ('Title', ctypes.c_char_p), ('TextLen', ctypes.c_ushort), ('Text', ctypes.c_char_p), ('MailState', ctypes.c_ubyte), ('ADOResult', ctypes.c_ulong), ] def __init__(self): Structure.__init__(self) self.clear() def clear(self): self.PlayerID = 0 self.GUID = '' self.Type = 0 self.CreateTime = '' self.LimitDays = 0 self.TitleLen = 0 self.Title = '' self.TextLen = 0 self.Text = '' self.MailState = 0 def readData(self, buf, pos = 0, length = 0): if not pos <= length: msg = error.formatMsg('error', error.ERROR_NO_148, '(pos = %s) > (length = %s)'%(pos, length)) mylog.error(msg) return -1 if len(buf) < pos + self.getLength(): msg = error.formatMsg('error', error.ERROR_NO_149, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength())) mylog.error(msg) self.clear() self.PlayerID, pos = CommFunc.ReadDWORD(buf, pos) self.GUID, pos = CommFunc.ReadString(buf, pos, 36) self.Type, pos = CommFunc.ReadBYTE(buf, pos) self.CreateTime, pos = CommFunc.ReadString(buf, pos, 30) self.LimitDays, pos = CommFunc.ReadBYTE(buf, pos) self.TitleLen, pos = CommFunc.ReadBYTE(buf, pos) tmp, pos = CommFunc.ReadString(buf, pos, self.TitleLen) self.Title = ctypes.c_char_p(tmp) self.TextLen, pos = CommFunc.ReadWORD(buf, pos) tmp, pos = CommFunc.ReadString(buf, pos, self.TextLen) self.Text = ctypes.c_char_p(tmp) self.MailState, pos = CommFunc.ReadBYTE(buf, pos) return self.getLength() def getBuffer(self): buf = '' buf = CommFunc.WriteDWORD(buf, self.PlayerID) buf = CommFunc.WriteString(buf, sizeof(ctypes.c_char) * 36, self.GUID) buf = CommFunc.WriteBYTE(buf, self.Type) buf = CommFunc.WriteString(buf, sizeof(ctypes.c_char) * 30, self.CreateTime) buf = CommFunc.WriteBYTE(buf, self.LimitDays) buf = CommFunc.WriteBYTE(buf, self.TitleLen) buf = CommFunc.WriteString(buf, self.TitleLen, self.Title) buf = CommFunc.WriteWORD(buf, self.TextLen) buf = CommFunc.WriteString(buf, self.TextLen, self.Text) buf = CommFunc.WriteBYTE(buf, self.MailState) return buf def getLength(self): length = 0 length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_char) * 36 length += sizeof(ctypes.c_ubyte) length += sizeof(ctypes.c_char) * 30 length += sizeof(ctypes.c_ubyte) length += sizeof(ctypes.c_ubyte) length += self.TitleLen length += sizeof(ctypes.c_ushort) length += self.TextLen length += sizeof(ctypes.c_ubyte) return length def getRecord(self): '''×éÖ¯´æ´¢¼Ç¼''' rec = {} rec[u'PlayerID'] = self.PlayerID rec[u'GUID'] = fix_incomingText(self.GUID) rec[u'Type'] = self.Type rec[u'CreateTime'] = fix_incomingText(self.CreateTime) rec[u'LimitDays'] = self.LimitDays rec[u'TitleLen'] = self.TitleLen rec[u'Title'] = fix_incomingText(self.Title) rec[u'TextLen'] = self.TextLen rec[u'Text'] = fix_incomingText(self.Text) rec[u'MailState'] = self.MailState return rec def readRecord(self, rec): '''ÓÉÓÚMongoDB¶Á³öÀ´ÊÇunicode,ËùÓÐ×Ö·û´®ÐèÒª½øÐÐת»»''' self.PlayerID = rec.get(u'PlayerID', 0) self.GUID = fix_outgoingText(rec.get(u'GUID', u'')) self.Type = rec.get(u'Type', 0) self.CreateTime = fix_outgoingText(rec.get(u'CreateTime', u'')) self.LimitDays = rec.get(u'LimitDays', 0) self.TitleLen = rec.get(u'TitleLen', 0) self.Title = fix_outgoingText(rec.get(u'Title', u'')) self.TextLen = rec.get(u'TextLen', 0) self.Text = fix_outgoingText(rec.get(u'Text', u'')) self.MailState = rec.get(u'MailState', 0) #Can not implement adoLoadStr method:No key defined! #Can not implement adoInsertStr method:No key defined! #Can not implement adoUpdateStr method:No key defined! #Can not implement adoUpdateStr method:No key defined! #Can not implement adoCheckUpdateStr method:No key defined! #Can not implement adoCheckUpdateExStr method:No key defined! def getAdoRecords(self, resultCollection): '''²éѯ½á¹û´ò°ü³É¶þ½øÖÆÁ÷''' result = '' result = CommFunc.WriteDWORD(result, resultCollection.count()) for rec in resultCollection: self.readRecord(rec) result += self.getBuffer() return result #Can not implement adoQueryIndexStr method:No key defined! def adoQueryCustom(self, collection, queryDict): '''×Ô¶¨Òå²éѯ''' resultCollection = collection.find(queryDict) return self.getAdoRecords(resultCollection) def adoQueryAll(self, collection): '''²éѯËùÓÐ''' resultCollection = collection.find() return self.getAdoRecords(resultCollection) #Can not implement adoDeleteByIndexStr method:No key defined! def outputString(self): output = '''// Óʼþ¸öÈËÓʼþ±í #tagDBMailPersonal: PlayerID = %s, GUID = %s, Type = %s, CreateTime = %s, LimitDays = %s, TitleLen = %s, Title = %s, TextLen = %s, Text = %s, MailState = %s, ADOResult = %s, '''%( self.PlayerID, self.GUID, self.Type, self.CreateTime, self.LimitDays, self.TitleLen, self.Title, self.TextLen, self.Text, self.MailState, self.ADOResult, ) return output def dumpString(self): output = '''%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s'''%( self.PlayerID, self.GUID, self.Type, self.CreateTime, self.LimitDays, self.TitleLen, self.Title, self.TextLen, self.Text, self.MailState, ) return output #CharÊý×éÀàÐÍSet½Ó¿Ú,ʹÓøýӿڶԴËÀàÐÍÊý¾Ý¸³Öµ£¬·ÀÖ¹¸³ÖµµÄÊý¾Ý¹ý³¤±¨´í def SetGUID(self,Str): if len(Str)<=36: self.GUID = Str else: self.GUID = Str[:36] def SetCreateTime(self,Str): if len(Str)<=30: self.CreateTime = Str else: self.CreateTime = Str[:30] # ÓʼþÈ«·þÓʼþ±í #tagDBMailServer class tagDBMailServer(Structure): _pack_ = 1 _fields_ = [ ('GUID', ctypes.c_char * 36), ('Type', ctypes.c_ubyte), ('CreateTime', ctypes.c_char * 30), ('LimitDays', ctypes.c_ubyte), ('TitleLen', ctypes.c_ubyte), ('Title', ctypes.c_char_p), ('TextLen', ctypes.c_ushort), ('Text', ctypes.c_char_p), ('LimitLV', ctypes.c_ushort), ('LimitLVType', ctypes.c_ubyte), ('CheckState', ctypes.c_ubyte), ('ADOResult', ctypes.c_ulong), ] def __init__(self): Structure.__init__(self) self.clear() def clear(self): self.GUID = '' self.Type = 0 self.CreateTime = '' self.LimitDays = 0 self.TitleLen = 0 self.Title = '' self.TextLen = 0 self.Text = '' self.LimitLV = 0 self.LimitLVType = 0 self.CheckState = 0 def readData(self, buf, pos = 0, length = 0): if not pos <= length: msg = error.formatMsg('error', error.ERROR_NO_148, '(pos = %s) > (length = %s)'%(pos, length)) mylog.error(msg) return -1 if len(buf) < pos + self.getLength(): msg = error.formatMsg('error', error.ERROR_NO_149, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength())) mylog.error(msg) self.clear() self.GUID, pos = CommFunc.ReadString(buf, pos, 36) self.Type, pos = CommFunc.ReadBYTE(buf, pos) self.CreateTime, pos = CommFunc.ReadString(buf, pos, 30) self.LimitDays, pos = CommFunc.ReadBYTE(buf, pos) self.TitleLen, pos = CommFunc.ReadBYTE(buf, pos) tmp, pos = CommFunc.ReadString(buf, pos, self.TitleLen) self.Title = ctypes.c_char_p(tmp) self.TextLen, pos = CommFunc.ReadWORD(buf, pos) tmp, pos = CommFunc.ReadString(buf, pos, self.TextLen) self.Text = ctypes.c_char_p(tmp) self.LimitLV, pos = CommFunc.ReadWORD(buf, pos) self.LimitLVType, pos = CommFunc.ReadBYTE(buf, pos) self.CheckState, pos = CommFunc.ReadBYTE(buf, pos) return self.getLength() def getBuffer(self): buf = '' buf = CommFunc.WriteString(buf, sizeof(ctypes.c_char) * 36, self.GUID) buf = CommFunc.WriteBYTE(buf, self.Type) buf = CommFunc.WriteString(buf, sizeof(ctypes.c_char) * 30, self.CreateTime) buf = CommFunc.WriteBYTE(buf, self.LimitDays) buf = CommFunc.WriteBYTE(buf, self.TitleLen) buf = CommFunc.WriteString(buf, self.TitleLen, self.Title) buf = CommFunc.WriteWORD(buf, self.TextLen) buf = CommFunc.WriteString(buf, self.TextLen, self.Text) buf = CommFunc.WriteWORD(buf, self.LimitLV) buf = CommFunc.WriteBYTE(buf, self.LimitLVType) buf = CommFunc.WriteBYTE(buf, self.CheckState) return buf def getLength(self): length = 0 length += sizeof(ctypes.c_char) * 36 length += sizeof(ctypes.c_ubyte) length += sizeof(ctypes.c_char) * 30 length += sizeof(ctypes.c_ubyte) length += sizeof(ctypes.c_ubyte) length += self.TitleLen length += sizeof(ctypes.c_ushort) length += self.TextLen length += sizeof(ctypes.c_ushort) length += sizeof(ctypes.c_ubyte) length += sizeof(ctypes.c_ubyte) return length def getRecord(self): '''×éÖ¯´æ´¢¼Ç¼''' rec = {} rec[u'GUID'] = fix_incomingText(self.GUID) rec[u'Type'] = self.Type rec[u'CreateTime'] = fix_incomingText(self.CreateTime) rec[u'LimitDays'] = self.LimitDays rec[u'TitleLen'] = self.TitleLen rec[u'Title'] = fix_incomingText(self.Title) rec[u'TextLen'] = self.TextLen rec[u'Text'] = fix_incomingText(self.Text) rec[u'LimitLV'] = self.LimitLV rec[u'LimitLVType'] = self.LimitLVType rec[u'CheckState'] = self.CheckState return rec def readRecord(self, rec): '''ÓÉÓÚMongoDB¶Á³öÀ´ÊÇunicode,ËùÓÐ×Ö·û´®ÐèÒª½øÐÐת»»''' self.GUID = fix_outgoingText(rec.get(u'GUID', u'')) self.Type = rec.get(u'Type', 0) self.CreateTime = fix_outgoingText(rec.get(u'CreateTime', u'')) self.LimitDays = rec.get(u'LimitDays', 0) self.TitleLen = rec.get(u'TitleLen', 0) self.Title = fix_outgoingText(rec.get(u'Title', u'')) self.TextLen = rec.get(u'TextLen', 0) self.Text = fix_outgoingText(rec.get(u'Text', u'')) self.LimitLV = rec.get(u'LimitLV', 0) self.LimitLVType = rec.get(u'LimitLVType', 0) self.CheckState = rec.get(u'CheckState', 0) #Can not implement adoLoadStr method:No key defined! #Can not implement adoInsertStr method:No key defined! #Can not implement adoUpdateStr method:No key defined! #Can not implement adoUpdateStr method:No key defined! #Can not implement adoCheckUpdateStr method:No key defined! #Can not implement adoCheckUpdateExStr method:No key defined! def getAdoRecords(self, resultCollection): '''²éѯ½á¹û´ò°ü³É¶þ½øÖÆÁ÷''' result = '' result = CommFunc.WriteDWORD(result, resultCollection.count()) for rec in resultCollection: self.readRecord(rec) result += self.getBuffer() return result #Can not implement adoQueryIndexStr method:No key defined! def adoQueryCustom(self, collection, queryDict): '''×Ô¶¨Òå²éѯ''' resultCollection = collection.find(queryDict) return self.getAdoRecords(resultCollection) def adoQueryAll(self, collection): '''²éѯËùÓÐ''' resultCollection = collection.find() return self.getAdoRecords(resultCollection) #Can not implement adoDeleteByIndexStr method:No key defined! def outputString(self): output = '''// ÓʼþÈ«·þÓʼþ±í #tagDBMailServer: GUID = %s, Type = %s, CreateTime = %s, LimitDays = %s, TitleLen = %s, Title = %s, TextLen = %s, Text = %s, LimitLV = %s, LimitLVType = %s, CheckState = %s, ADOResult = %s, '''%( self.GUID, self.Type, self.CreateTime, self.LimitDays, self.TitleLen, self.Title, self.TextLen, self.Text, self.LimitLV, self.LimitLVType, self.CheckState, self.ADOResult, ) return output def dumpString(self): output = '''%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s'''%( self.GUID, self.Type, self.CreateTime, self.LimitDays, self.TitleLen, self.Title, self.TextLen, self.Text, self.LimitLV, self.LimitLVType, self.CheckState, ) return output #CharÊý×éÀàÐÍSet½Ó¿Ú,ʹÓøýӿڶԴËÀàÐÍÊý¾Ý¸³Öµ£¬·ÀÖ¹¸³ÖµµÄÊý¾Ý¹ý³¤±¨´í def SetGUID(self,Str): if len(Str)<=36: self.GUID = Str else: self.GUID = Str[:36] def SetCreateTime(self,Str): if len(Str)<=30: self.CreateTime = Str else: self.CreateTime = Str[:30] # ÓʼþÈ«·þ¼Ç¼±í #tagDBMailPlayerRec class tagDBMailPlayerRec(Structure): _pack_ = 1 _fields_ = [ ('PlayerID', ctypes.c_ulong), ('GUID', ctypes.c_char * 36), ('MailState', ctypes.c_ubyte), ('ADOResult', ctypes.c_ulong), ] def __init__(self): Structure.__init__(self) self.clear() def clear(self): memset(addressof(self), 0, self.getLength()) def readData(self, buf, pos = 0, length = 0): if not pos <= length: msg = error.formatMsg('error', error.ERROR_NO_148, '(pos = %s) > (length = %s)'%(pos, length)) mylog.error(msg) return -1 if len(buf) < pos + self.getLength(): msg = error.formatMsg('error', error.ERROR_NO_149, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength())) mylog.error(msg) self.clear() self.PlayerID, pos = CommFunc.ReadDWORD(buf, pos) self.GUID, pos = CommFunc.ReadString(buf, pos, 36) self.MailState, pos = CommFunc.ReadBYTE(buf, pos) return self.getLength() def getBuffer(self): buf = create_string_buffer(self.getLength()) memmove(addressof(buf), addressof(self), self.getLength()) return string_at(addressof(buf), self.getLength()) def getLength(self): return sizeof(tagDBMailPlayerRec) def getRecord(self): '''×éÖ¯´æ´¢¼Ç¼''' rec = {} rec[u'PlayerID'] = self.PlayerID rec[u'GUID'] = fix_incomingText(self.GUID) rec[u'MailState'] = self.MailState return rec def readRecord(self, rec): '''ÓÉÓÚMongoDB¶Á³öÀ´ÊÇunicode,ËùÓÐ×Ö·û´®ÐèÒª½øÐÐת»»''' self.PlayerID = rec.get(u'PlayerID', 0) self.GUID = fix_outgoingText(rec.get(u'GUID', u'')) self.MailState = rec.get(u'MailState', 0) #Can not implement adoLoadStr method:No key defined! #Can not implement adoInsertStr method:No key defined! #Can not implement adoUpdateStr method:No key defined! #Can not implement adoUpdateStr method:No key defined! #Can not implement adoCheckUpdateStr method:No key defined! #Can not implement adoCheckUpdateExStr method:No key defined! def getAdoRecords(self, resultCollection): '''²éѯ½á¹û´ò°ü³É¶þ½øÖÆÁ÷''' result = '' result = CommFunc.WriteDWORD(result, resultCollection.count()) for rec in resultCollection: self.readRecord(rec) result += self.getBuffer() return result #Can not implement adoQueryIndexStr method:No key defined! def adoQueryCustom(self, collection, queryDict): '''×Ô¶¨Òå²éѯ''' resultCollection = collection.find(queryDict) return self.getAdoRecords(resultCollection) def adoQueryAll(self, collection): '''²éѯËùÓÐ''' resultCollection = collection.find() return self.getAdoRecords(resultCollection) #Can not implement adoDeleteByIndexStr method:No key defined! def outputString(self): output = '''// ÓʼþÈ«·þ¼Ç¼±í #tagDBMailPlayerRec: PlayerID = %s, GUID = %s, MailState = %s, ADOResult = %s, '''%( self.PlayerID, self.GUID, self.MailState, self.ADOResult, ) return output def dumpString(self): output = '''%1s\t%1s\t%1s'''%( self.PlayerID, self.GUID, self.MailState, ) return output #CharÊý×éÀàÐÍSet½Ó¿Ú,ʹÓøýӿڶԴËÀàÐÍÊý¾Ý¸³Öµ£¬·ÀÖ¹¸³ÖµµÄÊý¾Ý¹ý³¤±¨´í def SetGUID(self,Str): if len(Str)<=36: self.GUID = Str else: self.GUID = Str[:36] # ÓʼþÎïÆ·±í #tagDBMailItem class tagDBMailItem(Structure): _pack_ = 1 _fields_ = [ ('GUID', ctypes.c_char * 36), ('ItemID', ctypes.c_ulong), ('Count', ctypes.c_ulong), ('IsBind', ctypes.c_ubyte), ('UserDataLen', ctypes.c_ushort), ('UserData', ctypes.c_char_p), ('ADOResult', ctypes.c_ulong), ] def __init__(self): Structure.__init__(self) self.clear() def clear(self): self.GUID = '' self.ItemID = 0 self.Count = 0 self.IsBind = 0 self.UserDataLen = 0 self.UserData = '' def readData(self, buf, pos = 0, length = 0): if not pos <= length: msg = error.formatMsg('error', error.ERROR_NO_148, '(pos = %s) > (length = %s)'%(pos, length)) mylog.error(msg) return -1 if len(buf) < pos + self.getLength(): msg = error.formatMsg('error', error.ERROR_NO_149, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength())) mylog.error(msg) self.clear() self.GUID, pos = CommFunc.ReadString(buf, pos, 36) self.ItemID, pos = CommFunc.ReadDWORD(buf, pos) self.Count, pos = CommFunc.ReadDWORD(buf, pos) self.IsBind, pos = CommFunc.ReadBYTE(buf, pos) self.UserDataLen, pos = CommFunc.ReadWORD(buf, pos) tmp, pos = CommFunc.ReadString(buf, pos, self.UserDataLen) self.UserData = ctypes.c_char_p(tmp) return self.getLength() def getBuffer(self): buf = '' buf = CommFunc.WriteString(buf, sizeof(ctypes.c_char) * 36, self.GUID) buf = CommFunc.WriteDWORD(buf, self.ItemID) buf = CommFunc.WriteDWORD(buf, self.Count) buf = CommFunc.WriteBYTE(buf, self.IsBind) buf = CommFunc.WriteWORD(buf, self.UserDataLen) buf = CommFunc.WriteString(buf, self.UserDataLen, self.UserData) return buf def getLength(self): length = 0 length += sizeof(ctypes.c_char) * 36 length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ubyte) length += sizeof(ctypes.c_ushort) length += self.UserDataLen return length def getRecord(self): '''×éÖ¯´æ´¢¼Ç¼''' rec = {} rec[u'GUID'] = fix_incomingText(self.GUID) rec[u'ItemID'] = self.ItemID rec[u'Count'] = self.Count rec[u'IsBind'] = self.IsBind rec[u'UserDataLen'] = self.UserDataLen rec[u'UserData'] = fix_incomingText(self.UserData) return rec def readRecord(self, rec): '''ÓÉÓÚMongoDB¶Á³öÀ´ÊÇunicode,ËùÓÐ×Ö·û´®ÐèÒª½øÐÐת»»''' self.GUID = fix_outgoingText(rec.get(u'GUID', u'')) self.ItemID = rec.get(u'ItemID', 0) self.Count = rec.get(u'Count', 0) self.IsBind = rec.get(u'IsBind', 0) self.UserDataLen = rec.get(u'UserDataLen', 0) self.UserData = fix_outgoingText(rec.get(u'UserData', u'')) #Can not implement adoLoadStr method:No key defined! #Can not implement adoInsertStr method:No key defined! #Can not implement adoUpdateStr method:No key defined! #Can not implement adoUpdateStr method:No key defined! #Can not implement adoCheckUpdateStr method:No key defined! #Can not implement adoCheckUpdateExStr method:No key defined! def getAdoRecords(self, resultCollection): '''²éѯ½á¹û´ò°ü³É¶þ½øÖÆÁ÷''' result = '' result = CommFunc.WriteDWORD(result, resultCollection.count()) for rec in resultCollection: self.readRecord(rec) result += self.getBuffer() return result #Can not implement adoQueryIndexStr method:No key defined! def adoQueryCustom(self, collection, queryDict): '''×Ô¶¨Òå²éѯ''' resultCollection = collection.find(queryDict) return self.getAdoRecords(resultCollection) def adoQueryAll(self, collection): '''²éѯËùÓÐ''' resultCollection = collection.find() return self.getAdoRecords(resultCollection) #Can not implement adoDeleteByIndexStr method:No key defined! def outputString(self): output = '''// ÓʼþÎïÆ·±í #tagDBMailItem: GUID = %s, ItemID = %s, Count = %s, IsBind = %s, UserDataLen = %s, UserData = %s, ADOResult = %s, '''%( self.GUID, self.ItemID, self.Count, self.IsBind, self.UserDataLen, self.UserData, self.ADOResult, ) return output def dumpString(self): output = '''%1s\t%1s\t%1s\t%1s\t%1s\t%1s'''%( self.GUID, self.ItemID, self.Count, self.IsBind, self.UserDataLen, self.UserData, ) return output #CharÊý×éÀàÐÍSet½Ó¿Ú,ʹÓøýӿڶԴËÀàÐÍÊý¾Ý¸³Öµ£¬·ÀÖ¹¸³ÖµµÄÊý¾Ý¹ý³¤±¨´í def SetGUID(self,Str): if len(Str)<=36: self.GUID = Str else: self.GUID = Str[:36] # ¼Ò×å±í #tagDBFamily class tagDBFamily(Structure): _pack_ = 1 _fields_ = [ ('ID', ctypes.c_ulong), ('Name', ctypes.c_char * 33), ('LeaderID', ctypes.c_ulong), ('LV', ctypes.c_ubyte), ('Exp', ctypes.c_ulong), ('JoinReview', ctypes.c_ubyte), ('JoinLVMin', ctypes.c_ushort), ('CreateTime', ctypes.c_ulong), ('ServerID', ctypes.c_ulong), ('BroadcastLen', ctypes.c_ubyte), ('Broadcast', ctypes.c_char_p), ('FightPower', ctypes.c_ulong), ('FightPowerEx', ctypes.c_ulong), ('EmblemID', ctypes.c_ushort), ('ADOResult', ctypes.c_ulong), ] def __init__(self): Structure.__init__(self) self.clear() def clear(self): self.ID = 0 self.Name = '' self.LeaderID = 0 self.LV = 0 self.Exp = 0 self.JoinReview = 0 self.JoinLVMin = 0 self.CreateTime = 0 self.ServerID = 0 self.BroadcastLen = 0 self.Broadcast = '' self.FightPower = 0 self.FightPowerEx = 0 self.EmblemID = 0 def readData(self, buf, pos = 0, length = 0): if not pos <= length: msg = error.formatMsg('error', error.ERROR_NO_148, '(pos = %s) > (length = %s)'%(pos, length)) mylog.error(msg) return -1 if len(buf) < pos + self.getLength(): msg = error.formatMsg('error', error.ERROR_NO_149, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength())) mylog.error(msg) self.clear() self.ID, pos = CommFunc.ReadDWORD(buf, pos) self.Name, pos = CommFunc.ReadString(buf, pos, 33) self.LeaderID, pos = CommFunc.ReadDWORD(buf, pos) self.LV, pos = CommFunc.ReadBYTE(buf, pos) self.Exp, pos = CommFunc.ReadDWORD(buf, pos) self.JoinReview, pos = CommFunc.ReadBYTE(buf, pos) self.JoinLVMin, pos = CommFunc.ReadWORD(buf, pos) self.CreateTime, pos = CommFunc.ReadDWORD(buf, pos) self.ServerID, pos = CommFunc.ReadDWORD(buf, pos) self.BroadcastLen, pos = CommFunc.ReadBYTE(buf, pos) tmp, pos = CommFunc.ReadString(buf, pos, self.BroadcastLen) self.Broadcast = ctypes.c_char_p(tmp) self.FightPower, pos = CommFunc.ReadDWORD(buf, pos) self.FightPowerEx, pos = CommFunc.ReadDWORD(buf, pos) self.EmblemID, pos = CommFunc.ReadWORD(buf, pos) return self.getLength() def getBuffer(self): buf = '' buf = CommFunc.WriteDWORD(buf, self.ID) buf = CommFunc.WriteString(buf, sizeof(ctypes.c_char) * 33, self.Name) buf = CommFunc.WriteDWORD(buf, self.LeaderID) buf = CommFunc.WriteBYTE(buf, self.LV) buf = CommFunc.WriteDWORD(buf, self.Exp) buf = CommFunc.WriteBYTE(buf, self.JoinReview) buf = CommFunc.WriteWORD(buf, self.JoinLVMin) buf = CommFunc.WriteDWORD(buf, self.CreateTime) buf = CommFunc.WriteDWORD(buf, self.ServerID) buf = CommFunc.WriteBYTE(buf, self.BroadcastLen) buf = CommFunc.WriteString(buf, self.BroadcastLen, self.Broadcast) buf = CommFunc.WriteDWORD(buf, self.FightPower) buf = CommFunc.WriteDWORD(buf, self.FightPowerEx) buf = CommFunc.WriteWORD(buf, self.EmblemID) return buf def getLength(self): length = 0 length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_char) * 33 length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ubyte) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ubyte) length += sizeof(ctypes.c_ushort) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ubyte) length += self.BroadcastLen length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ushort) return length def getRecord(self): '''×éÖ¯´æ´¢¼Ç¼''' rec = {} rec[u'ID'] = self.ID rec[u'Name'] = fix_incomingText(self.Name) rec[u'LeaderID'] = self.LeaderID rec[u'LV'] = self.LV rec[u'Exp'] = self.Exp rec[u'JoinReview'] = self.JoinReview rec[u'JoinLVMin'] = self.JoinLVMin rec[u'CreateTime'] = self.CreateTime rec[u'ServerID'] = self.ServerID rec[u'BroadcastLen'] = self.BroadcastLen rec[u'Broadcast'] = fix_incomingText(self.Broadcast) rec[u'FightPower'] = self.FightPower rec[u'FightPowerEx'] = self.FightPowerEx rec[u'EmblemID'] = self.EmblemID return rec def readRecord(self, rec): '''ÓÉÓÚMongoDB¶Á³öÀ´ÊÇunicode,ËùÓÐ×Ö·û´®ÐèÒª½øÐÐת»»''' self.ID = rec.get(u'ID', 0) self.Name = fix_outgoingText(rec.get(u'Name', u'')) self.LeaderID = rec.get(u'LeaderID', 0) self.LV = rec.get(u'LV', 0) self.Exp = rec.get(u'Exp', 0) self.JoinReview = rec.get(u'JoinReview', 0) self.JoinLVMin = rec.get(u'JoinLVMin', 0) self.CreateTime = rec.get(u'CreateTime', 0) self.ServerID = rec.get(u'ServerID', 0) self.BroadcastLen = rec.get(u'BroadcastLen', 0) self.Broadcast = fix_outgoingText(rec.get(u'Broadcast', u'')) self.FightPower = rec.get(u'FightPower', 0) self.FightPowerEx = rec.get(u'FightPowerEx', 0) self.EmblemID = rec.get(u'EmblemID', 0) def adoLoad(self, collection): '''ʹÓÃKEY²éÕÒ²¢¶ÁÈ¡''' resultCollection = collection.find({'ID':self.ID}) if resultCollection.count() <= 0: return False #ÓÉÓÚÊÇKEY²éÕÒ£¬ËùÓÐÈç¹û´æÔÚ¾ÍÖ»ÓÐÒ»Ìõ¼Ç¼ rec = resultCollection[0] #¶ÁÈ¡Êý¾Ý self.readRecord(rec) return True def adoInsert(self, collection): '''Ö´ÐвåÈë''' trycnt = 0 rec = self.getRecord() while(True): try: collection.insert(rec, False, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_152, 'Insert failed!ID = %s, error = %s, trycnt = %d'%(self.ID, err, trycnt)) mylog.error(msg) return False return True def adoUpdate(self, collection): '''Ö´ÐиüÐÂ''' trycnt = 0 rec = self.getRecord() while(True): try: collection.update({'ID':self.ID}, {'$set':rec}, False, False, True, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_153, 'Update failed!ID = %s, error = %s, trycnt = %d'%(self.ID, err, trycnt)) mylog.error(msg) return False return True def adoUpdateEx(self, collection, spec): '''Ö´ÐиüÐÂ''' trycnt = 0 rec = self.getRecord() while(True): try: collection.update(spec, {'$set':rec}, False, False, True, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_154, 'Update failed!ID = %s, error = %s, trycnt = %d'%(self.ID, err, trycnt)) mylog.error(msg) return False return True def adoCheckUpdate(self, collection): '''¸ù¾ÝÇé¿öÖ´ÐвåÈë»ò¸üÐÂ''' resultCollection = collection.find({'ID':self.ID}) if resultCollection.count() <= 0: return self.adoInsert(collection) return self.adoUpdate(collection) def adoCheckUpdateEx(self, collection, spec): '''¸ù¾ÝÇé¿öÖ´ÐвåÈë»ò¸üÐÂ''' resultCollection = collection.find(spec) if resultCollection.count() <= 0: return self.adoInsert(collection) return self.adoUpdateEx(collection, spec) def getAdoRecords(self, resultCollection): '''²éѯ½á¹û´ò°ü³É¶þ½øÖÆÁ÷''' result = '' result = CommFunc.WriteDWORD(result, resultCollection.count()) for rec in resultCollection: self.readRecord(rec) result += self.getBuffer() return result def adoQueryIndex(self, collection): '''ÓÃË÷Òý×ֶβéÕÒ''' resultCollection = collection.find({'ID':self.ID}) return self.getAdoRecords(resultCollection) def adoQueryCustom(self, collection, queryDict): '''×Ô¶¨Òå²éѯ''' resultCollection = collection.find(queryDict) return self.getAdoRecords(resultCollection) def adoQueryAll(self, collection): '''²éѯËùÓÐ''' resultCollection = collection.find() return self.getAdoRecords(resultCollection) def adoDeleteByIndex(self, collection): '''¸ù¾ÝË÷Òýɾ³ý''' trycnt = 0 while(True): try: collection.remove({'ID':self.ID}) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:ID = %s"%(self.__class__.__name__, inspect.stack()[0][3], self.ID)) msg = error.formatMsg('error', error.ERROR_NO_155, 'delete failure!self.ID = %s, error = %s, trycnt = %d'%(self.ID, err, trycnt)) mylog.error(msg) return False return True def outputString(self): output = '''// ¼Ò×å±í #tagDBFamily: ID = %s, Name = %s, LeaderID = %s, LV = %s, Exp = %s, JoinReview = %s, JoinLVMin = %s, CreateTime = %s, ServerID = %s, BroadcastLen = %s, Broadcast = %s, FightPower = %s, FightPowerEx = %s, EmblemID = %s, ADOResult = %s, '''%( self.ID, self.Name, self.LeaderID, self.LV, self.Exp, self.JoinReview, self.JoinLVMin, self.CreateTime, self.ServerID, self.BroadcastLen, self.Broadcast, self.FightPower, self.FightPowerEx, self.EmblemID, self.ADOResult, ) return output def dumpString(self): output = '''%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s'''%( self.ID, self.Name, self.LeaderID, self.LV, self.Exp, self.JoinReview, self.JoinLVMin, self.CreateTime, self.ServerID, self.BroadcastLen, self.Broadcast, self.FightPower, self.FightPowerEx, self.EmblemID, ) return output #CharÊý×éÀàÐÍSet½Ó¿Ú,ʹÓøýӿڶԴËÀàÐÍÊý¾Ý¸³Öµ£¬·ÀÖ¹¸³ÖµµÄÊý¾Ý¹ý³¤±¨´í def SetName(self,Str): if len(Str)<=33: self.Name = Str else: self.Name = Str[:33] # ¼Ò×å³ÉÔ±±í #tagDBFamilyMem class tagDBFamilyMem(Structure): _pack_ = 1 _fields_ = [ ('PlayerID', ctypes.c_ulong), ('FamilyID', ctypes.c_ulong), ('JoinTime', ctypes.c_ulong), ('PlayerName', ctypes.c_char * 33), ('LV', ctypes.c_int), ('Job', ctypes.c_int), ('RealmLV', ctypes.c_ubyte), ('Face', ctypes.c_int), ('FacePic', ctypes.c_int), ('FightPower', ctypes.c_ulong), ('FightPowerEx', ctypes.c_ulong), ('ServerID', ctypes.c_ulong), ('OffTime', ctypes.c_ulong), ('FmLV', ctypes.c_ubyte), ('ContribTotal', ctypes.c_ulong), ('ContribWeek', ctypes.c_ulong), ('ADOResult', ctypes.c_ulong), ] def __init__(self): Structure.__init__(self) self.clear() def clear(self): memset(addressof(self), 0, self.getLength()) def readData(self, buf, pos = 0, length = 0): if not pos <= length: msg = error.formatMsg('error', error.ERROR_NO_148, '(pos = %s) > (length = %s)'%(pos, length)) mylog.error(msg) return -1 if len(buf) < pos + self.getLength(): msg = error.formatMsg('error', error.ERROR_NO_149, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength())) mylog.error(msg) self.clear() self.PlayerID, pos = CommFunc.ReadDWORD(buf, pos) self.FamilyID, pos = CommFunc.ReadDWORD(buf, pos) self.JoinTime, pos = CommFunc.ReadDWORD(buf, pos) self.PlayerName, pos = CommFunc.ReadString(buf, pos, 33) self.LV, pos = CommFunc.ReadDWORD(buf, pos) self.Job, pos = CommFunc.ReadDWORD(buf, pos) self.RealmLV, pos = CommFunc.ReadBYTE(buf, pos) self.Face, pos = CommFunc.ReadDWORD(buf, pos) self.FacePic, pos = CommFunc.ReadDWORD(buf, pos) self.FightPower, pos = CommFunc.ReadDWORD(buf, pos) self.FightPowerEx, pos = CommFunc.ReadDWORD(buf, pos) self.ServerID, pos = CommFunc.ReadDWORD(buf, pos) self.OffTime, pos = CommFunc.ReadDWORD(buf, pos) self.FmLV, pos = CommFunc.ReadBYTE(buf, pos) self.ContribTotal, pos = CommFunc.ReadDWORD(buf, pos) self.ContribWeek, pos = CommFunc.ReadDWORD(buf, pos) return self.getLength() def getBuffer(self): buf = create_string_buffer(self.getLength()) memmove(addressof(buf), addressof(self), self.getLength()) return string_at(addressof(buf), self.getLength()) def getLength(self): return sizeof(tagDBFamilyMem) def getRecord(self): '''×éÖ¯´æ´¢¼Ç¼''' rec = {} rec[u'PlayerID'] = self.PlayerID rec[u'FamilyID'] = self.FamilyID rec[u'JoinTime'] = self.JoinTime rec[u'PlayerName'] = fix_incomingText(self.PlayerName) rec[u'LV'] = self.LV rec[u'Job'] = self.Job rec[u'RealmLV'] = self.RealmLV rec[u'Face'] = self.Face rec[u'FacePic'] = self.FacePic rec[u'FightPower'] = self.FightPower rec[u'FightPowerEx'] = self.FightPowerEx rec[u'ServerID'] = self.ServerID rec[u'OffTime'] = self.OffTime rec[u'FmLV'] = self.FmLV rec[u'ContribTotal'] = self.ContribTotal rec[u'ContribWeek'] = self.ContribWeek return rec def readRecord(self, rec): '''ÓÉÓÚMongoDB¶Á³öÀ´ÊÇunicode,ËùÓÐ×Ö·û´®ÐèÒª½øÐÐת»»''' self.PlayerID = rec.get(u'PlayerID', 0) self.FamilyID = rec.get(u'FamilyID', 0) self.JoinTime = rec.get(u'JoinTime', 0) self.PlayerName = fix_outgoingText(rec.get(u'PlayerName', u'')) self.LV = rec.get(u'LV', 0) self.Job = rec.get(u'Job', 0) self.RealmLV = rec.get(u'RealmLV', 0) self.Face = rec.get(u'Face', 0) self.FacePic = rec.get(u'FacePic', 0) self.FightPower = rec.get(u'FightPower', 0) self.FightPowerEx = rec.get(u'FightPowerEx', 0) self.ServerID = rec.get(u'ServerID', 0) self.OffTime = rec.get(u'OffTime', 0) self.FmLV = rec.get(u'FmLV', 0) self.ContribTotal = rec.get(u'ContribTotal', 0) self.ContribWeek = rec.get(u'ContribWeek', 0) def adoLoad(self, collection): '''ʹÓÃKEY²éÕÒ²¢¶ÁÈ¡''' resultCollection = collection.find({'PlayerID':self.PlayerID}) if resultCollection.count() <= 0: return False #ÓÉÓÚÊÇKEY²éÕÒ£¬ËùÓÐÈç¹û´æÔÚ¾ÍÖ»ÓÐÒ»Ìõ¼Ç¼ rec = resultCollection[0] #¶ÁÈ¡Êý¾Ý self.readRecord(rec) return True def adoInsert(self, collection): '''Ö´ÐвåÈë''' trycnt = 0 rec = self.getRecord() while(True): try: collection.insert(rec, False, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_152, 'Insert failed!PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True def adoUpdate(self, collection): '''Ö´ÐиüÐÂ''' trycnt = 0 rec = self.getRecord() while(True): try: collection.update({'PlayerID':self.PlayerID}, {'$set':rec}, False, False, True, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_153, 'Update failed!PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True def adoUpdateEx(self, collection, spec): '''Ö´ÐиüÐÂ''' trycnt = 0 rec = self.getRecord() while(True): try: collection.update(spec, {'$set':rec}, False, False, True, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_154, 'Update failed!PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True def adoCheckUpdate(self, collection): '''¸ù¾ÝÇé¿öÖ´ÐвåÈë»ò¸üÐÂ''' resultCollection = collection.find({'PlayerID':self.PlayerID}) if resultCollection.count() <= 0: return self.adoInsert(collection) return self.adoUpdate(collection) def adoCheckUpdateEx(self, collection, spec): '''¸ù¾ÝÇé¿öÖ´ÐвåÈë»ò¸üÐÂ''' resultCollection = collection.find(spec) if resultCollection.count() <= 0: return self.adoInsert(collection) return self.adoUpdateEx(collection, spec) def getAdoRecords(self, resultCollection): '''²éѯ½á¹û´ò°ü³É¶þ½øÖÆÁ÷''' result = '' result = CommFunc.WriteDWORD(result, resultCollection.count()) for rec in resultCollection: self.readRecord(rec) result += self.getBuffer() return result def adoQueryIndex(self, collection): '''ÓÃË÷Òý×ֶβéÕÒ''' resultCollection = collection.find({'PlayerID':self.PlayerID}) return self.getAdoRecords(resultCollection) def adoQueryCustom(self, collection, queryDict): '''×Ô¶¨Òå²éѯ''' resultCollection = collection.find(queryDict) return self.getAdoRecords(resultCollection) def adoQueryAll(self, collection): '''²éѯËùÓÐ''' resultCollection = collection.find() return self.getAdoRecords(resultCollection) def adoDeleteByIndex(self, collection): '''¸ù¾ÝË÷Òýɾ³ý''' trycnt = 0 while(True): try: collection.remove({'PlayerID':self.PlayerID}) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:PlayerID = %s"%(self.__class__.__name__, inspect.stack()[0][3], self.PlayerID)) msg = error.formatMsg('error', error.ERROR_NO_155, 'delete failure!self.PlayerID = %s, error = %s, trycnt = %d'%(self.PlayerID, err, trycnt)) mylog.error(msg) return False return True def outputString(self): output = '''// ¼Ò×å³ÉÔ±±í #tagDBFamilyMem: PlayerID = %s, FamilyID = %s, JoinTime = %s, PlayerName = %s, LV = %s, Job = %s, RealmLV = %s, Face = %s, FacePic = %s, FightPower = %s, FightPowerEx = %s, ServerID = %s, OffTime = %s, FmLV = %s, ContribTotal = %s, ContribWeek = %s, ADOResult = %s, '''%( self.PlayerID, self.FamilyID, self.JoinTime, self.PlayerName, self.LV, self.Job, self.RealmLV, self.Face, self.FacePic, self.FightPower, self.FightPowerEx, self.ServerID, self.OffTime, self.FmLV, self.ContribTotal, self.ContribWeek, self.ADOResult, ) return output def dumpString(self): output = '''%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s'''%( self.PlayerID, self.FamilyID, self.JoinTime, self.PlayerName, self.LV, self.Job, self.RealmLV, self.Face, self.FacePic, self.FightPower, self.FightPowerEx, self.ServerID, self.OffTime, self.FmLV, self.ContribTotal, self.ContribWeek, ) return output #CharÊý×éÀàÐÍSet½Ó¿Ú,ʹÓøýӿڶԴËÀàÐÍÊý¾Ý¸³Öµ£¬·ÀÖ¹¸³ÖµµÄÊý¾Ý¹ý³¤±¨´í def SetPlayerName(self,Str): if len(Str)<=33: self.PlayerName = Str else: self.PlayerName = Str[:33] # ¼Ò×åÐÐΪ±í #tagDBFamilyAction class tagDBFamilyAction(Structure): _pack_ = 1 _fields_ = [ ('FamilyID', ctypes.c_ulong), ('ActionType', ctypes.c_ubyte), ('Name', ctypes.c_char * 33), ('Time', ctypes.c_ulong), ('Value1', ctypes.c_ulong), ('Value2', ctypes.c_ulong), ('Value3', ctypes.c_ulong), ('Value4', ctypes.c_ulong), ('Value5', ctypes.c_ulong), ('Value6', ctypes.c_ulong), ('DataLen', ctypes.c_ushort), ('Data', ctypes.c_char_p), ('ADOResult', ctypes.c_ulong), ] def __init__(self): Structure.__init__(self) self.clear() def clear(self): self.FamilyID = 0 self.ActionType = 0 self.Name = '' self.Time = 0 self.Value1 = 0 self.Value2 = 0 self.Value3 = 0 self.Value4 = 0 self.Value5 = 0 self.Value6 = 0 self.DataLen = 0 self.Data = '' def readData(self, buf, pos = 0, length = 0): if not pos <= length: msg = error.formatMsg('error', error.ERROR_NO_148, '(pos = %s) > (length = %s)'%(pos, length)) mylog.error(msg) return -1 if len(buf) < pos + self.getLength(): msg = error.formatMsg('error', error.ERROR_NO_149, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength())) mylog.error(msg) self.clear() self.FamilyID, pos = CommFunc.ReadDWORD(buf, pos) self.ActionType, pos = CommFunc.ReadBYTE(buf, pos) self.Name, pos = CommFunc.ReadString(buf, pos, 33) self.Time, pos = CommFunc.ReadDWORD(buf, pos) self.Value1, pos = CommFunc.ReadDWORD(buf, pos) self.Value2, pos = CommFunc.ReadDWORD(buf, pos) self.Value3, pos = CommFunc.ReadDWORD(buf, pos) self.Value4, pos = CommFunc.ReadDWORD(buf, pos) self.Value5, pos = CommFunc.ReadDWORD(buf, pos) self.Value6, pos = CommFunc.ReadDWORD(buf, pos) self.DataLen, pos = CommFunc.ReadWORD(buf, pos) tmp, pos = CommFunc.ReadString(buf, pos, self.DataLen) self.Data = ctypes.c_char_p(tmp) return self.getLength() def getBuffer(self): buf = '' buf = CommFunc.WriteDWORD(buf, self.FamilyID) buf = CommFunc.WriteBYTE(buf, self.ActionType) buf = CommFunc.WriteString(buf, sizeof(ctypes.c_char) * 33, self.Name) buf = CommFunc.WriteDWORD(buf, self.Time) buf = CommFunc.WriteDWORD(buf, self.Value1) buf = CommFunc.WriteDWORD(buf, self.Value2) buf = CommFunc.WriteDWORD(buf, self.Value3) buf = CommFunc.WriteDWORD(buf, self.Value4) buf = CommFunc.WriteDWORD(buf, self.Value5) buf = CommFunc.WriteDWORD(buf, self.Value6) buf = CommFunc.WriteWORD(buf, self.DataLen) buf = CommFunc.WriteString(buf, self.DataLen, self.Data) return buf def getLength(self): length = 0 length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ubyte) length += sizeof(ctypes.c_char) * 33 length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ushort) length += self.DataLen return length def getRecord(self): '''×éÖ¯´æ´¢¼Ç¼''' rec = {} rec[u'FamilyID'] = self.FamilyID rec[u'ActionType'] = self.ActionType rec[u'Name'] = fix_incomingText(self.Name) rec[u'Time'] = self.Time rec[u'Value1'] = self.Value1 rec[u'Value2'] = self.Value2 rec[u'Value3'] = self.Value3 rec[u'Value4'] = self.Value4 rec[u'Value5'] = self.Value5 rec[u'Value6'] = self.Value6 rec[u'DataLen'] = self.DataLen rec[u'Data'] = fix_incomingText(self.Data) return rec def readRecord(self, rec): '''ÓÉÓÚMongoDB¶Á³öÀ´ÊÇunicode,ËùÓÐ×Ö·û´®ÐèÒª½øÐÐת»»''' self.FamilyID = rec.get(u'FamilyID', 0) self.ActionType = rec.get(u'ActionType', 0) self.Name = fix_outgoingText(rec.get(u'Name', u'')) self.Time = rec.get(u'Time', 0) self.Value1 = rec.get(u'Value1', 0) self.Value2 = rec.get(u'Value2', 0) self.Value3 = rec.get(u'Value3', 0) self.Value4 = rec.get(u'Value4', 0) self.Value5 = rec.get(u'Value5', 0) self.Value6 = rec.get(u'Value6', 0) self.DataLen = rec.get(u'DataLen', 0) self.Data = fix_outgoingText(rec.get(u'Data', u'')) #Can not implement adoLoadStr method:No key defined! def adoInsert(self, collection): '''Ö´ÐвåÈë''' trycnt = 0 rec = self.getRecord() while(True): try: collection.insert(rec, False, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_152, 'Insert failed!FamilyID = %s, error = %s, trycnt = %d'%(self.FamilyID, err, trycnt)) mylog.error(msg) return False return True #Can not implement adoUpdateStr method:No key defined! def adoUpdateEx(self, collection, spec): '''Ö´ÐиüÐÂ''' trycnt = 0 rec = self.getRecord() while(True): try: collection.update(spec, {'$set':rec}, False, False, True, True) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:rec = %s"%(self.__class__.__name__, inspect.stack()[0][3], rec)) msg = error.formatMsg('error', error.ERROR_NO_154, 'Update failed!FamilyID = %s, error = %s, trycnt = %d'%(self.FamilyID, err, trycnt)) mylog.error(msg) return False return True #Can not implement adoCheckUpdateStr method:No key defined! #Can not implement adoCheckUpdateExStr method:No key defined! def getAdoRecords(self, resultCollection): '''²éѯ½á¹û´ò°ü³É¶þ½øÖÆÁ÷''' result = '' result = CommFunc.WriteDWORD(result, resultCollection.count()) for rec in resultCollection: self.readRecord(rec) result += self.getBuffer() return result def adoQueryIndex(self, collection): '''ÓÃË÷Òý×ֶβéÕÒ''' resultCollection = collection.find({'FamilyID':self.FamilyID}) return self.getAdoRecords(resultCollection) def adoQueryCustom(self, collection, queryDict): '''×Ô¶¨Òå²éѯ''' resultCollection = collection.find(queryDict) return self.getAdoRecords(resultCollection) def adoQueryAll(self, collection): '''²éѯËùÓÐ''' resultCollection = collection.find() return self.getAdoRecords(resultCollection) def adoDeleteByIndex(self, collection): '''¸ù¾ÝË÷Òýɾ³ý''' trycnt = 0 while(True): try: collection.remove({'FamilyID':self.FamilyID}) break except pymongo.errors.OperationFailure, err: if(DBConfig.TryCntOnWriteFail > trycnt): trycnt += 1 continue addADOExceptionCount() mylog.info("%s.%s:FamilyID = %s"%(self.__class__.__name__, inspect.stack()[0][3], self.FamilyID)) msg = error.formatMsg('error', error.ERROR_NO_155, 'delete failure!self.FamilyID = %s, error = %s, trycnt = %d'%(self.FamilyID, err, trycnt)) mylog.error(msg) return False return True def outputString(self): output = '''// ¼Ò×åÐÐΪ±í #tagDBFamilyAction: FamilyID = %s, ActionType = %s, Name = %s, Time = %s, Value1 = %s, Value2 = %s, Value3 = %s, Value4 = %s, Value5 = %s, Value6 = %s, DataLen = %s, Data = %s, ADOResult = %s, '''%( self.FamilyID, self.ActionType, self.Name, self.Time, self.Value1, self.Value2, self.Value3, self.Value4, self.Value5, self.Value6, self.DataLen, self.Data, self.ADOResult, ) return output def dumpString(self): output = '''%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s'''%( self.FamilyID, self.ActionType, self.Name, self.Time, self.Value1, self.Value2, self.Value3, self.Value4, self.Value5, self.Value6, self.DataLen, self.Data, ) return output #CharÊý×éÀàÐÍSet½Ó¿Ú,ʹÓøýӿڶԴËÀàÐÍÊý¾Ý¸³Öµ£¬·ÀÖ¹¸³ÖµµÄÊý¾Ý¹ý³¤±¨´í def SetName(self,Str): if len(Str)<=33: self.Name = Str else: self.Name = Str[:33] # ͨÓüǼ±íР#tagDBGameRec class tagDBGameRec(Structure): _pack_ = 1 _fields_ = [ ('RecType', ctypes.c_ushort), ('RecID', ctypes.c_ulong), ('Time', ctypes.c_double), ('Value1', ctypes.c_ulong), ('Value2', ctypes.c_ulong), ('Value3', ctypes.c_ulong), ('Value4', ctypes.c_ulong), ('Value5', ctypes.c_ulong), ('Value6', ctypes.c_ulong), ('Value7', ctypes.c_ulong), ('Value8', ctypes.c_ulong), ('UserDataLen', ctypes.c_ushort), ('UserData', ctypes.c_char_p), ('ADOResult', ctypes.c_ulong), ] def __init__(self): Structure.__init__(self) self.clear() def clear(self): self.RecType = 0 self.RecID = 0 self.Time = 0.0 self.Value1 = 0 self.Value2 = 0 self.Value3 = 0 self.Value4 = 0 self.Value5 = 0 self.Value6 = 0 self.Value7 = 0 self.Value8 = 0 self.UserDataLen = 0 self.UserData = '' def readData(self, buf, pos = 0, length = 0): if not pos <= length: msg = error.formatMsg('error', error.ERROR_NO_148, '(pos = %s) > (length = %s)'%(pos, length)) mylog.error(msg) return -1 if len(buf) < pos + self.getLength(): msg = error.formatMsg('error', error.ERROR_NO_149, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength())) mylog.error(msg) self.clear() self.RecType, pos = CommFunc.ReadWORD(buf, pos) self.RecID, pos = CommFunc.ReadDWORD(buf, pos) self.Time, pos = CommFunc.ReadDouble(buf, pos) self.Value1, pos = CommFunc.ReadDWORD(buf, pos) self.Value2, pos = CommFunc.ReadDWORD(buf, pos) self.Value3, pos = CommFunc.ReadDWORD(buf, pos) self.Value4, pos = CommFunc.ReadDWORD(buf, pos) self.Value5, pos = CommFunc.ReadDWORD(buf, pos) self.Value6, pos = CommFunc.ReadDWORD(buf, pos) self.Value7, pos = CommFunc.ReadDWORD(buf, pos) self.Value8, pos = CommFunc.ReadDWORD(buf, pos) self.UserDataLen, pos = CommFunc.ReadWORD(buf, pos) tmp, pos = CommFunc.ReadString(buf, pos, self.UserDataLen) self.UserData = ctypes.c_char_p(tmp) return self.getLength() def getBuffer(self): buf = '' buf = CommFunc.WriteWORD(buf, self.RecType) buf = CommFunc.WriteDWORD(buf, self.RecID) buf = CommFunc.WriteDouble(buf, self.Time) buf = CommFunc.WriteDWORD(buf, self.Value1) buf = CommFunc.WriteDWORD(buf, self.Value2) buf = CommFunc.WriteDWORD(buf, self.Value3) buf = CommFunc.WriteDWORD(buf, self.Value4) buf = CommFunc.WriteDWORD(buf, self.Value5) buf = CommFunc.WriteDWORD(buf, self.Value6) buf = CommFunc.WriteDWORD(buf, self.Value7) buf = CommFunc.WriteDWORD(buf, self.Value8) buf = CommFunc.WriteWORD(buf, self.UserDataLen) buf = CommFunc.WriteString(buf, self.UserDataLen, self.UserData) return buf def getLength(self): length = 0 length += sizeof(ctypes.c_ushort) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_double) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ushort) length += self.UserDataLen return length def getRecord(self): '''×éÖ¯´æ´¢¼Ç¼''' rec = {} rec[u'RecType'] = self.RecType rec[u'RecID'] = self.RecID rec[u'Time'] = self.Time rec[u'Value1'] = self.Value1 rec[u'Value2'] = self.Value2 rec[u'Value3'] = self.Value3 rec[u'Value4'] = self.Value4 rec[u'Value5'] = self.Value5 rec[u'Value6'] = self.Value6 rec[u'Value7'] = self.Value7 rec[u'Value8'] = self.Value8 rec[u'UserDataLen'] = self.UserDataLen rec[u'UserData'] = fix_incomingText(self.UserData) return rec def readRecord(self, rec): '''ÓÉÓÚMongoDB¶Á³öÀ´ÊÇunicode,ËùÓÐ×Ö·û´®ÐèÒª½øÐÐת»»''' self.RecType = rec.get(u'RecType', 0) self.RecID = rec.get(u'RecID', 0) self.Time = rec.get(u'Time', 0) self.Value1 = rec.get(u'Value1', 0) self.Value2 = rec.get(u'Value2', 0) self.Value3 = rec.get(u'Value3', 0) self.Value4 = rec.get(u'Value4', 0) self.Value5 = rec.get(u'Value5', 0) self.Value6 = rec.get(u'Value6', 0) self.Value7 = rec.get(u'Value7', 0) self.Value8 = rec.get(u'Value8', 0) self.UserDataLen = rec.get(u'UserDataLen', 0) self.UserData = fix_outgoingText(rec.get(u'UserData', u'')) #Can not implement adoLoadStr method:No key defined! #Can not implement adoInsertStr method:No key defined! #Can not implement adoUpdateStr method:No key defined! #Can not implement adoUpdateStr method:No key defined! #Can not implement adoCheckUpdateStr method:No key defined! #Can not implement adoCheckUpdateExStr method:No key defined! def getAdoRecords(self, resultCollection): '''²éѯ½á¹û´ò°ü³É¶þ½øÖÆÁ÷''' result = '' result = CommFunc.WriteDWORD(result, resultCollection.count()) for rec in resultCollection: self.readRecord(rec) result += self.getBuffer() return result #Can not implement adoQueryIndexStr method:No key defined! def adoQueryCustom(self, collection, queryDict): '''×Ô¶¨Òå²éѯ''' resultCollection = collection.find(queryDict) return self.getAdoRecords(resultCollection) def adoQueryAll(self, collection): '''²éѯËùÓÐ''' resultCollection = collection.find() return self.getAdoRecords(resultCollection) #Can not implement adoDeleteByIndexStr method:No key defined! def outputString(self): output = '''// ͨÓüǼ±íР#tagDBGameRec: RecType = %s, RecID = %s, Time = %s, Value1 = %s, Value2 = %s, Value3 = %s, Value4 = %s, Value5 = %s, Value6 = %s, Value7 = %s, Value8 = %s, UserDataLen = %s, UserData = %s, ADOResult = %s, '''%( self.RecType, self.RecID, self.Time, self.Value1, self.Value2, self.Value3, self.Value4, self.Value5, self.Value6, self.Value7, self.Value8, self.UserDataLen, self.UserData, self.ADOResult, ) return output def dumpString(self): output = '''%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s'''%( self.RecType, self.RecID, self.Time, self.Value1, self.Value2, self.Value3, self.Value4, self.Value5, self.Value6, self.Value7, self.Value8, self.UserDataLen, self.UserData, ) return output # ¹¦ÄܶÓÎé±í #tagDBFuncTeam class tagDBFuncTeam(Structure): _pack_ = 1 _fields_ = [ ('TeamID', ctypes.c_ulong), ('TeamName', ctypes.c_char * 33), ('ZoneID', ctypes.c_ubyte), ('FuncMapID', ctypes.c_ulong), ('FuncMapEx', ctypes.c_ulong), ('CreateTime', ctypes.c_ulong), ('CaptainID', ctypes.c_ulong), ('MinLV', ctypes.c_ushort), ('MinFightPower', ctypes.c_ulong), ('MinFightPowerEx', ctypes.c_ulong), ('ServerOnly', ctypes.c_ubyte), ('NeedCheck', ctypes.c_ubyte), ('ApplyIDLen', ctypes.c_ushort), ('ApplyIDList', ctypes.c_char_p), ('Value1', ctypes.c_ulong), ('Value2', ctypes.c_ulong), ('Value3', ctypes.c_ulong), ('Value4', ctypes.c_ulong), ('Value5', ctypes.c_ulong), ('ADOResult', ctypes.c_ulong), ] def __init__(self): Structure.__init__(self) self.clear() def clear(self): self.TeamID = 0 self.TeamName = '' self.ZoneID = 0 self.FuncMapID = 0 self.FuncMapEx = 0 self.CreateTime = 0 self.CaptainID = 0 self.MinLV = 0 self.MinFightPower = 0 self.MinFightPowerEx = 0 self.ServerOnly = 0 self.NeedCheck = 0 self.ApplyIDLen = 0 self.ApplyIDList = '' self.Value1 = 0 self.Value2 = 0 self.Value3 = 0 self.Value4 = 0 self.Value5 = 0 def readData(self, buf, pos = 0, length = 0): if not pos <= length: msg = error.formatMsg('error', error.ERROR_NO_148, '(pos = %s) > (length = %s)'%(pos, length)) mylog.error(msg) return -1 if len(buf) < pos + self.getLength(): msg = error.formatMsg('error', error.ERROR_NO_149, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength())) mylog.error(msg) self.clear() self.TeamID, pos = CommFunc.ReadDWORD(buf, pos) self.TeamName, pos = CommFunc.ReadString(buf, pos, 33) self.ZoneID, pos = CommFunc.ReadBYTE(buf, pos) self.FuncMapID, pos = CommFunc.ReadDWORD(buf, pos) self.FuncMapEx, pos = CommFunc.ReadDWORD(buf, pos) self.CreateTime, pos = CommFunc.ReadDWORD(buf, pos) self.CaptainID, pos = CommFunc.ReadDWORD(buf, pos) self.MinLV, pos = CommFunc.ReadWORD(buf, pos) self.MinFightPower, pos = CommFunc.ReadDWORD(buf, pos) self.MinFightPowerEx, pos = CommFunc.ReadDWORD(buf, pos) self.ServerOnly, pos = CommFunc.ReadBYTE(buf, pos) self.NeedCheck, pos = CommFunc.ReadBYTE(buf, pos) self.ApplyIDLen, pos = CommFunc.ReadWORD(buf, pos) tmp, pos = CommFunc.ReadString(buf, pos, self.ApplyIDLen) self.ApplyIDList = ctypes.c_char_p(tmp) self.Value1, pos = CommFunc.ReadDWORD(buf, pos) self.Value2, pos = CommFunc.ReadDWORD(buf, pos) self.Value3, pos = CommFunc.ReadDWORD(buf, pos) self.Value4, pos = CommFunc.ReadDWORD(buf, pos) self.Value5, pos = CommFunc.ReadDWORD(buf, pos) return self.getLength() def getBuffer(self): buf = '' buf = CommFunc.WriteDWORD(buf, self.TeamID) buf = CommFunc.WriteString(buf, sizeof(ctypes.c_char) * 33, self.TeamName) buf = CommFunc.WriteBYTE(buf, self.ZoneID) buf = CommFunc.WriteDWORD(buf, self.FuncMapID) buf = CommFunc.WriteDWORD(buf, self.FuncMapEx) buf = CommFunc.WriteDWORD(buf, self.CreateTime) buf = CommFunc.WriteDWORD(buf, self.CaptainID) buf = CommFunc.WriteWORD(buf, self.MinLV) buf = CommFunc.WriteDWORD(buf, self.MinFightPower) buf = CommFunc.WriteDWORD(buf, self.MinFightPowerEx) buf = CommFunc.WriteBYTE(buf, self.ServerOnly) buf = CommFunc.WriteBYTE(buf, self.NeedCheck) buf = CommFunc.WriteWORD(buf, self.ApplyIDLen) buf = CommFunc.WriteString(buf, self.ApplyIDLen, self.ApplyIDList) buf = CommFunc.WriteDWORD(buf, self.Value1) buf = CommFunc.WriteDWORD(buf, self.Value2) buf = CommFunc.WriteDWORD(buf, self.Value3) buf = CommFunc.WriteDWORD(buf, self.Value4) buf = CommFunc.WriteDWORD(buf, self.Value5) return buf def getLength(self): length = 0 length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_char) * 33 length += sizeof(ctypes.c_ubyte) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ushort) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ubyte) length += sizeof(ctypes.c_ubyte) length += sizeof(ctypes.c_ushort) length += self.ApplyIDLen length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) length += sizeof(ctypes.c_ulong) return length def getRecord(self): '''×éÖ¯´æ´¢¼Ç¼''' rec = {} rec[u'TeamID'] = self.TeamID rec[u'TeamName'] = fix_incomingText(self.TeamName) rec[u'ZoneID'] = self.ZoneID rec[u'FuncMapID'] = self.FuncMapID rec[u'FuncMapEx'] = self.FuncMapEx rec[u'CreateTime'] = self.CreateTime rec[u'CaptainID'] = self.CaptainID rec[u'MinLV'] = self.MinLV rec[u'MinFightPower'] = self.MinFightPower rec[u'MinFightPowerEx'] = self.MinFightPowerEx rec[u'ServerOnly'] = self.ServerOnly rec[u'NeedCheck'] = self.NeedCheck rec[u'ApplyIDLen'] = self.ApplyIDLen rec[u'ApplyIDList'] = fix_incomingText(self.ApplyIDList) rec[u'Value1'] = self.Value1 rec[u'Value2'] = self.Value2 rec[u'Value3'] = self.Value3 rec[u'Value4'] = self.Value4 rec[u'Value5'] = self.Value5 return rec def readRecord(self, rec): '''ÓÉÓÚMongoDB¶Á³öÀ´ÊÇunicode,ËùÓÐ×Ö·û´®ÐèÒª½øÐÐת»»''' self.TeamID = rec.get(u'TeamID', 0) self.TeamName = fix_outgoingText(rec.get(u'TeamName', u'')) self.ZoneID = rec.get(u'ZoneID', 0) self.FuncMapID = rec.get(u'FuncMapID', 0) self.FuncMapEx = rec.get(u'FuncMapEx', 0) self.CreateTime = rec.get(u'CreateTime', 0) self.CaptainID = rec.get(u'CaptainID', 0) self.MinLV = rec.get(u'MinLV', 0) self.MinFightPower = rec.get(u'MinFightPower', 0) self.MinFightPowerEx = rec.get(u'MinFightPowerEx', 0) self.ServerOnly = rec.get(u'ServerOnly', 0) self.NeedCheck = rec.get(u'NeedCheck', 0) self.ApplyIDLen = rec.get(u'ApplyIDLen', 0) self.ApplyIDList = fix_outgoingText(rec.get(u'ApplyIDList', u'')) self.Value1 = rec.get(u'Value1', 0) self.Value2 = rec.get(u'Value2', 0) self.Value3 = rec.get(u'Value3', 0) self.Value4 = rec.get(u'Value4', 0) self.Value5 = rec.get(u'Value5', 0) #Can not implement adoLoadStr method:No key defined! #Can not implement adoInsertStr method:No key defined! #Can not implement adoUpdateStr method:No key defined! #Can not implement adoUpdateStr method:No key defined! #Can not implement adoCheckUpdateStr method:No key defined! #Can not implement adoCheckUpdateExStr method:No key defined! def getAdoRecords(self, resultCollection): '''²éѯ½á¹û´ò°ü³É¶þ½øÖÆÁ÷''' result = '' result = CommFunc.WriteDWORD(result, resultCollection.count()) for rec in resultCollection: self.readRecord(rec) result += self.getBuffer() return result #Can not implement adoQueryIndexStr method:No key defined! def adoQueryCustom(self, collection, queryDict): '''×Ô¶¨Òå²éѯ''' resultCollection = collection.find(queryDict) return self.getAdoRecords(resultCollection) def adoQueryAll(self, collection): '''²éѯËùÓÐ''' resultCollection = collection.find() return self.getAdoRecords(resultCollection) #Can not implement adoDeleteByIndexStr method:No key defined! def outputString(self): output = '''// ¹¦ÄܶÓÎé±í #tagDBFuncTeam: TeamID = %s, TeamName = %s, ZoneID = %s, FuncMapID = %s, FuncMapEx = %s, CreateTime = %s, CaptainID = %s, MinLV = %s, MinFightPower = %s, MinFightPowerEx = %s, ServerOnly = %s, NeedCheck = %s, ApplyIDLen = %s, ApplyIDList = %s, Value1 = %s, Value2 = %s, Value3 = %s, Value4 = %s, Value5 = %s, ADOResult = %s, '''%( self.TeamID, self.TeamName, self.ZoneID, self.FuncMapID, self.FuncMapEx, self.CreateTime, self.CaptainID, self.MinLV, self.MinFightPower, self.MinFightPowerEx, self.ServerOnly, self.NeedCheck, self.ApplyIDLen, self.ApplyIDList, self.Value1, self.Value2, self.Value3, self.Value4, self.Value5, self.ADOResult, ) return output def dumpString(self): output = '''%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s'''%( self.TeamID, self.TeamName, self.ZoneID, self.FuncMapID, self.FuncMapEx, self.CreateTime, self.CaptainID, self.MinLV, self.MinFightPower, self.MinFightPowerEx, self.ServerOnly, self.NeedCheck, self.ApplyIDLen, self.ApplyIDList, self.Value1, self.Value2, self.Value3, self.Value4, self.Value5, ) return output #CharÊý×éÀàÐÍSet½Ó¿Ú,ʹÓøýӿڶԴËÀàÐÍÊý¾Ý¸³Öµ£¬·ÀÖ¹¸³ÖµµÄÊý¾Ý¹ý³¤±¨´í def SetTeamName(self,Str): if len(Str)<=33: self.TeamName = Str else: self.TeamName = Str[:33] # ¹¦ÄܶÓÎé³ÉÔ±±í #tagDBFuncTeamMem class tagDBFuncTeamMem(Structure): _pack_ = 1 _fields_ = [ ('TeamID', ctypes.c_ulong), ('PlayerID', ctypes.c_ulong), ('Value1', ctypes.c_ulong), ('Value2', ctypes.c_ulong), ('Value3', ctypes.c_ulong), ('Value4', ctypes.c_ulong), ('Value5', ctypes.c_ulong), ('ADOResult', ctypes.c_ulong), ] def __init__(self): Structure.__init__(self) self.clear() def clear(self): memset(addressof(self), 0, self.getLength()) def readData(self, buf, pos = 0, length = 0): if not pos <= length: msg = error.formatMsg('error', error.ERROR_NO_148, '(pos = %s) > (length = %s)'%(pos, length)) mylog.error(msg) return -1 if len(buf) < pos + self.getLength(): msg = error.formatMsg('error', error.ERROR_NO_149, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength())) mylog.error(msg) self.clear() self.TeamID, pos = CommFunc.ReadDWORD(buf, pos) self.PlayerID, pos = CommFunc.ReadDWORD(buf, pos) self.Value1, pos = CommFunc.ReadDWORD(buf, pos) self.Value2, pos = CommFunc.ReadDWORD(buf, pos) self.Value3, pos = CommFunc.ReadDWORD(buf, pos) self.Value4, pos = CommFunc.ReadDWORD(buf, pos) self.Value5, pos = CommFunc.ReadDWORD(buf, pos) return self.getLength() def getBuffer(self): buf = create_string_buffer(self.getLength()) memmove(addressof(buf), addressof(self), self.getLength()) return string_at(addressof(buf), self.getLength()) def getLength(self): return sizeof(tagDBFuncTeamMem) def getRecord(self): '''×éÖ¯´æ´¢¼Ç¼''' rec = {} rec[u'TeamID'] = self.TeamID rec[u'PlayerID'] = self.PlayerID rec[u'Value1'] = self.Value1 rec[u'Value2'] = self.Value2 rec[u'Value3'] = self.Value3 rec[u'Value4'] = self.Value4 rec[u'Value5'] = self.Value5 return rec def readRecord(self, rec): '''ÓÉÓÚMongoDB¶Á³öÀ´ÊÇunicode,ËùÓÐ×Ö·û´®ÐèÒª½øÐÐת»»''' self.TeamID = rec.get(u'TeamID', 0) self.PlayerID = rec.get(u'PlayerID', 0) self.Value1 = rec.get(u'Value1', 0) self.Value2 = rec.get(u'Value2', 0) self.Value3 = rec.get(u'Value3', 0) self.Value4 = rec.get(u'Value4', 0) self.Value5 = rec.get(u'Value5', 0) #Can not implement adoLoadStr method:No key defined! #Can not implement adoInsertStr method:No key defined! #Can not implement adoUpdateStr method:No key defined! #Can not implement adoUpdateStr method:No key defined! #Can not implement adoCheckUpdateStr method:No key defined! #Can not implement adoCheckUpdateExStr method:No key defined! def getAdoRecords(self, resultCollection): '''²éѯ½á¹û´ò°ü³É¶þ½øÖÆÁ÷''' result = '' result = CommFunc.WriteDWORD(result, resultCollection.count()) for rec in resultCollection: self.readRecord(rec) result += self.getBuffer() return result #Can not implement adoQueryIndexStr method:No key defined! def adoQueryCustom(self, collection, queryDict): '''×Ô¶¨Òå²éѯ''' resultCollection = collection.find(queryDict) return self.getAdoRecords(resultCollection) def adoQueryAll(self, collection): '''²éѯËùÓÐ''' resultCollection = collection.find() return self.getAdoRecords(resultCollection) #Can not implement adoDeleteByIndexStr method:No key defined! def outputString(self): output = '''// ¹¦ÄܶÓÎé³ÉÔ±±í #tagDBFuncTeamMem: TeamID = %s, PlayerID = %s, Value1 = %s, Value2 = %s, Value3 = %s, Value4 = %s, Value5 = %s, ADOResult = %s, '''%( self.TeamID, self.PlayerID, self.Value1, self.Value2, self.Value3, self.Value4, self.Value5, self.ADOResult, ) return output def dumpString(self): output = '''%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s'''%( self.TeamID, self.PlayerID, self.Value1, self.Value2, self.Value3, self.Value4, self.Value5, ) return output