#!/usr/bin/python
|
# -*- coding: GBK -*-
|
#×÷Õß :
|
|
import CommFunc
|
import binascii
|
import copy
|
from struct import *
|
from ctypes import *
|
#²å¼þÍ·
|
#
|
#
|
ChNetPackDict={}
|
class BString:
|
NameLen = 0 # (BYTE NameLen )
|
Name = "" # (String Name ) //size = NameLen
|
data = None
|
|
def __init__(self):
|
self.Clear()
|
|
return
|
def ReadData(self, _lpData, _pos=0, _Len=0):
|
self.Clear()
|
|
self.NameLen, _pos = CommFunc.ReadBYTE(_lpData, _pos)
|
self.Name, _pos = CommFunc.ReadString(_lpData, _pos, self.NameLen)
|
|
return _pos
|
|
def Clear(self):
|
self.NameLen = 0
|
self.Name = ""
|
return
|
|
def GetLength(self):
|
length = 0
|
length += 1
|
length += self.Name.Length();
|
return length;
|
|
def GetBuffer(self):
|
data = ''
|
data = CommFunc.WriteBYTE(data, self.NameLen)
|
data = CommFunc.WriteString(data, self.NameLen, self.Name)
|
return data
|
|
def OutputString(self):
|
DumpString = ''':
|
NameLen:%d,
|
Name:%s
|
'''\
|
%(
|
self.NameLen,
|
self.Name
|
)
|
|
return DumpString
|
|
class tagHead:
|
Cmd = 0 # (BYTE Cmd )
|
SubCmd = 0 # (BYTE SubCmd )
|
def __init__(self):
|
self.Clear()
|
|
return
|
def ReadData(self, _lpData, _pos=0, _Len=0):
|
self.Clear()
|
|
self.Cmd, _pos = CommFunc.ReadBYTE(_lpData, _pos)
|
self.SubCmd, _pos = CommFunc.ReadBYTE(_lpData, _pos)
|
|
return _pos
|
|
def Clear(self):
|
self.Cmd = 0
|
self.SubCmd = 0
|
return
|
|
def GetLength(self):
|
length = 0
|
length += 1
|
length += 1
|
return length;
|
|
def GetBuffer(self):
|
data = ''
|
data = CommFunc.WriteBYTE(data, self.Cmd)
|
data = CommFunc.WriteBYTE(data, self.SubCmd)
|
return data
|
|
def OutputString(self):
|
DumpString = ''':
|
Cmd:%d,
|
SubCmd:%d
|
'''\
|
%(
|
self.Cmd,
|
self.SubCmd
|
)
|
|
return DumpString
|
#------------------------------------------------------
|
# C2 03 ¿ç·þÖÐÐÄʼþͬ²½ #tagSSCrossCenterEvent
|
|
class tagSSCrossCenterEvent(Structure):
|
_pack_ = 1
|
_fields_ = [
|
("Cmd", c_ubyte),
|
("SubCmd", c_ubyte),
|
("ServerID", c_int),
|
("ServerType", c_ubyte), #·þÎñÆ÷ÀàÐÍ
|
("EventValue", c_int), #ʼþÖµ£¬yyyyMMddhhÓÃÓÚÅжϹýÌìµÈ
|
]
|
|
def __init__(self):
|
self.Clear()
|
self.Cmd = 0xC2
|
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 = 0xC2
|
self.SubCmd = 0x03
|
self.ServerID = 0
|
self.ServerType = 0
|
self.EventValue = 0
|
return
|
|
def GetLength(self):
|
return sizeof(tagSSCrossCenterEvent)
|
|
def GetBuffer(self):
|
return string_at(addressof(self), self.GetLength())
|
|
def OutputString(self):
|
DumpString = '''// C2 03 ¿ç·þÖÐÐÄʼþͬ²½ //tagSSCrossCenterEvent:
|
Cmd:%s,
|
SubCmd:%s,
|
ServerID:%d,
|
ServerType:%d,
|
EventValue:%d
|
'''\
|
%(
|
self.Cmd,
|
self.SubCmd,
|
self.ServerID,
|
self.ServerType,
|
self.EventValue
|
)
|
return DumpString
|
|
|
m_NAtagSSCrossCenterEvent=tagSSCrossCenterEvent()
|
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagSSCrossCenterEvent.Cmd,m_NAtagSSCrossCenterEvent.SubCmd))] = m_NAtagSSCrossCenterEvent
|
|
|
#------------------------------------------------------
|
# C2 04 ¿ç·þGMÃüÁî #tagSSGMCMD
|
|
class tagSSGMCMD(Structure):
|
Head = tagHead()
|
FromServerID = 0 #(DWORD FromServerID)//Äĸö·þ·¢µÄ
|
ServerType = 0 #(BYTE ServerType)//·þÎñÆ÷ÀàÐÍ
|
PlayerID = 0 #(DWORD PlayerID)//ÄĸöÍæ¼Ò´¥·¢·¢Ë͵Ä
|
CMDLen = 0 #(BYTE CMDLen)
|
CMDStr = "" #(String CMDStr)
|
data = None
|
|
def __init__(self):
|
self.Clear()
|
self.Head.Cmd = 0xC2
|
self.Head.SubCmd = 0x04
|
return
|
|
def ReadData(self, _lpData, _pos=0, _Len=0):
|
self.Clear()
|
_pos = self.Head.ReadData(_lpData, _pos)
|
self.FromServerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
self.ServerType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
self.CMDLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
self.CMDStr,_pos = CommFunc.ReadString(_lpData, _pos,self.CMDLen)
|
return _pos
|
|
def Clear(self):
|
self.Head = tagHead()
|
self.Head.Clear()
|
self.Head.Cmd = 0xC2
|
self.Head.SubCmd = 0x04
|
self.FromServerID = 0
|
self.ServerType = 0
|
self.PlayerID = 0
|
self.CMDLen = 0
|
self.CMDStr = ""
|
return
|
|
def GetLength(self):
|
length = 0
|
length += self.Head.GetLength()
|
length += 4
|
length += 1
|
length += 4
|
length += 1
|
length += len(self.CMDStr)
|
|
return length
|
|
def GetBuffer(self):
|
data = ''
|
data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
|
data = CommFunc.WriteDWORD(data, self.FromServerID)
|
data = CommFunc.WriteBYTE(data, self.ServerType)
|
data = CommFunc.WriteDWORD(data, self.PlayerID)
|
data = CommFunc.WriteBYTE(data, self.CMDLen)
|
data = CommFunc.WriteString(data, self.CMDLen, self.CMDStr)
|
return data
|
|
def OutputString(self):
|
DumpString = '''
|
Head:%s,
|
FromServerID:%d,
|
ServerType:%d,
|
PlayerID:%d,
|
CMDLen:%d,
|
CMDStr:%s
|
'''\
|
%(
|
self.Head.OutputString(),
|
self.FromServerID,
|
self.ServerType,
|
self.PlayerID,
|
self.CMDLen,
|
self.CMDStr
|
)
|
return DumpString
|
|
|
m_NAtagSSGMCMD=tagSSGMCMD()
|
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagSSGMCMD.Head.Cmd,m_NAtagSSGMCMD.Head.SubCmd))] = m_NAtagSSGMCMD
|
|
|
#------------------------------------------------------
|
# C2 02 ·þÎñÆ÷Á¬½Ó¿ç·þ³É¹¦ #tagSSServerConnOK
|
|
class tagSSServerConnOK(Structure):
|
_pack_ = 1
|
_fields_ = [
|
("Cmd", c_ubyte),
|
("SubCmd", c_ubyte),
|
("ServerID", c_int),
|
("ServerType", c_ubyte), #·þÎñÆ÷ÀàÐÍ
|
("IsReconn", c_ubyte), #ÊÇ·ñÖØÁ¬µÄ
|
]
|
|
def __init__(self):
|
self.Clear()
|
self.Cmd = 0xC2
|
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 = 0xC2
|
self.SubCmd = 0x02
|
self.ServerID = 0
|
self.ServerType = 0
|
self.IsReconn = 0
|
return
|
|
def GetLength(self):
|
return sizeof(tagSSServerConnOK)
|
|
def GetBuffer(self):
|
return string_at(addressof(self), self.GetLength())
|
|
def OutputString(self):
|
DumpString = '''// C2 02 ·þÎñÆ÷Á¬½Ó¿ç·þ³É¹¦ //tagSSServerConnOK:
|
Cmd:%s,
|
SubCmd:%s,
|
ServerID:%d,
|
ServerType:%d,
|
IsReconn:%d
|
'''\
|
%(
|
self.Cmd,
|
self.SubCmd,
|
self.ServerID,
|
self.ServerType,
|
self.IsReconn
|
)
|
return DumpString
|
|
|
m_NAtagSSServerConnOK=tagSSServerConnOK()
|
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagSSServerConnOK.Cmd,m_NAtagSSServerConnOK.SubCmd))] = m_NAtagSSServerConnOK
|
|
|
#------------------------------------------------------
|
# C2 10 ¿ç·þͨÓÃÐÅÏ¢°ü #tagSSCommMsg
|
|
class tagSSCommMsg(Structure):
|
Head = tagHead()
|
FromServerID = 0 #(DWORD FromServerID)//Äĸö·þ·¢µÄ
|
ServerType = 0 #(BYTE ServerType)//·þÎñÆ÷ÀàÐÍ
|
PlayerID = 0 #(DWORD PlayerID)//ÄĸöÍæ¼Ò´¥·¢·¢Ë͵Ä
|
TypeLen = 0 #(BYTE TypeLen)
|
MsgType = "" #(String MsgType)
|
Len = 0 #(DWORD Len)
|
Data = "" #(String Data)
|
data = None
|
|
def __init__(self):
|
self.Clear()
|
self.Head.Cmd = 0xC2
|
self.Head.SubCmd = 0x10
|
return
|
|
def ReadData(self, _lpData, _pos=0, _Len=0):
|
self.Clear()
|
_pos = self.Head.ReadData(_lpData, _pos)
|
self.FromServerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
self.ServerType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
self.TypeLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
self.MsgType,_pos = CommFunc.ReadString(_lpData, _pos,self.TypeLen)
|
self.Len,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
self.Data,_pos = CommFunc.ReadString(_lpData, _pos,self.Len)
|
return _pos
|
|
def Clear(self):
|
self.Head = tagHead()
|
self.Head.Clear()
|
self.Head.Cmd = 0xC2
|
self.Head.SubCmd = 0x10
|
self.FromServerID = 0
|
self.ServerType = 0
|
self.PlayerID = 0
|
self.TypeLen = 0
|
self.MsgType = ""
|
self.Len = 0
|
self.Data = ""
|
return
|
|
def GetLength(self):
|
length = 0
|
length += self.Head.GetLength()
|
length += 4
|
length += 1
|
length += 4
|
length += 1
|
length += len(self.MsgType)
|
length += 4
|
length += len(self.Data)
|
|
return length
|
|
def GetBuffer(self):
|
data = ''
|
data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
|
data = CommFunc.WriteDWORD(data, self.FromServerID)
|
data = CommFunc.WriteBYTE(data, self.ServerType)
|
data = CommFunc.WriteDWORD(data, self.PlayerID)
|
data = CommFunc.WriteBYTE(data, self.TypeLen)
|
data = CommFunc.WriteString(data, self.TypeLen, self.MsgType)
|
data = CommFunc.WriteDWORD(data, self.Len)
|
data = CommFunc.WriteString(data, self.Len, self.Data)
|
return data
|
|
def OutputString(self):
|
DumpString = '''
|
Head:%s,
|
FromServerID:%d,
|
ServerType:%d,
|
PlayerID:%d,
|
TypeLen:%d,
|
MsgType:%s,
|
Len:%d,
|
Data:%s
|
'''\
|
%(
|
self.Head.OutputString(),
|
self.FromServerID,
|
self.ServerType,
|
self.PlayerID,
|
self.TypeLen,
|
self.MsgType,
|
self.Len,
|
self.Data
|
)
|
return DumpString
|
|
|
m_NAtagSSCommMsg=tagSSCommMsg()
|
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagSSCommMsg.Head.Cmd,m_NAtagSSCommMsg.Head.SubCmd))] = m_NAtagSSCommMsg
|
|
|
#------------------------------------------------------
|
# C2 01 ¿ç·þ·þÎñÆ÷ÐÄÌø°ü #tagSSHeart
|
|
class tagSSHeart(Structure):
|
_pack_ = 1
|
_fields_ = [
|
("Cmd", c_ubyte),
|
("SubCmd", c_ubyte),
|
("ServerID", c_int),
|
("ServerType", c_ubyte), #·þÎñÆ÷ÀàÐÍ
|
("ServerTime", c_int), #·þÎñÆ÷ʱ¼ä´Á
|
]
|
|
def __init__(self):
|
self.Clear()
|
self.Cmd = 0xC2
|
self.SubCmd = 0x01
|
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 = 0xC2
|
self.SubCmd = 0x01
|
self.ServerID = 0
|
self.ServerType = 0
|
self.ServerTime = 0
|
return
|
|
def GetLength(self):
|
return sizeof(tagSSHeart)
|
|
def GetBuffer(self):
|
return string_at(addressof(self), self.GetLength())
|
|
def OutputString(self):
|
DumpString = '''// C2 01 ¿ç·þ·þÎñÆ÷ÐÄÌø°ü //tagSSHeart:
|
Cmd:%s,
|
SubCmd:%s,
|
ServerID:%d,
|
ServerType:%d,
|
ServerTime:%d
|
'''\
|
%(
|
self.Cmd,
|
self.SubCmd,
|
self.ServerID,
|
self.ServerType,
|
self.ServerTime
|
)
|
return DumpString
|
|
|
m_NAtagSSHeart=tagSSHeart()
|
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagSSHeart.Cmd,m_NAtagSSHeart.SubCmd))] = m_NAtagSSHeart
|