
    Ii                     ~    S SK r S SKrS SKrS SKrS SKrSSKJr  \ R                  " S5      r/ r	S r
Sq " S S5      rg)    N   )packetzengineio.clientc                     [         SS  H*  nUR                  5       (       a  M  UR                  5         M,     [        [        5      (       a  [	        X5      $ [
        R                  " X5      $ )z\SIGINT 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      :/venv/lib/python3.13/site-packages/engineio/base_client.pysignal_handlerr      sZ    
 $A&&&(( ' '((&s22 ))#55    c                   h    \ rS rSr/ SQr " S S5      r   SS jrS rSS jrS	 r	S
 r
S rS rSrg)
BaseClient   )connectr   messagec                   $    \ rS rSrSrSrSrSrSrg)BaseClient.reason!   zDisconnection reasons.zclient disconnectzserver disconnectztransport error N)	__name__
__module____qualname____firstlineno____doc__CLIENT_DISCONNECTSERVER_DISCONNECTTRANSPORT_ERROR__static_attributes__r   r   r   reasonr   !   s    $//+r   r%   Nc	                    U(       a\  [         cU  [        R                  " 5       [        R                  " 5       :X  a)  [        R                  " [        R
                  [        5      q 0 U l        S U l        S U l	        S U l
        S U l        S U l        S U l        S U l        X@l        US LU l        X`l        S U l        S U l        S U l        S U l        SU l        XPl        U=(       d    0 U l        Xl        Ub  U[4        R6                  l        [;        U[<        5      (       d  Xl        O[@        U l        U R>                  RB                  [D        RF                  :X  a  U(       a*  U R>                  RI                  [D        RJ                  5        O)U R>                  RI                  [D        RL                  5        U R>                  RO                  [D        RP                  " 5       5        X0l)        g 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queue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=   r7   r>   r?   s	            r   __init__BaseClient.__init__*   sa    4<((*i.C.C.EE&,mmFMM4B'D#!%!  	)5*"#
#
$'>'D"$"4!%FMM&$'' K(DK{{  GNN2KK((6KK((7&&w'<'<'>?.r   c                     g)NFr   rO   s    r   r   BaseClient.is_asyncio_basedU   s    r   c                 f   ^ ^ TT R                   ;  a  [        S5      eUU 4S jnUc  U$ U" U5        g)ab  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                 &   > U TR                   T'   U $ N)r-   )handlereventrO   s    r   set_handler"BaseClient.on.<locals>.set_handlerq   s    #*DMM% Nr   N)event_names
ValueError)rO   rZ   rY   r[   s   ``  r   onBaseClient.onX   s8    , (((_--	 ?Gr   c                     U R                   $ )zReturn the name of the transport currently in use.

The possible values returned by this function are ``'polling'`` and
``'websocket'``.
)r0   rT   s    r   	transportBaseClient.transporty   s     %%%r   c                      SU l         S U l        g r'   )r<   r1   rT   s    r   _resetBaseClient._reset   s    #
r   c           	      >   UR                  S5      n[        R                  R                  U5      nUS:X  a  SnOUS:X  a  SnO[	        S5      eUR
                  S;   a  US-  nS	R                  XTR                  X$R                  UR                  (       a  S
US9$ SUS9$ )z&Generate the Engine.IO connection URL./pollingr5   	websocketr8   zinvalid transport)httpswssszC{scheme}://{netloc}/{path}/?{query}{sep}transport={transport}&EIO=4& )schemenetlocpathqueryseprb   )	stripurllibparseurlparser^   rp   formatrq   rs   )rO   urlengineio_pathrb   
parsed_urlrp   s         r   _get_engineio_urlBaseClient._get_engineio_url   s    %++C0\\**3/
	!F+%F011 00cMF34:F!*;*;&.>.>)//'	 5; 5)	) 68'	 5; 5)	)r   c                 h    U R                   (       d  gS[        [        R                  " 5       5      -   $ )z.Generate the Engine.IO query string timestamp.ro   z&t=)r?   strtimerT   s    r   _get_url_timestampBaseClient._get_url_timestamp   s$    &&s499;'''r   )r.   r0   r6   r7   r-   r5   rD   r3   r4   r;   r9   rN   r1   r=   r<   r?   r/   r2   r>   r:   r8   )FN   NTTNTrX   )r   r   r   r   r]   r%   rQ   r   r_   rb   re   r}   r   r$   r   r   r   r   r      sC    6K, , ABCGBF)/VB&)*(r   r   )rG   r   r)   r   rv   ro   r   	getLoggerrE   r   r   r
   r   r   r   r   <module>r      sG         ""#45 6  @( @(r   