§
    !ß·iˆl  ã                   ó  — d dl mZ d dlmZ d dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
mZ 	 d dlZn# e$ r dZY nw xY w	 d dlZn# e$ r dZY nw xY wddlmZ ddlmZ ddlmZ dd	lmZ  ej        d
¦  «        Z G d„ dej        ¦  «        ZdS )é    )Ú	b64encode)ÚSimpleCookieN)ÚJSONDecodeErroré   )Úbase_client)Ú
exceptions)Úpacket)Úpayloadzengineio.clientc                   óž   ‡ — e Zd ZdZ	 	 dd„Zd„ Zd„ Zdd„Zd	„ Zdd„Z	d„ Z
d„ Zd„ Zˆ fd„Zd„ Zd„ Zd„ Zd„ Z	 	 dd„Zd„ Zd„ Zd„ Zd„ Zˆ xZS )ÚClientaþ  An Engine.IO client.

    This class implements a fully compliant Engine.IO web client with support
    for websocket and long-polling transports.

    :param logger: To enable logging set to ``True`` or pass a logger object to
                   use. To disable logging set to ``False``. The default is
                   ``False``. Note that fatal errors are logged even when
                   ``logger`` is ``False``.
    :param json: An alternative JSON module to use for encoding and decoding
                 packets. Custom json modules must have ``dumps`` and ``loads``
                 functions that are compatible with the standard library
                 versions. This is a process-wide setting, all instantiated
                 servers and clients must use the same JSON module.
    :param request_timeout: A timeout in seconds for requests. The default is
                            5 seconds.
    :param http_session: an initialized ``requests.Session`` object to be used
                         when sending requests to the server. Use it if you
                         need to add special client options such as proxy
                         servers, SSL certificates, custom CA bundle, etc.
    :param ssl_verify: ``True`` to verify SSL certificates, or ``False`` to
                       skip SSL certificate verification, allowing
                       connections to servers with self signed certificates.
                       The default is ``True``.
    :param handle_sigint: Set to ``True`` to automatically handle disconnection
                          when the process is interrupted, or to ``False`` to
                          leave interrupt handling to the calling application.
                          Interrupt handling can only be enabled when the
                          client instance is created in the main thread.
    :param websocket_extra_options: Dictionary containing additional keyword
                                    arguments passed to
                                    ``websocket.create_connection()``.
    :param timestamp_requests: If ``True`` a timestamp is added to the query
                               string of Socket.IO requests as a cache-busting
                               measure. Set to ``False`` to disable.
    Nú	engine.ioc                 ó  ‡— | j         dk    rt          d¦  «        ‚ddgŠ|�7t          |t          ¦  «        r|g}ˆfd„|D ¦   «         }|st          d¦  «        ‚|p‰| _         t          | d| j        d	         z   ¦  «        ||pi |¦  «        S )
aˆ  Connect to an Engine.IO server.

        :param url: The URL of the Engine.IO server. It can include custom
                    query string parameters if required by the server.
        :param headers: A dictionary with custom headers to send with the
                        connection request.
        :param transports: The list of allowed transports. Valid transports
                           are ``'polling'`` and ``'websocket'``. If not
                           given, the polling transport is connected first,
                           then an upgrade to websocket is attempted.
        :param engineio_path: The endpoint where the Engine.IO server is
                              installed. The default value is appropriate for
                              most cases.

        Example usage::

            eio = engineio.Client()
            eio.connect('http://localhost:5000')
        Údisconnectedz%Client is not in a disconnected stateÚpollingÚ	websocketNc                 ó   •— g | ]}|‰v ¯|‘Œ	S © r   )Ú.0Ú	transportÚvalid_transportss     €úT/home/mmwave/public_html/mmwave/venv/lib/python3.11/site-packages/engineio/client.pyú
<listcomp>z"Client.connect.<locals>.<listcomp>[   s.   ø€ ð <ð <ð <¨	Ø&Ð*:Ð:Ð:ð $Ø:Ð:Ð:ó    zNo valid transports providedÚ	_connect_r   )ÚstateÚ
ValueErrorÚ
isinstanceÚstrÚ
transportsÚgetattr)ÚselfÚurlÚheadersr   Úengineio_pathr   s        @r   ÚconnectzClient.connect@   sÌ   ø€ ð* Œ:˜Ò'Ð'ÝÐDÑEÔEÐEØ% {Ð3ÐØÐ!Ý˜*¥cÑ*Ô*ð *Ø(˜\�
ð<ð <ð <ð <°Zð <ñ <ô <ˆJàð AÝ Ð!?Ñ@Ô@Ð@Ø$Ð8Ð(8ˆŒØ>�w�t˜[¨4¬?¸1Ô+=Ñ=Ñ>Ô>Ø��˜B ñ/ô /ð 	/r   c                 óJ   — | j         r| j                              ¦   «          dS dS )z¯Wait until the connection with the server ends.

        Client applications can use this function to block the main thread
        during the life of the connection.
        N)Úread_loop_taskÚjoin©r!   s    r   ÚwaitzClient.waitc   s4   € ð Ôð 	'ØÔ×$Ò$Ñ&Ô&Ð&Ð&Ð&ð	'ð 	'r   c                 ól   — |                       t          j        t          j        |¬¦  «        ¦  «         dS )a  Send a message to the server.

        :param data: The data to send to the server. Data can be of type
                     ``str``, ``bytes``, ``list`` or ``dict``. If a ``list``
                     or ``dict``, the data will be serialized as JSON.
        ©ÚdataN)Ú_send_packetr	   ÚPacketÚMESSAGE)r!   r-   s     r   ÚsendzClient.sendl   s/   € ð 	×Ò�&œ-­¬¸TÐBÑBÔBÑCÔCÐCÐCÐCr   Fc                 ó  — | j         dk    rí|                      t          j        t          j        ¦  «        ¦  «         | j                             d¦  «         d| _         |                      d|p| j        j	        d¬¦  «         | j
        dk    r| j                             ¦   «          |s| j                             ¦   «          d| _         	 t          j                             | ¦  «         n# t$          $ r Y nw xY w|                      ¦   «          dS )	z­Disconnect from the server.

        :param abort: If set to ``True``, do not wait for background tasks
                      associated with the connection to end.
        Ú	connectedNÚdisconnectingÚ
disconnectF©Ú	run_asyncr   r   )r   r.   r	   r/   ÚCLOSEÚqueueÚputÚ_trigger_eventÚreasonÚCLIENT_DISCONNECTÚcurrent_transportÚwsÚcloser'   r(   r   Úconnected_clientsÚremover   Ú_reset)r!   Úabortr<   s      r   r5   zClient.disconnectu   s  € ð Œ:˜Ò$Ð$Ø×Ò�fœm­F¬LÑ9Ô9Ñ:Ô:Ð:ØŒJ�NŠN˜4Ñ Ô Ð Ø(ˆDŒJØ×Ò Ø &Ð G¨$¬+Ô*GØ*/ð  ñ 1ô 1ð 1ð Ô%¨Ò4Ð4Ø”—’‘”�Øð +ØÔ#×(Ò(Ñ*Ô*Ð*Ø'ˆDŒJðÝÔ-×4Ò4°TÑ:Ô:Ð:Ð:øÝð ð ð Ø�ðøøøà�Š‰Œˆˆˆs   Ã	C) Ã)
C6Ã5C6c                 ó^   — t          j        |||d¬¦  «        }|                     ¦   «          |S )aã  Start a background task.

        This is a utility function that applications can use to start a
        background task.

        :param target: the target function to execute.
        :param args: arguments to pass to the function.
        :param kwargs: keyword arguments to pass to the function.

        This function returns an object that represents the background task,
        on which the ``join()`` method can be invoked to wait for the task to
        complete.
        T)ÚtargetÚargsÚkwargsÚdaemon)Ú	threadingÚThreadÚstart)r!   rF   rG   rH   Úths        r   Ústart_background_taskzClient.start_background_task�   s6   € õ Ô V°$¸vØ%)ð+ñ +ô +ˆà
�Š‰
Œ
ˆ
Øˆ	r   r   c                 ó*   — t          j        |¦  «        S )z'Sleep for the requested amount of time.)ÚtimeÚsleep)r!   Úsecondss     r   rQ   zClient.sleep    s   € åŒz˜'Ñ"Ô"Ð"r   c                 ó$   — t          j        |i |¤ŽS )zCreate a queue object.)r9   ÚQueue©r!   rG   rH   s      r   Úcreate_queuezClient.create_queue¤   s   € åŒ{˜DÐ+ FÐ+Ð+Ð+r   c                 ó   — t           j        S )zlReturn the queue empty exception raised by queues created by the
        ``create_queue()`` method.
        )r9   ÚEmptyr)   s    r   Úget_queue_empty_exceptionz Client.get_queue_empty_exception¨   s   € õ Œ{Ðr   c                 ó$   — t          j        |i |¤ŽS )zCreate an event object.)rJ   ÚEventrU   s      r   Úcreate_eventzClient.create_event®   s   € åŒ Ð/¨Ð/Ð/Ð/r   c                 óÒ   •— t          ¦   «                              ¦   «          	 	 | j                             ¦   «          | j                             ¦   «          n# | j        $ r Y d S w xY wŒF)N)ÚsuperrC   r9   Ú
get_nowaitÚ	task_doneÚqueue_empty)r!   Ú	__class__s    €r   rC   zClient._reset²   sv   ø€ Ý‰Œ�ŠÑÔÐð	ðØ”
×%Ò%Ñ'Ô'Ð'Ø”
×$Ò$Ñ&Ô&Ð&Ð&øØÔ#ð ð ð Ø��ðøøøð		s   ¤2A Á
A%Á$A%c                 óÎ  — t           €| j                             d¦  «         dS |                      ||d¦  «        | _        | j                             d| j        z   ¦  «         |                      d| j        |                      ¦   «         z   || j        ¬¦  «        }|�t          |t          ¦  «        r*|                      ¦   «          t          j        |pd¦  «        ‚|j        dk     s|j        d	k    ri|                      ¦   «          	 |                     ¦   «         }n# t           $ r d}Y nw xY wt          j        d
                     |j        ¦  «        |¦  «        ‚	 t%          j        |j                             d¦  «        ¬¦  «        }n## t,          $ r t          j        d¦  «        d‚w xY w|j        d         }|j        t2          j        k    rt          j        d¦  «        ‚| j                             dt          |j        ¦  «        z   ¦  «         |j        d         | _        |j        d         | _        t=          |j        d         ¦  «        dz  | _        t=          |j        d         ¦  «        dz  | _         d| _!        | xj        d| j        z   z  c_        d| _"        tF          j$         %                    | ¦  «         |  &                    dd¬¦  «         |j        dd…         D ]}|  '                    |¦  «         Œd| j        v r"d| j(        v r|  )                    |||¦  «        rdS |  *                    | j+        ¦  «        | _,        |  *                    | j-        ¦  «        | _.        dS )z<Establish a long-polling connection to the Engine.IO server.Nz?requests package is not installed -- cannot send HTTP requests!r   z!Attempting polling connection to ÚGET)r#   Útimeoutz Connection refused by the serveréÈ   é,  z,Unexpected status code {} in server responseúutf-8©Úencoded_payloadzUnexpected response from serverr   z"OPEN packet not returned by serverz!Polling connection accepted with ÚsidÚupgradesÚpingIntervalç     @�@ÚpingTimeoutú&sid=r3   r%   Fr6   r   r   )/ÚrequestsÚloggerÚerrorÚ_get_engineio_urlÚbase_urlÚinfoÚ_send_requestÚ_get_url_timestampÚrequest_timeoutr   r   rC   r   ÚConnectionErrorÚstatus_codeÚjsonr   Úformatr
   ÚPayloadÚcontentÚdecoder   ÚpacketsÚpacket_typer	   ÚOPENr-   rk   rl   ÚintÚping_intervalÚping_timeoutr>   r   r   rA   Úappendr;   Ú_receive_packetr   Ú_connect_websocketrN   Ú_write_loopÚwrite_loop_taskÚ_read_loop_pollingr'   )	r!   r"   r#   r$   ÚrÚargÚpÚopen_packetÚpkts	            r   Ú_connect_pollingzClient._connect_polling»   s„  € åÐàŒK×Òð 4ñ 5ô 5ð 5àˆFØ×.Ò.¨s°MÀ9ÑMÔMˆŒØŒ×ÒÐ<¸t¼}ÑLÑMÔMÐMØ×ÒØ�4”= 4×#:Ò#:Ñ#<Ô#<Ñ<ÀgØÔ(ð ñ *ô *ˆð ˆ9�
 1¥cÑ*Ô*ˆ9Ø�KŠK‰MŒMˆMÝÔ,ØÐ7Ð7ñ9ô 9ð 9àŒ=˜3ÒÐ !¤-°3Ò"6Ð"6Ø�KŠK‰MŒMˆMðØ—f’f‘h”h��øÝ"ð ð ð Ø���ðøøøåÔ,Ø>×EÒEØ”Mñ#ô #Ø$'ñ)ô )ð )ð	=Ý”°´	×0@Ò0@ÀÑ0IÔ0IÐJÑJÔJˆAˆAøÝð 	=ð 	=ð 	=ÝÔ,Ø1ñ3ô 3Ø8<ð=ð	=øøøð ”i ”lˆØÔ"¥f¤kÒ1Ð1ÝÔ,Ø4ñ6ô 6ð 6àŒ×ÒØ/µ#°kÔ6FÑ2GÔ2GÑGñ	Iô 	Ið 	IàÔ# EÔ*ˆŒØ#Ô(¨Ô4ˆŒÝ  Ô!1°.Ô!AÑBÔBÀVÑKˆÔÝ Ô 0°Ô ?Ñ@Ô@À6ÑIˆÔØ!*ˆÔØˆŒ˜ 4¤8Ñ+Ñ+ˆŒà ˆŒ
ÝÔ%×,Ò,¨TÑ2Ô2Ð2Ø×Ò˜I°ÐÑ7Ô7Ð7à”9˜Q˜R˜R”=ð 	&ð 	&ˆCØ× Ò  Ñ%Ô%Ð%Ð%à˜$œ-Ð'Ð'¨K¸4¼?Ð,JÐ,Jà×&Ò& s¨G°]ÑCÔCð à�ð  $×9Ò9¸$Ô:JÑKÔKˆÔØ"×8Ò8ØÔ#ñ%ô %ˆÔÐÐs   ÄD ÄD*Ä)D*Å-F	 Æ	 F)c                 óö  — t           €| j                             d¦  «         dS |                      ||d¦  «        }| j        r-| j                             d|z   ¦  «         d}|d| j        z   z  }n&d}|| _        | j                             d|z   ¦  «         d}i }| j        �r	t          ¦   «         }| j        j	        D ]}	|	j
        ||	j        <   Œ|                     d	d
¬¦  «                             ¦   «         }|                     ¦   «         D ].\  }
}|
                     ¦   «         dk    r|r|dz  }||z  }||
=  nŒ/d|vr­| j        j        �¡t#          | j        j        t$          ¦  «        st'          d¦  «        ‚d                     | j        j        d         | j        j        d         ¦  «                             d¦  «        }t-          |¦  «                             d¦  «        }d|z   |d<   t#          | j        j        t$          ¦  «        r)| j        j        d         | j        j        d         dœ|d<   n| j        j        rd| j        j        i|d<   | j        j        rñd}|                     d¦  «        r>| j        j                             d| j        j                             d¦  «        ¦  «        }n=| j        j                             d| j        j                             d¦  «        ¦  «        }|r]t8          j                             d|v r|nd|z   ¦  «        }|j        |d<   |j         |d <   |j!        s|j"        r|j!        |j"        fnd|d!<   t#          | j        j#        tH          ¦  «        r,d|v r| j        j#        |d         d"<   n%d"| j        j#        i|d<   n| j        j#        sd| _%        | j%        s=d|v r(|d          &                    d#tN          j(        i¦  «         nd#tN          j(        i|d<   | &                    | j)         *                    d$i ¦  «        ¦  «         ||d$<   ||d<   d|d%<   | j+        |d&<   | &                    | j)        ¦  «         	 t          j,        ||  -                    ¦   «         z   fi |¤Ž}nS# t\          t^          t           j0        f$ r4 |r| j         1                    d'¦  «         Y dS te          j.        d(¦  «        ‚w xY w|�rÚtg          j4        tf          j5        d)¬*¦  «                             ¦   «         }	 | 6                    |¦  «         n@# tn          $ r3}| j         1                    d+tI          |¦  «        ¦  «         Y d}~dS d}~ww xY w	 | 8                    ¦   «         }n@# tn          $ r3}| j         1                    d,tI          |¦  «        ¦  «         Y d}~dS d}~ww xY wtg          j4        |¬-¦  «        }|j9        tf          j:        k    s|j;        d)k    r| j         1                    d.¦  «         dS tg          j4        tf          j<        ¦  «                             ¦   «         }	 | 6                    |¦  «         n@# tn          $ r3}| j         1                    d+tI          |¦  «        ¦  «         Y d}~dS d}~ww xY wd| _=        | j                             d/¦  «         �ne	 | 8                    ¦   «         }n6# tn          $ r)}te          j.        d0tI          |¦  «        z   ¦  «        ‚d}~ww xY wtg          j4        |¬-¦  «        }|j9        tf          j>        k    rte          j.        d1¦  «        ‚| j                             d2tI          |j;        ¦  «        z   ¦  «         |j;        d3         | _        |j;        d4         | _?        t�          |j;        d5         ¦  «        d6z  | _A        t�          |j;        d7         ¦  «        d6z  | _B        d| _=        d8| _C        tˆ          jE         F                    | ¦  «         |  G                    d9d¬:¦  «         || _H        | jH         I                    | jA        | jB        z   ¦  «         |  J                    | jK        ¦  «        | _L        |  J                    | jM        ¦  «        | _N        dS );z?Establish or upgrade to a WebSocket connection with the server.NzKwebsocket-client package not installed, only polling transport is availableFr   z Attempting WebSocket upgrade to Trp   z#Attempting WebSocket connection to Ú ú;)ÚheaderÚsepÚcookiez; ÚAuthorizationz&Only basic authentication is supportedz{}:{}r   r   rh   zBasic )ÚcertfileÚkeyfileÚssloptrš   zws://r?   ÚhttpÚwssÚhttpsz://z	scheme://Úhttp_proxy_hostÚhttp_proxy_portÚhttp_proxy_authÚca_certsÚ	cert_reqsr–   Úenable_multithreadre   z*WebSocket upgrade failed: connection errorzConnection errorÚprober,   z7WebSocket upgrade failed: unexpected send exception: %sz7WebSocket upgrade failed: unexpected recv exception: %s©Úencoded_packetz(WebSocket upgrade failed: no PONG packetz WebSocket upgrade was successfulzUnexpected recv exception: zno OPEN packetz#WebSocket connection accepted with rk   rl   rm   rn   ro   r3   r%   r6   )Or   rr   rs   rt   rk   rv   ru   r�   r   ÚcookiesÚvalueÚnameÚoutputÚstripÚitemsÚlowerÚauthr   Útupler   r}   Úencoder   r€   ÚcertÚproxiesÚ
startswithÚgetÚurllibÚparseÚurlparseÚhostnameÚportÚusernameÚpasswordÚverifyr   Ú
ssl_verifyÚupdateÚsslÚ	CERT_NONEÚwebsocket_extra_optionsÚpopry   Úcreate_connectionrx   rz   ÚOSErrorÚWebSocketExceptionÚwarningr   r	   r/   ÚPINGr1   Ú	ExceptionÚrecvr‚   ÚPONGr-   ÚUPGRADEr>   rƒ   rl   r„   r…   r†   r   r   rA   r‡   r;   r?   Ú
settimeoutrN   rŠ   r‹   Ú_read_loop_websocketr'   )r!   r"   r#   r$   Úwebsocket_urlÚupgrader©   Úextra_optionsÚckr˜   r–   rª   Ú
basic_authÚ	proxy_urlÚ
parsed_urlr?   r�   Úer‘   r�   s                       r   r‰   zClient._connect_websocketø   s	  € åÐàŒK×Òð ?ñ @ô @ð @à�5Ø×.Ò.¨s°MÀ;ÑOÔOˆØŒ8ð 		GØŒK×ÒØ2°]ÑBñDô Dð DàˆGØ˜W t¤xÑ/Ñ/ˆMˆMàˆGØ)ˆDŒMØŒK×ÒØ5¸ÑEñGô Gð Gð
 ˆØˆØŒ9ñ ;	(å‘”ˆBØœ)Ô+ð /ð /�Ø"(¤,��6”;‘�Ø—i’i r¨s�iÑ3Ô3×9Ò9Ñ;Ô;ˆGØ!(§¢¡¤ð ð ‘�˜Ø—<’<‘>”> XÒ-Ð-Øð (Ø 4™˜Ø˜uÑ$�GØ ˜Ø�Eð .ð  gÐ-Ð-°$´)´.Ð2LÝ! $¤)¤.µ%Ñ8Ô8ð OÝ$Ð%MÑNÔNÐNØ$Ÿ^š^Ø”I”N 1Ô% t¤y¤~°aÔ'8ñ:ô :ß:@º&À¹/¼/ð å& zÑ2Ô2×9Ò9¸'ÑBÔB�
Ø+3°jÑ+@�˜Ñ(õ ˜$œ)œ.­%Ñ0Ô0ð Gà $¤	¤¨qÔ 1Ø#œyœ~¨aÔ0ð+2ð +2�˜hÑ'Ð'ð ””ð GØ+5°t´y´~Ð*F�˜hÑ'ð ŒyÔ ð #Ø �	Ø ×+Ò+¨GÑ4Ô4ð ?Ø $¤	Ô 1× 5Ò 5Ø˜dœiÔ/×3Ò3°FÑ;Ô;ñ!=ô !=�I�Ið !%¤	Ô 1× 5Ò 5Ø˜tœyÔ0×4Ò4°WÑ=Ô=ñ!?ô !?�Iàð 	#Ý!'¤×!6Ò!6Ø%*¨iÐ%7Ð%7˜	˜	Ø(¨9Ñ4ñ"6ô "6�Jð 8BÔ7J�MÐ"3Ñ4Ø7A´�MÐ"3Ñ4ð &Ô.ð"Ø2<Ô2Eð"˜Ô,¨jÔ.AÐBÐBà!ð "Ð"3Ñ4õ ˜$œ)Ô*­CÑ0Ô0ð (Ø˜}Ð,Ð,Ø:>¼)Ô:J�M (Ô+¨JÑ7Ð7à/9¸4¼9Ô;KÐ.L�M (Ñ+Ð+Ø”YÔ%ð (Ø"'�”àŒð 	GØ˜=Ð(Ð(Ø˜hÔ'×.Ò.°½S¼]Ð/KÑLÔLÐLÐLà+6½¼Ð*F�˜hÑ'ð 	�Š�tÔ3×7Ò7¸À"ÑEÔEÑFÔFÐFØ")ˆ�hÑØ")ˆ�hÑØ.2ˆÐ*Ñ+Ø#'Ô#7ˆ�iÑ Ø×Ò˜TÔ9Ñ:Ô:Ð:ð		EÝÔ,Ø × 7Ò 7Ñ 9Ô 9Ñ9ðLð LØ=JðLð LˆBˆBøå¥­)Ô*FÐGð 	Eð 	Eð 	EØð EØ”×#Ò#Ø@ñBô Bð Bà�u�uå Ô0Ð1CÑDÔDÐDð	Eøøøð ñ 2	<Ý”�fœk°Ð8Ñ8Ô8×?Ò?ÑAÔAˆAðØ—’˜‘
”
�
�
øÝð ð ð Ø”×#Ò#ØMÝ˜‘F”Fñô ð ð �u�u�u�u�uøøøøð	øøøð
Ø—G’G‘I”I��øÝð ð ð Ø”×#Ò#ØMÝ˜‘F”Fñô ð ð �u�u�u�u�uøøøøð	øøøõ
 ”-¨qÐ1Ñ1Ô1ˆCØŒ¥&¤+Ò-Ð-°´¸WÒ1DÐ1DØ”×#Ò#Ø>ñ@ô @ð @à�uÝ”�fœnÑ-Ô-×4Ò4Ñ6Ô6ˆAðØ—’˜‘
”
�
�
øÝð ð ð Ø”×#Ò#ØMÝ˜‘F”Fñô ð ð �u�u�u�u�uøøøøð	øøøð
 &1ˆDÔ"ØŒK×ÒÐ?Ñ@Ô@Ð@Ñ@ð<Ø—G’G‘I”I��øÝð <ð <ð <Ý Ô0Ø1µC¸±F´FÑ:ñ<ô <ð <øøøøð<øøøõ !œ-°qÐ9Ñ9Ô9ˆKØÔ&­&¬+Ò5Ð5Ý Ô0Ð1AÑBÔBÐBØŒK×ÒØ5½¸KÔ<LÑ8MÔ8MÑMñOô Oð Oà"Ô'¨Ô.ˆDŒHØ'Ô,¨ZÔ8ˆDŒMÝ!$ [Ô%5°nÔ%EÑ!FÔ!FÈÑ!OˆDÔÝ # KÔ$4°]Ô$CÑ DÔ DÀvÑ MˆDÔØ%0ˆDÔ"à$ˆDŒJÝÔ)×0Ò0°Ñ6Ô6Ð6Ø×Ò 	°UÐÑ;Ô;Ð;ØˆŒØŒ×Ò˜4Ô-°Ô0AÑAÑBÔBÐBð  $×9Ò9¸$Ô:JÑKÔKˆÔØ"×8Ò8ØÔ%ñ'ô 'ˆÔàˆtsr   Ñ'Q8 Ñ88SÒ3SÔT Ô
UÔ!(UÕUÕU- Õ-
V*Õ7(V%Ö%V*Ø/Y Ù
ZÙ(Y=Ù=ZÚ)Z> Ú>
[1Û$[,Û,[1c                 óØ  — |j         t          t          j        ¦  «        k     rt          j        |j                  nd}| j                             d|t          |j        t          ¦  «        s|j        nd¦  «         |j         t          j	        k    r|  
                    d|j        d¬¦  «         d	S |j         t          j        k    r9|                      t          j        t          j        |j        ¦  «        ¦  «         d	S |j         t          j        k    r#|                      d| j        j        ¬¦  «         d	S |j         t          j        k    rd	S | j                             d|j         ¦  «         d	S )
z(Handle incoming packets from the server.ÚUNKNOWNzReceived packet %s data %sú<binary>ÚmessageTr6   )rD   r<   z%Received unexpected packet of type %sN)r‚   Úlenr	   Úpacket_namesrr   rv   r   r-   Úbytesr0   r;   rÉ   r.   r/   rÌ   r8   r5   r<   ÚSERVER_DISCONNECTÚNOOPrs   )r!   r‘   Úpacket_names      r   rˆ   zClient._receive_packet   sO  € ð Œ¥¥VÔ%8Ñ!9Ô!9Ò9Ð9õ Ô)¨#¬/Ô:Ð:Ø?Hð 	àŒ×ÒØ(¨+Ý& s¤xµÑ7Ô7ÐGˆCŒHˆH¸Zñ	Iô 	Ið 	Ið Œ?�fœnÒ,Ð,Ø×Ò 	¨3¬8¸tÐÑDÔDÐDÐDÐDØŒ_¥¤Ò+Ð+Ø×Ò�fœm­F¬K¸¼ÑBÔBÑCÔCÐCÐCÐCØŒ_¥¤Ò,Ð,Ø�OŠO $¨t¬{Ô/LˆOÑMÔMÐMÐMÐMØŒ_¥¤Ò+Ð+ØˆDàŒK×ÒÐEØ!œoñ/ô /ð /ð /ð /r   c                 óø   — | j         dk    rdS | j                             |¦  «         | j                             dt
          j        |j                 t          |j	        t          ¦  «        s|j	        nd¦  «         dS )z(Queue a packet to be sent to the server.r3   NzSending packet %s data %srÚ   )r   r9   r:   rr   rv   r	   rÝ   r‚   r   r-   rÞ   )r!   r‘   s     r   r.   zClient._send_packet³  s{   € àŒ:˜Ò$Ð$ØˆFØŒ
�Š�sÑÔÐØŒ×ÒØ'ÝÔ ¤Ô0Ý& s¤xµÑ7Ô7ÐGˆCŒHˆH¸Zñ	Iô 	Ið 	Ið 	Ið 	Ir   c                 ó@  — | j         €t          j        ¦   «         | _         | j        sd| j         _        	 | j                              |||||¬¦  «        S # t          j        j        $ r6}| j         	                    d|||¦  «         t          |¦  «        cY d }~S d }~ww xY w)NF)r#   r-   re   z+HTTP %s request to %s failed with error %s.)r�   rq   ÚSessionr¿   r¾   Úrequestr   ÚRequestExceptionrr   rv   r   )r!   Úmethodr"   r#   Úbodyre   Úexcs          r   rw   zClient._send_request½  s½   € ð Œ9ÐÝ Ô(Ñ*Ô*ˆDŒIØŒð 	%Ø$ˆDŒIÔð	Ø”9×$Ò$ V¨S¸'ÈØ-4ð %ñ 6ô 6ð 6øåÔ"Ô3ð 	ð 	ð 	ØŒK×ÒÐJØ# S¨#ñ/ô /ð /å�s‘8”8ˆOˆOˆOˆOˆOˆOøøøøð	øøøs   ´A ÁBÁ'+BÂBÂBc                 óf  — |                      dd¦  «        }|| j        v r‘|r | j        | j        |         g|¢R Ž S 	 	  | j        |         |Ž S # t          $ r2 |dk    r*t	          |¦  «        dk    r | j        |         ¦   «         cY S ‚ w xY w#  | j                             |dz   ¦  «         Y dS xY wdS )zInvoke an event handler.r7   Fr5   r   z handler errorN)rÄ   ÚhandlersrN   Ú	TypeErrorrÜ   rr   Ú	exception)r!   ÚeventrG   rH   r7   s        r   r;   zClient._trigger_eventÌ  sø   € à—J’J˜{¨EÑ2Ô2ˆ	Ø�D”MÐ!Ð!Øð DØ1�tÔ1°$´-ÀÔ2FÐNÈÐNÐNÐNÐNðDð	"Ø3˜tœ}¨UÔ3°TÐ:Ð:øÝ$ð "ð "ð "Ø  LÒ0Ð0Ý # D¡	¤	¨Q¢ ð $8 4¤=°Ô#7Ñ#9Ô#9Ð9Ð9Ð9à!ð"øøøøðDØ”K×)Ò)¨%Ð2BÑ*BÑCÔCÐCÐCÐCÐCøøøð! "Ð!s#   ½A Á8B	ÂB ÂB	Â	B ÂB.c                 ó   — | j         dk    �r»| j        �r³| j                             d| j        z   ¦  «         |                      d| j        |                      ¦   «         z   t          | j        | j	        ¦  «        dz   ¬¦  «        }|�t          |t          ¦  «        r7| j                             |pd¦  «         | j                             d¦  «         nö|j        dk     s|j        d	k    r;| j                             d
|j        ¦  «         | j                             d¦  «         n¥	 t!          j        |j                             d¦  «        ¬¦  «        }nD# t(          $ r7 | j                             d¦  «         | j                             d¦  «         Y n6w xY w|j        D ]}|                      |¦  «         Œ| j         dk    r| j        �°³| j        r3| j                             d¦  «         | j                             ¦   «          | j         dk    rg|                      d| j        j        d¬¦  «         	 t6          j                             | ¦  «         n# t(          $ r Y nw xY w|                      ¦   «          | j                             d¦  «         dS )z-Read packets by polling the Engine.IO server.r3   zSending polling GET request to rd   é   ©re   Nú*Connection refused by the server, abortingrf   rg   ú6Unexpected status code %s in server response, abortingrh   ri   z'Unexpected packet from server, abortingú"Waiting for write loop task to endr5   Fr6   úExiting read loop task)r   r‹   rr   rv   ru   rw   rx   Úmaxr…   r†   r   r   rÈ   r9   r:   r{   r
   r~   r   r€   r   r�   rˆ   r(   r;   r<   ÚTRANSPORT_ERRORr   rA   rB   rC   )r!   r�   r�   r‘   s       r   rŒ   zClient._read_loop_pollingá  sÆ  € àŒj˜KÒ'Ñ'¨DÔ,@Ñ'ØŒK×ÒØ1°D´MÑAñCô Cð Cà×"Ò"Ø�t”} t×'>Ò'>Ñ'@Ô'@Ñ@Ý˜DÔ.°Ô0AÑBÔBÀQÑFð #ñ Hô HˆAð ˆy�J q­#Ñ.Ô.ˆyØ”×#Ò#ØÐEÐEñGô Gð Gà”
—’˜tÑ$Ô$Ð$ØØŒ}˜sÒ"Ð" a¤m°sÒ&:Ð&:Ø”×#Ò#ð %9Ø:;¼-ñIô Ið Ià”
—’˜tÑ$Ô$Ð$ØðÝ”O°A´I×4DÒ4DÀWÑ4MÔ4MÐNÑNÔN��øÝð ð ð Ø”×#Ò#Ø=ñ?ô ?ð ?à”
—’˜tÑ$Ô$Ð$Ø�ð	øøøð
 ”yð *ð *�Ø×$Ò$ SÑ)Ô)Ð)Ð)ð1 Œj˜KÒ'Ð'¨DÔ,@Ñ'ð4 Ôð 	(ØŒK×ÒÐAÑBÔBÐBØÔ ×%Ò%Ñ'Ô'Ð'ØŒ:˜Ò$Ð$Ø×Ò ¨d¬kÔ.IØ*/ð  ñ 1ô 1ð 1ðÝÔ-×4Ò4°TÑ:Ô:Ð:Ð:øÝð ð ð Ø�ðøøøà�KŠK‰MŒMˆMØŒ×ÒÐ1Ñ2Ô2Ð2Ð2Ð2s$   Ä$-E Å>FÆFÈ0I É
IÉIc                 óª  — | j         dk    �r d}	 | j                             ¦   «         }t          |¦  «        dk    r| j        j        st          j        ¦   «         ‚�n# t
          j        $ r8 | j         	                    d¦  «         | j
                             d¦  «         Y �njt
          j        $ r8 | j         	                    d¦  «         | j
                             d¦  «         Y �n%t          $ rˆ}t          |¦  «        t          u r&|j        dk    r| j                             d¦  «         n(| j                             dt#          |¦  «        ¦  «         | j
                             d¦  «         Y d}~n™d}~ww xY w	 t%          j        |¬	¦  «        }nY# t          $ rL}| j                             d
t#          |¦  «        ¦  «         | j
                             d¦  «         Y d}~n)d}~ww xY w|                      |¦  «         | j         dk    �° | j        r3| j                             d¦  «         | j                             ¦   «          | j         dk    rg|                      d| j        j        d¬¦  «         	 t4          j                             | ¦  «         n# t:          $ r Y nw xY w|                      ¦   «          | j                             d¦  «         dS )z5Read packets from the Engine.IO WebSocket connection.r3   Nr   z*Server has stopped communicating, abortingú)WebSocket connection was closed, abortingé	   z)WebSocket connection is closing, abortingz1Unexpected error receiving packet: "%s", abortingr§   z0Unexpected error decoding packet: "%s", abortingrô   r5   Fr6   rõ   )r   r?   rË   rÜ   r3   r   Ú"WebSocketConnectionClosedExceptionÚWebSocketTimeoutExceptionrr   rÈ   r9   r:   rÊ   ÚtyperÆ   Úerrnorv   r   r	   r/   rˆ   r‹   r(   r;   r<   r÷   r   rA   rB   r   rC   )r!   r�   r×   r‘   s       r   rÏ   zClient._read_loop_websocket
  s  € àŒj˜KÒ'Ñ'ØˆAðØ”G—L’L‘N”N�Ý�q‘6”6˜Q’;�; t¤wÔ'8�;å#ÔFÑHÔHÐHùøÝÔ6ð ð ð Ø”×#Ò#Ø@ñBô Bð Bà”
—’˜tÑ$Ô$Ð$Ø‘ÝÔ?ð ð ð Ø”×#Ò#Ø?ñAô Að Aà”
—’˜tÑ$Ô$Ð$Ø‘Ýð 	ð 	ð 	Ý˜‘7”7�gÐ%Ð%¨!¬'°Qª,¨,Ø”K×$Ò$ØCñEô Eð Eð Eð ”K×$Ò$ØKÝ˜A™œñ ô  ð  ð ”
—’˜tÑ$Ô$Ð$Ø����øøøøð	øøøðÝ”m°1Ð5Ñ5Ô5��øÝð ð ð Ø”× Ò ØFÍÈAÉÌñPô Pð Pà”
—’˜tÑ$Ô$Ð$Ø����øøøøð	øøøð
 × Ò  Ñ%Ô%Ð%ðE Œj˜KÒ'Ñ'ðH Ôð 	(ØŒK×ÒÐAÑBÔBÐBØÔ ×%Ò%Ñ'Ô'Ð'ØŒ:˜Ò$Ð$Ø×Ò ¨d¬kÔ.IØ*/ð  ñ 1ô 1ð 1ðÝÔ-×4Ò4°TÑ:Ô:Ð:Ð:øÝð ð ð Ø�ðøøøà�KŠK‰MŒMˆMØŒ×ÒÐ1Ñ2Ô2Ð2Ð2Ð2sR   �AA ÁAE9Â#AE9Ã(	E9Ã1A>E4Å4E9Å=F Æ
G)ÆAG$Ç$G)É5J Ê
J"Ê!J"c                 óŽ  — | j         dk    �ržt          | j        | j        ¦  «        dz   }d}	 | j                             |¬¦  «        g}n+# | j        $ r | j                             d¦  «         Y �n:w xY w|dgk    r| j         	                    ¦   «          g }nn	 	 | 
                    | j                             d¬¦  «        ¦  «         n# | j        $ r Y n1w xY w|d	         €$|dd	…         }| j         	                    ¦   «          nŒm|s�n¡| j        d
k    rÞt          j        |¬¦  «        }|                      d| j        |                     ¦   «         ddi| j        ¬¦  «        }|D ]}| j         	                    ¦   «          Œ|�t%          |t&          ¦  «        r| j                             |pd¦  «         n÷|j        dk     s|j        dk    r(| j                             d|j        ¦  «         d| _        n¹n¬	 |D ]k}|                     ¦   «         }|j        r| j                             |¦  «         n| j                             |¦  «         | j         	                    ¦   «          Œln<# t6          j        t:          t<          f$ r | j                             d¦  «         Y nw xY w| j         dk    �°ž| j                             d¦  «         dS )zhThis background task sends packages to the server as they are
        pushed to the send queue.
        r3   rð   Nrñ   zpacket queue is empty, abortingTF)Úblockéÿÿÿÿr   )r�   ÚPOSTzContent-Typez
text/plain)rè   r#   re   rò   rf   rg   ró   rù   zExiting write loop task) r   rö   r…   r†   r9   r¶   ra   rr   rs   r`   r‡   r>   r
   r~   rw   ru   r²   ry   r   r   rÈ   r{   r‹   Úbinaryr?   Úsend_binaryr1   r   rû   ÚBrokenPipeErrorrÆ   rv   )r!   re   r�   r�   r�   r‘   r¨   s          r   rŠ   zClient._write_loop=  sG  € ð Œj˜KÒ'Ñ'õ ˜$Ô,¨dÔ.?Ñ@Ô@À1ÑDˆGØˆGðØœ:Ÿ>š>°'˜>Ñ:Ô:Ð;��øØÔ#ð ð ð Ø”×!Ò!Ð"CÑDÔDÐDØ‘ðøøøð ˜4˜&Ò Ð Ø”
×$Ò$Ñ&Ô&Ð&Ø��ððØŸš t¤z§~¢~¸E ~Ñ'BÔ'BÑCÔCÐCÐCøØÔ+ð ð ð Ø˜ðøøøà˜r”{Ð*Ø")¨#¨2¨#¤,˜Øœ
×,Ò,Ñ.Ô.Ð.Øðð ð áØÔ%¨Ò2Ð2Ý”O¨GÐ4Ñ4Ô4�Ø×&Ò&Ø˜DœM°·²±
´
Ø+¨\Ð:Ø Ô0ð 'ñ 2ô 2�ð #ð +ð +�CØ”J×(Ò(Ñ*Ô*Ð*Ð*Ø�9¥
¨1­cÑ 2Ô 2�9Ø”K×'Ò'ØÐIÐIñKô Kð KàØ”= 3Ò&Ð&¨!¬-¸3Ò*>Ð*>Ø”K×'Ò'ð )=Ø>?¼mñMô Mð Mà+/�DÔ(Øð	 +?ðØ&ð /ð /˜Ø),¯ª©¬˜Øœ:ð 9Ø œG×/Ò/°Ñ?Ô?Ð?Ð?à œGŸLšL¨Ñ8Ô8Ð8Øœ
×,Ò,Ñ.Ô.Ð.Ð.ð/øõ "ÔDÝ'­ð2ð ð ð à”K×'Ò'ØCñEô Eð Eà�Eð	øøøðm Œj˜KÒ'Ñ'ðv 	Œ×ÒÐ2Ñ3Ô3Ð3Ð3Ð3s6   ­A
 Á
$A2Á1A2Â.C	 Ã	
CÃCÇ4A.I# É#6JÊJ)NNr   )FN)r   )NNN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r%   r*   r1   r5   rN   rQ   rV   rY   r\   rC   r’   r‰   rˆ   r.   rw   r;   rŒ   rÏ   rŠ   Ú__classcell__)rb   s   @r   r   r      s†  ø€ € € € € ð#ð #ðH 59Ø)ð!/ð !/ð !/ð !/ðF'ð 'ð 'ðDð Dð Dðð ð ð ð0ð ð ð&#ð #ð #ð #ð,ð ,ð ,ðð ð ð0ð 0ð 0ðð ð ð ð ð;%ð ;%ð ;%ðzfð fð fðP/ð /ð /ð&Ið Ið Ið 37Øðð ð ð ðDð Dð Dð*'3ð '3ð '3ðR13ð 13ð 13ðf?4ð ?4ð ?4ð ?4ð ?4ð ?4ð ?4r   r   )Úbase64r   Úhttp.cookiesr   Úloggingr9   rÁ   rJ   rP   r·   Úengineio.jsonr   rq   ÚImportErrorr   r”   r   r   r	   r
   Ú	getLoggerÚdefault_loggerÚ
BaseClientr   r   r   r   ú<module>r     s|  ðØ Ð Ð Ð Ð Ð Ø %Ð %Ð %Ð %Ð %Ð %Ø €€€Ø €€€Ø 
€
€
€
Ø Ð Ð Ð Ø €€€Ø €€€Ø )Ð )Ð )Ð )Ð )Ð )ðØ€O€O€O€OøØð ð ð Ø€H€H€HðøøøðØÐÐÐÐøØð ð ð Ø€I€I€Iðøøøà Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à"�Ô"Ð#4Ñ5Ô5€ða	4ð a	4ð a	4ð a	4ð a	4ˆ[Ô#ñ a	4ô a	4ð a	4ð a	4ð a	4s   ¬1 ±;º;¿A ÁAÁA