#!/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()
|
#===============================================================================
|