hxp
2025-05-28 09fef77b16601ee5b0f53f34ccb23804b8448c8c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#!/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