
    wg                     ~    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y)    N   )packetzengineio.clientc                     t         dd D ]#  }|j                         r|j                          % 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      Y/home/mcse/projects/flask/flask-venv/lib/python3.12/site-packages/engineio/base_client.pysignal_handlerr      s]    
 $A&  &&(  '(&sE22 ))#u55    c                   \    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y)
BaseClient)connectr   messagec                       e Zd ZdZdZdZdZy)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!   Nc	                    |rWt         Qt        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 | _        d| _        || _        |xs i | _        || _        ||t4        j6                  _        t;        |t<              s|| _        || _)        y t@        | _        | j>                  jB                  tD        jF                  k(  r|r*| j>                  jI                  tD        jJ                         n)| j>                  jI                  tD        jL                         | j>                  jO                  tE        jP                                || _)        y 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)	selfr@   r=   rJ   http_sessionr9   r3   r:   r;   s	            r   __init__zBaseClient.__init__*   sv    4<((*i.C.C.EE&,mmFMM4B'D#!%!  	)5*"#
#
$'>'D"$"4!%FMM&$' DK  / )DK{{  GNN2KK((6KK((7&&w'<'<'>?.r   c                      y)NFr    rK   s    r   r   zBaseClient.is_asyncio_basedU   s    r   c                 ^      j                   vrt        d       fd}||S  ||       y)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eventrK   s    r   set_handlerz"BaseClient.on.<locals>.set_handlerq   s    #*DMM% Nr   N)event_names
ValueError)rK   rT   rS   rU   s   ``  r   onzBaseClient.onX   s8    , (((_--	 ?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,   rO   s    r   	transportzBaseClient.transporty   s     %%%r   c                      d| _         d | _        y r#   )r8   r-   rO   s    r   _resetzBaseClient._reset   s    #
r   c                 <   |j                  d      }t        j                  j                  |      }|dk(  rd}n|dk(  rd}nt	        d      |j
                  dv r|dz  }d	j                  ||j                  ||j                  |j                  rd
|      S d|      S )z&Generate the Engine.IO connection URL./pollingr1   	websocketr4   zinvalid transport)httpswssszC{scheme}://{netloc}/{path}/?{query}{sep}transport={transport}&EIO=4& )schemenetlocpathqueryseprZ   )	stripurllibparseurlparserW   rf   formatrg   ri   )rK   urlengineio_pathrZ   
parsed_urlrf   s         r   _get_engineio_urlzBaseClient._get_engineio_url   s    %++C0\\**3/
	!F+%F011 00cMF34:F!**;*;&j.>.>)//'	 5; 5)	) 68'	 5; 5)	)r   c                 \    | j                   sydt        t        j                               z   S )z.Generate the Engine.IO query string timestamp.re   z&t=)r;   strtimerO   s    r   _get_url_timestampzBaseClient._get_url_timestamp   s$    &&s499;'''r   )FN   NTTNTrR   )r   r   r   rV   r!   rM   r   rX   rZ   r\   rs   rw   r    r   r   r   r      sC    6K, , ABCGBF)/VB&)*(r   r   )rC   r   r%   rv   rl   re   r   	getLoggerrA   r   r   r
   r   r    r   r   <module>rz      sI         """#45 6  @( @(r   