#!/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