• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            socketref,再見!高德

            https://github.com/adoggie

              C++博客 :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
              246 Posts :: 4 Stories :: 312 Comments :: 0 Trackbacks

            常用鏈接

            留言簿(54)

            我參與的團(tuán)隊(duì)

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜



              1 # -- coding:utf-8 --
              2 
              3 import socket,traceback,os,os.path,sys,time,struct,base64,gzip,array,json,zlib
              4 
              5 '''
              6 ------------------
              7 msghdr
              8 cmdtxt
              9 \0\0
             10 二進(jìn)制流
             11 -----------------
             12 視頻包由三部分構(gòu)成: MetaMessage數(shù)據(jù)元封套,控制命令文本(json格式),二進(jìn)制數(shù)據(jù),后兩者之間采用連續(xù)兩個\0區(qū)分,表示開始二進(jìn)制流數(shù)據(jù)
             13 [metamsg,cmdtxt,bindata]
             14 bindata部分格式、編碼由cmdtxt控制
             15 
             16 # [magic,size,compress,encrypt,version],[command text(json)],[\0\0],[binary data..]
             17 '''
             18 
             19 COMPRESS_NONE = 0
             20 COMPRESS_ZLIB = 1
             21 COMPRESS_BZIP2 = 2
             22 
             23 ENCRYPT_NONE = 0
             24 ENCRYPT_MD5  = 1
             25 ENCRYPT_DES  = 2
             26 
             27 
             28 class MessageBase:
             29     def __init__(self,type='',bin=None):
             30         #self.type = type
             31         self.attrs={'msg':type}
             32         self.bin = bin
             33     
             34     def getMsg(self):
             35         return self.getValue('msg')
             36         
             37     def getValue(self,key):
             38         if self.attrs.has_key(key):
             39             return self.attrs[key]
             40         return None
             41     
             42     def getBinary(self):
             43         return self.bin
             44         
             45     def marshall(self):
             46         d = json.dumps(self.attrs)
             47         if self.bin:
             48             d+='\0\0'+ self.bin
             49         return d
             50     
             51     @classmethod
             52     def unmarshall(cls,d):
             53         m = None        
             54         sep = d.find('\0\0')
             55         txt = None
             56         bin = None
             57         if sep == -1:
             58             txt = d
             59         else:
             60             txt = d[:sep]
             61             bin = d[sep+2:]        
             62         m = MessageBase()
             63         try:
             64             m.attrs = json.loads(txt)
             65             if type(m.attrs) != type({}):
             66                 return None            
             67             m.bin = bin
             68         except:
             69             m = None
             70         return m
             71         
             72 class MsgCallReturn(MessageBase):
             73     def __init__(self,succ=True,errno=0 ,errmsg='',value=None,bin=None):
             74         MessageBase.__init__(self,'callret',bin)
             75         self.attrs['succ']=succ
             76         self.attrs['errno']=errno
             77         self.attrs['errmsg']=errmsg
             78         self.attrs['value']=value
             79         
             80 class NetMetaPacket:
             81     # [magic,size,compress,encrypt,version],[command text(json)],[\0\0],[binary data..]
             82     def __init__(self,msg=None,compress=COMPRESS_NONE,encrypt = ENCRYPT_NONE ):
             83         self.msg = msg
             84         self.size4 = 0
             85         self.compress1 = compress
             86         self.encrypt1 = encrypt
             87         self.ver4 = 0x01000000 # means 1.0.0.0
             88     magic4=0xEFD2BB99
             89     
             90     @classmethod
             91     def minSize(cls):
             92         return 14
             93         
             94     def marshall(self):
             95         d = self.msg.marshall()
             96         if self.compress1 == COMPRESS_ZLIB:
             97             d = zlib.compress(d)
             98         else:
             99             self.compress1 = COMPRESS_NONE
            100         self.encrypt1 = ENCRYPT_NONE 
            101         # [magic,size,compress,encrypt,version],[command text(json)],[\0\0],[binary data..]
            102         r = struct.pack('!BBI',self.compress1,self.encrypt1,self.ver4)
            103         r+= d
            104         self.size4 = len(r)+4
            105         r = struct.pack('!II', self.magic4,self.size4) + r
            106         # size =包含自身變量的整個包大小
            107         return r
            108 
            109         
            110         
            111 if __name__=='__main__':
            112     
            113     print NetMetaPacket(msg=MsgCallReturn(value=range(10),bin='abc' ),compress=COMPRESS_NONE).marshall()
            114     print NetMetaPacket.minSize()
            115    
            posted on 2012-03-08 23:14 放屁阿狗 閱讀(479) 評論(0)  編輯 收藏 引用

            只有注冊用戶登錄后才能發(fā)表評論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            国产农村妇女毛片精品久久| 久久久久亚洲AV无码专区首JN| 久久综合久久伊人| 久久无码人妻精品一区二区三区| 思思久久99热免费精品6| 亚洲国产精品无码久久一线| 国产麻豆精品久久一二三| 久久人人爽人人爽人人片AV麻豆| 日韩亚洲国产综合久久久| 久久亚洲精品国产精品| 伊人久久成人成综合网222| 精品99久久aaa一级毛片| 国产成人精品久久一区二区三区| 国产精品亚洲综合久久| 国产精品gz久久久| 亚洲精品乱码久久久久久中文字幕 | 潮喷大喷水系列无码久久精品| 国产高潮久久免费观看| 久久综合狠狠综合久久| 亚洲国产精品无码久久九九| 天天爽天天爽天天片a久久网| 无码专区久久综合久中文字幕| 国产成人精品久久亚洲高清不卡 | 亚洲欧洲中文日韩久久AV乱码| A狠狠久久蜜臀婷色中文网| 欧美成人免费观看久久| 狠狠色丁香久久婷婷综合图片 | 欧美精品一区二区久久| 青青草原综合久久大伊人精品| 久久国产色AV免费看| 色欲av伊人久久大香线蕉影院| 精品久久久久久无码免费| 97久久精品人人做人人爽| 久久午夜福利电影| 久久久久黑人强伦姧人妻| 久久无码AV中文出轨人妻| 亚洲国产高清精品线久久 | 国产A级毛片久久久精品毛片| 色综合久久88色综合天天| 亚洲国产天堂久久综合网站| 国产精品激情综合久久|