• <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>

            Benjamin

            靜以修身,儉以養德,非澹薄無以明志,非寧靜無以致遠。
            隨筆 - 397, 文章 - 0, 評論 - 196, 引用 - 0
            數據加載中……

            python在tornado下websocket客戶端

            from tornado import httpclient
            from tornado import ioloop
            from tornado import websocket
            import uuid
            import binascii
            import struct
            import weakref
            DEFAULT_CONNECT_TIMEOUT = 60
            DEFAULT_REQUEST_TIMEOUT = 60
            def my_unpack(message1, length,ag_client):
                """解包"""
                message = message1[length:len(message1)]
                # 獲取cmd
                cmd, = struct.unpack('!i', message[0:4])
                # 獲取長度
                size, = struct.unpack('!i', message[4:8])
                if size!=len(message):
                    print('接收字節長度=%d' % (len(message)))
                    print('包頭中包長度=%d' % size)
                    print('cmd=====%d'%cmd)
                #包頭中的長度比包長度大,丟棄,不完整包
                if size >len(message):
                    print('壞包丟棄')
                    return
                # 包內容
                string, = struct.unpack('!{0}s'.format(size - 4), message[4:size])
                from protocol.deserialize import ag_parse
                ag_parse(cmd, string, ag_client)
                length += size
                if len(message) > size:
                    my_unpack(message1, length,ag_client)
            class WebSocketClient(object):
                """Base for web socket clients.
                """
                def __init__(self, *, connect_timeout = DEFAULT_CONNECT_TIMEOUT,
                                      request_timeout = DEFAULT_REQUEST_TIMEOUT,
                                      name = login_name,
                                      passwd = login_password,
                                      player = None):
                    self.connect_timeout = connect_timeout
                    self.request_timeout = request_timeout
                    #玩家登陸名
                    self.player_name = name
                    #玩家登陸passwd
                    self.player_passwd = passwd
                    #玩家數據
                    if player:
                        self.player = weakref.proxy(player)
                    else:
                        self.player = None
                def connect(self, url):
                    """Connect to the server.
                    :param str url: server URL.
                    """
                    request = httpclient.HTTPRequest(url=url,
                                                     connect_timeout=self.connect_timeout,
                                                     request_timeout=self.request_timeout)
                    ws_conn = websocket.WebSocketClientConnection(request,ioloop.IOLoop.current())
                    ws_conn.connect_future.add_done_callback(self._connect_callback)
                    ws_conn.on_message=self._on_message
                    ws_conn.on_connection_close=self._on_connection_close
                def send(self, data):
                    """Send message to the server
                    :param str data: message.
                    """
                    if not self._ws_connection:
                        raise RuntimeError('Web socket connection is closed.')
                    self._ws_connection.write_message(data,True)
                def close(self):
                    """Close connection.
                    """
                    if not self._ws_connection:
                        raise RuntimeError('Web socket connection is already closed.')
                    self._ws_connection.close()
                def _connect_callback(self, future):
                    if future.exception() is None:
                        self._ws_connection = future.result()
                        self._on_connection_success()
                    else:
                        self._on_connection_error(future.exception())
                def _on_message(self, msg):
                    """This is called when new message is available from the server.
                    :param str msg: server message.
                    """
                    pass
                def _on_connection_success(self):
                    """This is called on successful connection ot the server.
                    """
                    pass
                def _on_connection_close(self):
                    """This is called when server closed the connection.
                    """
                    pass
                def _on_connection_error(self, exception):
                    """This is called in case if connection to the server could
                    not established.
                    """
                    pass
                def bind(self,player):
                    pass
            class AppWebSocketClient(WebSocketClient):
                def _on_message(self, msg):
                    my_unpack(msg, 0, self)
                def _on_connection_success(self):
                    print('Connected!')
                    self.bind(self.player)
                    def intToBytes(value, length):
                        resu = []
                        for i in range(0, length):
                            resu.append(value >> (i * 8) & 0xff)
                        resu.reverse()
                        return resu
                    login_pack = packet_pb2.PK_CLIENT_LOGIN()
                    #用戶名
                     login_pack.loginname = self.player_name
                 
                    #密碼
                    curr_password = self.player_passwd
                    login_pack.devicetype = 1
                    result = []
                    temp = b''
                    for i in range(0, len(curr_password), 2):
                        result.append(binascii.unhexlify(curr_password[i:i + 2]))
                        temp += (binascii.unhexlify(curr_password[i:i + 2]))
                    login_pack.token = temp
                    # 序列化
                    serializeToString = login_pack.SerializeToString()
                    print(serializeToString, type(serializeToString))
                    args = (704, len(serializeToString), 0, 1, 1, serializeToString)
                    fmt = ">iiihh{0}s".format(len(serializeToString))
                    data = struct.pack(fmt, *args)
                    self.send(data)
                def _on_connection_close(self):
                    print('Connection closed!')
                    self._ws_connection.tcp_client.close()
                    print('關閉socket,重新連接')
                    # self.connect(ag_url)
                def _on_connection_error(self, exception):
                    print('Connection error: %s', exception)
                def bind(self,player):
                    """綁定ag的wss連接"""
                    if player:
                        if player.ag_wss:
                            player.ag_wss.close()
                        self.player.ag_wss = self
                        print('!!!!!!綁定到ag完成!!!!!!')
            def player_client(name,passwd,table_id,player):
                """玩家登陸創建客戶端"""
                if name:
                    if passwd:
                        if table_id > 0xFFFE:
                            if player:
                                client = AppWebSocketClient(connect_timeout=DEFAULT_CONNECT_TIMEOUT,
                                                            request_timeout=DEFAULT_REQUEST_TIMEOUT,
                                                            name=name,
                                                            passwd=passwd,
                                                            player= player)
                                client.connect(ag_url)

            posted on 2020-01-03 19:41 Benjamin 閱讀(1219) 評論(0)  編輯 收藏 引用 所屬分類: python

            久久综合欧美成人| 久久久久人妻一区精品性色av| 久久综合九色综合精品| 国内精品久久久久久不卡影院| 无码人妻少妇久久中文字幕| 亚洲精品乱码久久久久久蜜桃图片| 国产精品久久久久影院色| 久久久精品视频免费观看 | 国产精品青草久久久久福利99| 美女久久久久久| 久久久久综合网久久| 久久久www免费人成精品| 伊人久久综在合线亚洲2019| 伊人久久综合精品无码AV专区| 人人狠狠综合久久亚洲88| 久久综合亚洲色HEZYO社区 | 精品久久久无码中文字幕天天| 久久99久久99精品免视看动漫| 国产精品伦理久久久久久| 亚洲精品国产字幕久久不卡| 久久人妻少妇嫩草AV无码蜜桃| 青青青青久久精品国产| 久久久噜噜噜www成人网| 超级碰碰碰碰97久久久久| 久久久久久无码国产精品中文字幕 | 麻豆亚洲AV永久无码精品久久| 精品国产乱码久久久久久浪潮| 2021少妇久久久久久久久久| 亚洲精品美女久久777777| 亚洲国产成人精品女人久久久| 一本久久a久久精品综合夜夜| 久久久久99精品成人片直播| 狠狠色狠狠色综合久久| 国产精品成人久久久| 狠狠色丁香婷婷久久综合| 一日本道伊人久久综合影| 久久影院亚洲一区| 精品国产日韩久久亚洲| 性欧美丰满熟妇XXXX性久久久| 精品久久久无码人妻中文字幕| 久久久久亚洲AV片无码下载蜜桃|