
    i                         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  e j        d          Zg Z	d Z
da G d d          ZdS )    N   )packetzengineio.clientc                     t           dd         D ]*}|                                s|                                 +t          t                    rt	          | |          S t          j        | |          S )zdSIGINT handler.

    Disconnect all active clients and then invoke the original signal handler.
    N)connected_clientsis_asyncio_based
disconnectcallableoriginal_signal_handlersignaldefault_int_handler)sigframeclients      ?/usr/local/lib/python3.11/dist-packages/engineio/base_client.pysignal_handlerr      sy    
 $AAA&    &&(( 	 '(( 6&sE222 )#u555    c                   p    e Zd Zg dZ G d d          Z	 	 	 ddZd	 Zdd
Zd Zd Z	d Z
d Zd Zd ZdS )
BaseClient)connectr   messagec                       e Zd ZdZdZdZdZdS )BaseClient.reasonzDisconnection reasons.zclient disconnectzserver disconnectztransport errorN)__name__
__module____qualname____doc__CLIENT_DISCONNECTSERVER_DISCONNECTTRANSPORT_ERROR r   r   reasonr   !   s%        $$//+r   r!   FN   Tc	                    |rSt           Lt          j                    t          j                    k    r$t	          j        t          j        t                    a i | _        d | _        d | _	        d | _
        d | _        d | _        d | _        d | _        || _        |d u| _        || _        d | _        d | _        d | _        |                                 | _        |                                 | _        d| _        || _        |pi | _        || _        ||t:          j        _        tA          |tB                    s|| _"        ntF          | _"        | j"        j$        tJ          j&        k    rv|r%| j"        '                    tJ          j(                   n$| j"        '                    tJ          j)                   | j"        *                    tK          j+                               || _,        d S Ndisconnected)-r
   	threadingcurrent_threadmain_threadr   SIGINTr   handlersbase_url
transportscurrent_transportsidupgradesping_intervalping_timeouthttpexternal_httphandle_sigintwsread_loop_taskwrite_loop_taskcreate_queuequeueget_queue_empty_exceptionqueue_emptystate
ssl_verifywebsocket_extra_optionstimestamp_requestsr   Packetjson
isinstanceboolloggerdefault_loggerlevelloggingNOTSETsetLevelINFOERROR
addHandlerStreamHandlerrequest_timeout)	selfrD   rA   rN   http_sessionr=   r4   r>   r?   s	            r   __init__zBaseClient.__init__*   s     	D4<(**i.C.E.EEE&,mFM4B'D 'D#!%!  	)5*"#&&((
99;;#
$'>'D"$"4!%FM&$'' 		@ DKK(DK{ GN22 8K((6666K((777&&w'<'>'>???.r   c                     dS )NFr    rO   s    r   r   zBaseClient.is_asyncio_basedV   s    ur   c                 d      j         vrt          d           fd}||S  ||           dS )a  Register an event handler.

        :param event: The event name. Can be ``'connect'``, ``'message'`` or
                      ``'disconnect'``.
        :param handler: The function that should be invoked to handle the
                        event. When this parameter is not given, the method
                        acts as a decorator for the handler function.

        Example usage::

            # as a decorator:
            @eio.on('connect')
            def connect_handler():
                print('Connection request')

            # as a method:
            def message_handler(msg):
                print('Received message: ', msg)
                eio.send('response')
            eio.on('message', message_handler)
        zInvalid eventc                     | j         <   | S N)r*   )handlereventrO   s    r   set_handlerz"BaseClient.on.<locals>.set_handlerr   s    #*DM% Nr   N)event_names
ValueError)rO   rX   rW   rY   s   ``  r   onzBaseClient.onY   sc    , (((_---	 	 	 	 	 	 ?Gr   c                     | j         S )zReturn the name of the transport currently in use.

        The possible values returned by this function are ``'polling'`` and
        ``'websocket'``.
        )r-   rS   s    r   	transportzBaseClient.transportz   s     %%r   c                 "    d| _         d | _        d S r$   )r<   r.   rS   s    r   _resetzBaseClient._reset   s    #
r   c                 $   |                     d          }t          j                            |          }|dk    rd}n|dk    rd}nt	          d          |j        dv r|dz  }d	                    ||j        ||j        |j        rd
nd|          S )z&Generate the Engine.IO connection URL./pollingr2   	websocketr5   zinvalid transport)httpswssszC{scheme}://{netloc}/{path}/?{query}{sep}transport={transport}&EIO=4& )schemenetlocpathquerysepr^   )	stripurllibparseurlparser[   rj   formatrk   rm   )rO   urlengineio_pathr^   
parsed_urlrj   s         r   _get_engineio_urlzBaseClient._get_engineio_url   s    %++C00\**3//
	!!FF+%%FF0111 000cMF34:F!**;&j.>)/7R'	 5; 5) 5)	)r   c                 Z    | j         sdS dt          t          j                              z   S )z.Generate the Engine.IO query string timestamp.ri   z&t=)r?   strtimerS   s    r   _get_url_timestampzBaseClient._get_url_timestamp   s+    & 	2s49;;''''r   c                      t          d          )zCreate a queue object.!must be implemented in a subclassNotImplementedError)rO   argskwargss      r   r8   zBaseClient.create_queue   s    !"EFFFr   c                      t          d          )zlReturn the queue empty exception raised by queues created by the
        ``create_queue()`` method.
        r}   r~   rS   s    r   r:   z$BaseClient.get_queue_empty_exception   s     ""EFFFr   )FNr"   NTTNTrV   )r   r   r   rZ   r!   rQ   r   r\   r^   r`   rw   r{   r8   r:   r    r   r   r   r      s        666K, , , , , , , , ABCGBF*/ */ */ */X     B& & &  ) ) )*( ( (G G GG G G G Gr   r   )rG   r   r&   rz   rp   ri   r   	getLoggerrE   r   r   r
   r   r    r   r   <module>r      s                 ""#455 6 6 6  KG KG KG KG KG KG KG KG KG KGr   