From f198885f31c9c7eb19eb28adce562e39e64d581c Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期五, 18 七月 2025 16:23:11 +0800 Subject: [PATCH] 121 【武将】武将系统-服务端(属性计算、战斗力计算;新角色初始给默认装备、默认阵容武将;) --- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyMongoDB/Collections/DataServerPlayerData.py | 5148 ++++++++++++++++++++++++++++++++++++++++++++++++++++------- 1 files changed, 4,539 insertions(+), 609 deletions(-) diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyMongoDB/Collections/DataServerPlayerData.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyMongoDB/Collections/DataServerPlayerData.py index fcb6906..9b2dbc8 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyMongoDB/Collections/DataServerPlayerData.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyMongoDB/Collections/DataServerPlayerData.py @@ -26,6 +26,7 @@ import inspect DBConfig = __import__('Config.DBConfig') +#------------------------------------------------------ #玩家详细信息#tagDBPlayer class tagDBPlayer(Structure): _pack_ = 1 @@ -42,6 +43,7 @@ ('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), @@ -198,6 +200,7 @@ 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) @@ -350,6 +353,7 @@ 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 @@ -490,6 +494,7 @@ 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) @@ -845,6 +850,7 @@ Face = %s, FacePic = %s, Job = %s, + RoleType = %s, ReincarnationLv = %s, LV = %s, TotalExp = %s, @@ -983,6 +989,7 @@ self.Face, self.FacePic, self.Job, + self.RoleType, self.ReincarnationLv, self.LV, self.TotalExp, @@ -1112,7 +1119,7 @@ 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'''%( + 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, @@ -1125,6 +1132,7 @@ self.Face, self.FacePic, self.Job, + self.RoleType, self.ReincarnationLv, self.LV, self.TotalExp, @@ -1317,7 +1325,6 @@ else: self.Operate = Str[:15] - #---------------------------------------------------------------------- #玩家账户信息#tagDSAccount class tagDSAccount(Structure): @@ -1891,7 +1898,7 @@ ('ItemGUID', ctypes.c_char * 40), ('PlayerID', ctypes.c_ulong), ('ItemTypeID', ctypes.c_ulong), - ('Count', ctypes.c_ushort), + ('Count', ctypes.c_ulong), ('IsLocked', ctypes.c_ubyte), ('ItemPlaceType', ctypes.c_ubyte), ('ItemPlaceIndex', ctypes.c_ushort), @@ -1939,7 +1946,7 @@ 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.Count, pos = CommFunc.ReadDWORD(buf, pos) self.IsLocked, pos = CommFunc.ReadBYTE(buf, pos) self.ItemPlaceType, pos = CommFunc.ReadBYTE(buf, pos) self.ItemPlaceIndex, pos = CommFunc.ReadWORD(buf, pos) @@ -1958,7 +1965,7 @@ 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.WriteDWORD(buf, self.Count) buf = CommFunc.WriteBYTE(buf, self.IsLocked) buf = CommFunc.WriteBYTE(buf, self.ItemPlaceType) buf = CommFunc.WriteWORD(buf, self.ItemPlaceIndex) @@ -1976,7 +1983,7 @@ 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_ulong) length += sizeof(ctypes.c_ubyte) length += sizeof(ctypes.c_ubyte) length += sizeof(ctypes.c_ushort) @@ -2252,7 +2259,6 @@ self.CreateTime = Str else: self.CreateTime = Str[:30] - @@ -5362,294 +5368,6 @@ #------------------------------------------------------ -#排行榜#tagDBBillboard -class tagDBBillboard(Structure): - _pack_ = 1 - _fields_ = [ - ('Type', ctypes.c_ubyte), - ('ID', ctypes.c_ulong), - ('ID2', ctypes.c_ulong), - ('Name1', ctypes.c_char * 33), - ('Name2', ctypes.c_char * 33), - ('Type2', ctypes.c_ubyte), - ('Value1', ctypes.c_ulong), - ('Value2', ctypes.c_ulong), - ('CmpValue', ctypes.c_ulong), - ('CmpValue2', ctypes.c_ulong), - ('CmpValue3', 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(tagDBBillboard) - - def getRecord(self): - '''组织存储记录''' - rec = {} - rec[u'Type'] = self.Type - 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'CmpValue'] = self.CmpValue - rec[u'CmpValue2'] = self.CmpValue2 - rec[u'CmpValue3'] = self.CmpValue3 - return rec - - def readRecord(self, rec): - '''由于MongoDB读出来是unicode,所有字符串需要进行转换''' - self.Type = rec.get(u'Type', 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.CmpValue = rec.get(u'CmpValue', 0) - self.CmpValue2 = rec.get(u'CmpValue2', 0) - self.CmpValue3 = rec.get(u'CmpValue3', 0) - - def adoLoad(self, collection): - '''使用KEY查找并读取''' - resultCollection = collection.find({'Type':self.Type,'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!Type = %s, error = %s, trycnt = %d'%(self.Type, err, trycnt)) - mylog.error(msg) - - return False - return True - - - def adoUpdate(self, collection): - '''执行更新''' - trycnt = 0 - rec = self.getRecord() - while(True): - try: - collection.update({'Type':self.Type,'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!Type = %s, error = %s, trycnt = %d'%(self.Type, 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!Type = %s, error = %s, trycnt = %d'%(self.Type, err, trycnt)) - mylog.error(msg) - - return False - return True - - - def adoCheckUpdate(self, collection): - '''根据情况执行插入或更新''' - resultCollection = collection.find({'Type':self.Type,'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({'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 = '''//排行榜#tagDBBillboard: - Type = %s, - ID = %s, - ID2 = %s, - Name1 = %s, - Name2 = %s, - Type2 = %s, - Value1 = %s, - Value2 = %s, - CmpValue = %s, - CmpValue2 = %s, - CmpValue3 = %s, - ADOResult = %s, - '''%( - self.Type, - self.ID, - self.ID2, - self.Name1, - self.Name2, - self.Type2, - self.Value1, - self.Value2, - self.CmpValue, - self.CmpValue2, - self.CmpValue3, - 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.Type, - self.ID, - self.ID2, - self.Name1, - self.Name2, - self.Type2, - self.Value1, - self.Value2, - self.CmpValue, - self.CmpValue2, - self.CmpValue3, - ) - 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)<=33: - self.Name2 = Str - else: - self.Name2 = Str[:33] - - -#------------------------------------------------------ #国家家族战排位赛表#tagDBCountryFamilyWarRace class tagDBCountryFamilyWarRace(Structure): _pack_ = 1 @@ -6548,288 +6266,7 @@ else: self.KingName = 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_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), - ('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.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.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.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.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.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_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_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] - #------------------------------------------------------ #帮会科技表#tagDBFamilyTech @@ -12504,6 +11941,12 @@ ('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), ] @@ -12515,18 +11958,42 @@ 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)) + 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_151, 'len = %s while %s expected!'%(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) - return -1 self.clear() - memmove(addressof(self), buf[pos:], self.getLength()) + 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() @@ -12562,6 +12029,12 @@ 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): @@ -12587,6 +12060,12 @@ 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查找并读取''' @@ -12759,6 +12238,12 @@ Extra3 = %s, Extra4 = %s, Extra5 = %s, + Extra6 = %s, + Extra7 = %s, + Extra8 = %s, + Extra9 = %s, + Extra10 = %s, + ServerID = %s, ADOResult = %s, '''%( self.ID, @@ -12782,12 +12267,18 @@ 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'''%( + 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, @@ -12809,6 +12300,12 @@ self.Extra3, self.Extra4, self.Extra5, + self.Extra6, + self.Extra7, + self.Extra8, + self.Extra9, + self.Extra10, + self.ServerID, ) return output @@ -12843,6 +12340,7 @@ else: self.BeChallengedTime = Str[:20] + #------------------------------------------------------ @@ -13884,6 +13382,8 @@ ('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), @@ -13893,6 +13393,9 @@ ('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), @@ -13921,6 +13424,8 @@ 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) @@ -13930,6 +13435,9 @@ 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() @@ -13952,6 +13460,8 @@ 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 @@ -13961,6 +13471,9 @@ 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 @@ -13973,6 +13486,8 @@ 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) @@ -13982,6 +13497,9 @@ 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) @@ -14141,6 +13659,8 @@ Sex = %s, LV = %s, Job = %s, + Face = %s, + FacePic = %s, FamilyLV = %s, FamilyName = %s, FamilyActiveValue = %s, @@ -14150,6 +13670,9 @@ Exattr3 = %s, Exattr4 = %s, Exattr5 = %s, + Exattr6 = %s, + Exattr7 = %s, + Exattr8 = %s, ReincarnationLv = %s, OperateInfo = %s, ADOResult = %s, @@ -14160,6 +13683,8 @@ self.Sex, self.LV, self.Job, + self.Face, + self.FacePic, self.FamilyLV, self.FamilyName, self.FamilyActiveValue, @@ -14169,6 +13694,9 @@ self.Exattr3, self.Exattr4, self.Exattr5, + self.Exattr6, + self.Exattr7, + self.Exattr8, self.ReincarnationLv, self.OperateInfo, self.ADOResult, @@ -14176,13 +13704,15 @@ 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'''%( + 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, @@ -14192,6 +13722,9 @@ self.Exattr3, self.Exattr4, self.Exattr5, + self.Exattr6, + self.Exattr7, + self.Exattr8, self.ReincarnationLv, self.OperateInfo, ) @@ -14210,7 +13743,8 @@ else: self.FamilyName = Str[:33] - + + #------------------------------------------------------ #玩家骠车马匹表#tagPlayerHorseTable class tagPlayerHorseTable(Structure): @@ -16465,6 +15999,8 @@ ('JobLevel', ctypes.c_ubyte), ('LV', ctypes.c_ushort), ('RealmLV', ctypes.c_ushort), + ('Face', ctypes.c_ulong), + ('FacePic', ctypes.c_ulong), ('ADOResult', ctypes.c_ulong), ] @@ -16476,18 +16012,26 @@ 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)) + 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_151, 'len = %s while %s expected!'%(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) - return -1 self.clear() - memmove(addressof(self), buf[pos:], self.getLength()) + 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() @@ -16511,6 +16055,8 @@ 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): @@ -16524,6 +16070,8 @@ 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! @@ -16636,6 +16184,8 @@ JobLevel = %s, LV = %s, RealmLV = %s, + Face = %s, + FacePic = %s, ADOResult = %s, '''%( self.TeamID, @@ -16647,12 +16197,14 @@ 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'''%( + 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, @@ -16662,6 +16214,8 @@ self.JobLevel, self.LV, self.RealmLV, + self.Face, + self.FacePic, ) return output @@ -16672,6 +16226,7 @@ else: self.PlayerName = Str[:33] + #通用记录表#tagUniversalGameRec @@ -19560,6 +19115,8 @@ ('RealmLV', ctypes.c_ushort), ('OnlineType', ctypes.c_ubyte), ('RefCount', ctypes.c_ulong), + ('Face', ctypes.c_ulong), + ('FacePic', ctypes.c_ulong), ('ADOResult', ctypes.c_ulong), ] @@ -19587,6 +19144,8 @@ 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() @@ -19608,6 +19167,8 @@ 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): @@ -19619,6 +19180,8 @@ 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查找并读取''' @@ -19777,6 +19340,8 @@ RealmLV = %s, OnlineType = %s, RefCount = %s, + Face = %s, + FacePic = %s, ADOResult = %s, '''%( self.PlayerID, @@ -19786,12 +19351,14 @@ 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'''%( + output = '''%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s'''%( self.PlayerID, self.PlayerName, self.Job, @@ -19799,6 +19366,8 @@ self.RealmLV, self.OnlineType, self.RefCount, + self.Face, + self.FacePic, ) return output @@ -21579,6 +21148,8 @@ ('PKScore', ctypes.c_ulong), ('DanLV', ctypes.c_ubyte), ('Time', ctypes.c_ulong), + ('Face', ctypes.c_ulong), + ('FacePic', ctypes.c_ulong), ('ADOResult', ctypes.c_ulong), ] @@ -21609,6 +21180,8 @@ 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() @@ -21633,6 +21206,8 @@ 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): @@ -21647,6 +21222,8 @@ 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! @@ -21692,6 +21269,8 @@ PKScore = %s, DanLV = %s, Time = %s, + Face = %s, + FacePic = %s, ADOResult = %s, '''%( self.ZoneID, @@ -21704,12 +21283,14 @@ 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'''%( + 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, @@ -21720,6 +21301,8 @@ self.PKScore, self.DanLV, self.Time, + self.Face, + self.FacePic, ) return output @@ -23747,23 +23330,32 @@ self.TimeStr = Str[:19] +#------------------------------------------------------ # 跨服排行榜 #tagDBCrossBillboard class tagDBCrossBillboard(Structure): _pack_ = 1 _fields_ = [ - ('GroupValue1', ctypes.c_ubyte), - ('GroupValue2', ctypes.c_ubyte), + ('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 * 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), ] @@ -23771,9 +23363,28 @@ Structure.__init__(self) self.clear() - def clear(self): - memset(addressof(self), 0, self.getLength()) + 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: @@ -23784,29 +23395,79 @@ 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.ReadBYTE(buf, pos) - self.GroupValue2, pos = CommFunc.ReadBYTE(buf, pos) + 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, 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 = create_string_buffer(self.getLength()) - memmove(addressof(buf), addressof(self), self.getLength()) - return string_at(addressof(buf), self.getLength()) + 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): - return sizeof(tagDBCrossBillboard) + 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): '''组织存储记录''' @@ -23821,9 +23482,17 @@ 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): @@ -23838,9 +23507,17 @@ 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! @@ -23886,9 +23563,17 @@ 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, @@ -23901,15 +23586,23 @@ 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'''%( + 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, @@ -23920,9 +23613,17 @@ 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 @@ -23934,12 +23635,14 @@ self.Name1 = Str[:33] def SetName2(self,Str): - if len(Str)<=33: + if len(Str)<=65: self.Name2 = Str else: - self.Name2 = Str[:33] + self.Name2 = Str[:65] + + # 跨服补偿个人领取表 #tagDBCrossPersonalCompensation class tagDBCrossPersonalCompensation(Structure): _pack_ = 1 @@ -24885,7 +24588,7 @@ ) return output - + # 福地矿物表 #tagDBPyMineAreaItem class tagDBPyMineAreaItem(Structure): _pack_ = 1 @@ -25406,3 +25109,4230 @@ ) 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 + + -- Gitblit v1.8.0