#!/usr/bin/python
|
# -*- coding: GBK -*-
|
#-------------------------------------------------------------------------------
|
#
|
#-------------------------------------------------------------------------------
|
#
|
|
|
from Common import (CommFunc, mylog)
|
from DBCommon import (CommonDefine, error)
|
|
class PacketDispatcher():
|
__packHead = 0xCCFF
|
__packHeadLen = 2
|
|
__packLenSize = 4
|
|
def __init__(self):
|
return
|
|
def __getPacketHeadLen(self):
|
return self.__packHeadLen + self.__packLenSize
|
|
'''²ð°üʵÏÖ'''
|
def readSinglePacket(self, buf):
|
pos = 0
|
if len(buf) <= 0:
|
mylog.warning('len(buf) <= 0')
|
return self.READ_PACKET_ERR_0
|
if len(buf) < self.__getPacketHeadLen():
|
mylog.debug('buf len = %d not enough!'%len(buf))
|
return self.READ_PACKET_ERR_SHORTBUF
|
#¶ÁÈ¡±ê־λ
|
PackSign, pos = CommFunc.ReadWORD(buf, pos)
|
#УÑé·â°üÍ·
|
if not PackSign == self.__packHead:
|
msg = error.formatMsg('error', error.ERROR_NO_136, 'PackSign Error curPackSign = %s'%PackSign)
|
mylog.warning(msg)
|
return self.READ_PACKET_ERR_0
|
PackLen, pos = CommFunc.ReadDWORD(buf, pos)
|
#ÏÞÖÆ·â°ü×ܳ¤¶È
|
PackTotalLen = PackLen + self.__getPacketHeadLen()
|
if PackTotalLen > CommonDefine.MAX_PACK_LEN:
|
msg = error.formatMsg('error', error.ERROR_NO_137, 'PackTotalLen = %s > %s'%(PackTotalLen, CommonDefine.MAX_PACK_LEN))
|
mylog.error(msg)
|
return self.READ_PACKET_ERR_0
|
#»º³åÇø²»¹»
|
if PackTotalLen > len(buf):
|
mylog.debug('buf len = %d expect len = %d waiting...'%(len(buf), PackTotalLen))
|
return self.READ_PACKET_ERR_SHORTBUF
|
#¶Áȡһ¸ö·â°ü,ÌÞ³ý·â°ü±êÖ¾ºÍ·â°ü³¤¶È
|
#ÔÚÕâÀï¿ÉÒÔ½øÐÐCRCУÑé
|
if self.OnGetPacket:
|
self.OnGetPacket(buf[self.__getPacketHeadLen():PackTotalLen])
|
pos += PackLen
|
return pos
|
|
def packData(self, buf):
|
packBuf = ''
|
packBuf = CommFunc.WriteWORD(packBuf, self.__packHead)
|
packBuf = CommFunc.WriteDWORD(packBuf, len(buf))
|
packBuf = CommFunc.WriteString(packBuf, len(buf), buf)
|
return packBuf
|
|
|