• <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++博客 :: 首頁 :: 聯系 :: 聚合  :: 管理
              246 Posts :: 4 Stories :: 312 Comments :: 0 Trackbacks

            常用鏈接

            留言簿(54)

            我參與的團隊

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜



              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 二進制流
             11 -----------------
             12 視頻包由三部分構成: MetaMessage數據元封套,控制命令文本(json格式),二進制數據,后兩者之間采用連續兩個\0區分,表示開始二進制流數據
             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 放屁阿狗 閱讀(477) 評論(0)  編輯 收藏 引用
            久久伊人五月丁香狠狠色| 99久久成人国产精品免费| 精品久久久久久久中文字幕| 日本精品久久久久中文字幕| 国产69精品久久久久99| 亚洲婷婷国产精品电影人久久| 久久人人爽人人爽人人片AV东京热| 久久婷婷五月综合国产尤物app | 久久亚洲天堂| 2021国产精品久久精品| AV狠狠色丁香婷婷综合久久| 日本加勒比久久精品| 国产精品女同一区二区久久| 国产精品内射久久久久欢欢| 中文字幕无码av激情不卡久久| 国产Av激情久久无码天堂| 蜜桃麻豆www久久国产精品| 精品综合久久久久久888蜜芽| 精品国产91久久久久久久a | 色狠狠久久AV五月综合| 伊人久久大香线蕉精品| 亚洲精品国产字幕久久不卡 | 欧美激情精品久久久久久久九九九| 久久久久亚洲AV成人网人人网站 | 欧美一级久久久久久久大| 亚洲精品蜜桃久久久久久| 久久精品无码一区二区app| 国产99精品久久| 久久精品欧美日韩精品| 久久99九九国产免费看小说| 精品一久久香蕉国产线看播放| 久久99精品久久久久婷婷| 久久亚洲AV成人无码软件| 四虎影视久久久免费| 久久青青国产| 精品久久久久一区二区三区| 久久综合综合久久97色| 91精品无码久久久久久五月天| 久久亚洲欧美日本精品| 四虎国产精品免费久久5151| 色综合合久久天天综合绕视看|