#!/usr/bin/python # -*- coding: GBK -*- #------------------------------------------------------------------------------- # #------------------------------------------------------------------------------- # #ʹÓÃProtocolStudio.CodeMaker.ÆÕͨ.NewParseNetPackStruct.pyÉú³É from ctypes import * #import sys #sys.path.append('..\\') from PackCommonDef import tagHead from Common import (CommFunc,) #01 01µÇ¼°ü#tagLPLoginPack class tagLPLoginPack(Structure): Head = tagHead() GUIDLen = 0 #(BYTE GUIDLen) ClientGUID = "" #(String ClientGUID)//¿Í»§¶ËGUID CodeLen = 0 #(BYTE CodeLen) VerifyCode = "" #(String VerifyCode)//¼ÓÃܺóµÄУÑéÂë#(ClientGUID+TimeStamp)µÄMD5µÄhex×Ö·û´® VerLen = 0 #(BYTE VerLen) Version = "" #(String Version)//ЭÒé°æ±¾ºÅ TimeLen = 0 #(BYTE TimeLen) TimeStamp = "" #(String TimeStamp)//¿Í»§¶ËµÇ¼ʱ¼ä´Á GroupID = 0 #(DWORD GroupID)//×éID£¨Ó²¼þ£© data = None def __init__(self): self.Clear() self.Head.Cmd = 0x01 self.Head.SubCmd = 0x01 return def ReadData(self, _lpData, _pos=0, _Len=0): self.Clear() _pos = self.Head.ReadData(_lpData, _pos) self.GUIDLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) self.ClientGUID,_pos = CommFunc.ReadString(_lpData, _pos,self.GUIDLen) self.CodeLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) self.VerifyCode,_pos = CommFunc.ReadString(_lpData, _pos,self.CodeLen) self.VerLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) self.Version,_pos = CommFunc.ReadString(_lpData, _pos,self.VerLen) self.TimeLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) self.TimeStamp,_pos = CommFunc.ReadString(_lpData, _pos,self.TimeLen) self.GroupID,_pos = CommFunc.ReadDWORD(_lpData, _pos) return _pos def Clear(self): self.Head = tagHead() self.Head.Clear() self.Head.Cmd = 0x01 self.Head.SubCmd = 0x01 self.GUIDLen = 0 self.ClientGUID = "" self.CodeLen = 0 self.VerifyCode = "" self.VerLen = 0 self.Version = "" self.TimeLen = 0 self.TimeStamp = "" self.GroupID = 0 return def GetLength(self): length = 0 length += self.Head.GetLength() length += 1 length += len(self.ClientGUID) length += 1 length += len(self.VerifyCode) length += 1 length += len(self.Version) length += 1 length += len(self.TimeStamp) length += 4 return length def GetBuffer(self): data = '' data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) data = CommFunc.WriteBYTE(data, self.GUIDLen) data = CommFunc.WriteString(data, self.GUIDLen, self.ClientGUID) data = CommFunc.WriteBYTE(data, self.CodeLen) data = CommFunc.WriteString(data, self.CodeLen, self.VerifyCode) data = CommFunc.WriteBYTE(data, self.VerLen) data = CommFunc.WriteString(data, self.VerLen, self.Version) data = CommFunc.WriteBYTE(data, self.TimeLen) data = CommFunc.WriteString(data, self.TimeLen, self.TimeStamp) data = CommFunc.WriteDWORD(data, self.GroupID) return data def OutputString(self): DumpString = ''' Head:%s, GUIDLen:%d, ClientGUID:%s, CodeLen:%d, VerifyCode:%s, VerLen:%d, Version:%s, TimeLen:%d, TimeStamp:%s, GroupID:%d '''\ %( self.Head.OutputString(), self.GUIDLen, self.ClientGUID, self.CodeLen, self.VerifyCode, self.VerLen, self.Version, self.TimeLen, self.TimeStamp, self.GroupID ) return DumpString #01 02µÇ³ö°ü#tagLPLogoutPack class tagLPLogoutPack(Structure): _pack_ = 1 _fields_ = [ ("Cmd", c_ubyte), ("SubCmd", c_ubyte), ] def __init__(self): self.Clear() self.Cmd = 0x01 self.SubCmd = 0x02 return def ReadData(self, stringData, _pos=0, _len=0): self.Clear() memmove(addressof(self), stringData[_pos:], self.GetLength()) return _pos + self.GetLength() def Clear(self): self.Cmd = 0x01 self.SubCmd = 0x02 return def GetLength(self): return sizeof(tagLPLogoutPack) def GetBuffer(self): return string_at(addressof(self), self.GetLength()) def OutputString(self): DumpString = '''//01 02µÇ³ö°ü//tagLPLogoutPack: Cmd:%s, SubCmd:%s '''\ %( self.Cmd, self.SubCmd ) return DumpString #------------------------------------------------------ #01 03ÐÄÌø°ü#tagLPHeartbeat class tagLPHeartbeat(Structure): _pack_ = 1 _fields_ = [ ("Cmd", c_ubyte), ("SubCmd", c_ubyte), ] def __init__(self): self.Clear() self.Cmd = 0x01 self.SubCmd = 0x03 return def ReadData(self, stringData, _pos=0, _len=0): self.Clear() memmove(addressof(self), stringData[_pos:], self.GetLength()) return _pos + self.GetLength() def Clear(self): self.Cmd = 0x01 self.SubCmd = 0x03 return def GetLength(self): return sizeof(tagLPHeartbeat) def GetBuffer(self): return string_at(addressof(self), self.GetLength()) def OutputString(self): DumpString = '''//01 03ÐÄÌø°ü//tagLPHeartbeat: Cmd:%s, SubCmd:%s '''\ %( self.Cmd, self.SubCmd ) return DumpString #±¨Ãû¿ç·þÕ½#tagLPRegisterPlayer class tagLPRegisterPlayer(Structure): Type = 0 #(BYTE Type) DataLen = 0 #(DWORD DataLen) Data = "" #(String Data) SelectMapID = 0 #(DWORD SelectMapID) SelectDataMapID = 0 #(DWORD SelectDataMapID) SelectCopyMapID = 0 #(DWORD SelectCopyMapID) SelectPosX = 0 #(WORD SelectPosX) SelectPosY = 0 #(WORD SelectPosY) data = None def __init__(self): self.Clear() return def ReadData(self, _lpData, _pos=0, _Len=0): self.Clear() self.Type,_pos = CommFunc.ReadBYTE(_lpData, _pos) self.DataLen,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.Data,_pos = CommFunc.ReadString(_lpData, _pos,self.DataLen) self.SelectMapID,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.SelectDataMapID,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.SelectCopyMapID,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.SelectPosX,_pos = CommFunc.ReadWORD(_lpData, _pos) self.SelectPosY,_pos = CommFunc.ReadWORD(_lpData, _pos) return _pos def Clear(self): self.Type = 0 self.DataLen = 0 self.Data = "" self.SelectMapID = 0 self.SelectDataMapID = 0 self.SelectCopyMapID = 0 self.SelectPosX = 0 self.SelectPosY = 0 return def GetLength(self): length = 0 length += 1 length += 4 length += len(self.Data) length += 4 length += 4 length += 4 length += 2 length += 2 return length def GetBuffer(self): data = '' data = CommFunc.WriteBYTE(data, self.Type) data = CommFunc.WriteDWORD(data, self.DataLen) data = CommFunc.WriteString(data, self.DataLen, self.Data) data = CommFunc.WriteDWORD(data, self.SelectMapID) data = CommFunc.WriteDWORD(data, self.SelectDataMapID) data = CommFunc.WriteDWORD(data, self.SelectCopyMapID) data = CommFunc.WriteWORD(data, self.SelectPosX) data = CommFunc.WriteWORD(data, self.SelectPosY) return data def OutputString(self): DumpString = ''' Type:%d, DataLen:%d, Data:%s, SelectMapID:%d, SelectDataMapID:%d, SelectCopyMapID:%d, SelectPosX:%d, SelectPosY:%d '''\ %( self.Type, self.DataLen, self.Data, self.SelectMapID, self.SelectDataMapID, self.SelectCopyMapID, self.SelectPosX, self.SelectPosY ) return DumpString #²éѯ±¨Ãû½á¹û#tagLPQueryRegisterResult class tagLPQueryRegisterResult(Structure): Type = 0 #(BYTE Type)//ÀàÐÍ AccID = "" #(char AccID[65])//ÕʺÅID data = None def __init__(self): self.Clear() return def ReadData(self, _lpData, _pos=0, _Len=0): self.Clear() self.Type,_pos = CommFunc.ReadBYTE(_lpData, _pos) self.AccID,_pos = CommFunc.ReadString(_lpData, _pos,65) return _pos def Clear(self): self.Type = 0 self.AccID = "" return def GetLength(self): length = 0 length += 1 length += 65 return length def GetBuffer(self): data = '' data = CommFunc.WriteBYTE(data, self.Type) data = CommFunc.WriteString(data, 65, self.AccID) return data def OutputString(self): DumpString = ''' Type:%d, AccID:%s '''\ %( self.Type, self.AccID ) return DumpString #Ïò¿ç·þ·þÎñÆ÷·¢ËÍ×Ô¶¨Òå·â°ü#tagLPStringData class tagLPStringData(Structure): Type = 0 #(BYTE Type)//ÀàÐÍ DataLen = 0 #(DWORD DataLen) Data = "" #(String Data)//×Ô¶¨ÒåÏûÏ¢ data = None def __init__(self): self.Clear() return def ReadData(self, _lpData, _pos=0, _Len=0): self.Clear() self.Type,_pos = CommFunc.ReadBYTE(_lpData, _pos) self.DataLen,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.Data,_pos = CommFunc.ReadString(_lpData, _pos,self.DataLen) return _pos def Clear(self): self.Type = 0 self.DataLen = 0 self.Data = "" return def GetLength(self): length = 0 length += 1 length += 4 length += len(self.Data) return length def GetBuffer(self): data = '' data = CommFunc.WriteBYTE(data, self.Type) data = CommFunc.WriteDWORD(data, self.DataLen) data = CommFunc.WriteString(data, self.DataLen, self.Data) return data def OutputString(self): DumpString = ''' Type:%d, DataLen:%d, Data:%s '''\ %( self.Type, self.DataLen, self.Data ) return DumpString #------------------------------------------------------ #»ã±¨Íæ¼ÒÊý¾Ý #tagLPPlayerData class tagLPPlayerData(Structure): Type = 0 #(BYTE Type) PlayerID = 0 #(DWORD PlayerID) DataLen = 0 #(DWORD DataLen) Data = "" #(String Data) data = None def __init__(self): self.Clear() return def ReadData(self, _lpData, _pos=0, _Len=0): self.Clear() self.Type,_pos = CommFunc.ReadBYTE(_lpData, _pos) self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.DataLen,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.Data,_pos = CommFunc.ReadString(_lpData, _pos,self.DataLen) return _pos def Clear(self): self.Type = 0 self.PlayerID = 0 self.DataLen = 0 self.Data = "" return def GetLength(self): length = 0 length += 1 length += 4 length += 4 length += len(self.Data) return length def GetBuffer(self): data = '' data = CommFunc.WriteBYTE(data, self.Type) data = CommFunc.WriteDWORD(data, self.PlayerID) data = CommFunc.WriteDWORD(data, self.DataLen) data = CommFunc.WriteString(data, self.DataLen, self.Data) return data def OutputString(self): DumpString = ''' Type:%d, PlayerID:%d, DataLen:%d, Data:%s '''\ %( self.Type, self.PlayerID, self.DataLen, self.Data ) return DumpString #=============================================================================== # def test(): # import binascii # pack = tagPMLoginPack() # data = pack.GetBuffer() # print 'len = %s'%len(data) # print binascii.b2a_hex(data) # # if __name__ == '__main__': # test() #===============================================================================