• <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 放屁阿狗 閱讀(479) 評論(0)  編輯 收藏 引用
            久久久无码精品亚洲日韩软件| 日韩精品国产自在久久现线拍| 亚洲欧美日韩精品久久亚洲区| 亚洲欧美成人久久综合中文网 | AV色综合久久天堂AV色综合在| 久久国产亚洲精品无码| 亚洲国产精品婷婷久久| 久久久久国产一级毛片高清板| 午夜精品久久久久久99热| 国产精品天天影视久久综合网| 亚洲?V乱码久久精品蜜桃 | 午夜久久久久久禁播电影| 精品久久久久久国产| 欧美久久久久久| 久久精品国产精品青草app| 亚洲第一永久AV网站久久精品男人的天堂AV | 国产成人精品综合久久久久| 欧美久久综合性欧美| 99久久综合国产精品免费 | 午夜视频久久久久一区 | 国产精品久久久天天影视| 亚洲精品成人网久久久久久| 久久精品免费一区二区三区| 久久久亚洲AV波多野结衣| 久久精品国产99国产精品| 成人久久精品一区二区三区| 无码人妻久久一区二区三区蜜桃| 丁香久久婷婷国产午夜视频| 丰满少妇人妻久久久久久| 久久精品久久久久观看99水蜜桃 | 欧美性猛交xxxx免费看久久久| 精品精品国产自在久久高清 | 久久国产精品视频| 久久久久久久综合日本亚洲| 久久午夜羞羞影院免费观看| 伊人久久大香线蕉av不卡| 久久强奷乱码老熟女网站| 少妇无套内谢久久久久| 久久久久青草线蕉综合超碰| 无码八A片人妻少妇久久| 久久精品国产久精国产一老狼|