
    wg                         d dl Z d dl mZ d dlmZ 	 d dlZdZ G d de j                        Z	e G d de      Z
n
 G d	 d      Z
e	ej                  ej                  ee
e j                  d
Zy# e$ r	 d dlmZ Y bw xY w)    N)queue)Event)SimpleWebSocketWSGIc                   .     e Zd ZdZg i f fd	Zd Z xZS )Threadz
    This wrapper class provides gevent Greenlet interface that is compatible
    with the standard library's Thread class.
    c                 ,    t        |   |g|i | y N)super__init__)selftargetargskwargs	__class__s       b/home/mcse/projects/flask/flask-venv/lib/python3.12/site-packages/engineio/async_drivers/gevent.pyr   zThread.__init__   s    1$1&1    c                 "    | j                         S r	   )runr   s    r   _runzThread._run   s    xxzr   )__name__
__module____qualname____doc__r   r   __classcell__r   s   @r   r   r      s     %'r 2r   r   c                   "     e Zd ZdZ fdZ xZS )WebSocketWSGIz
        This wrapper class provides a gevent WebSocket interface that is
        compatible with eventlet's implementation, using the simple-websocket
        package.
        c                     dd l }dd l}t        |   ||t        |j
                  j                  |j                  j                         y )Nr   )thread_classevent_classselector_class)	gevent.eventgevent.selectorsr
   r   r   eventr   	selectorsDefaultSelector)r   handlerservergeventr   s       r   r   zWebSocketWSGI.__init__    sA      #GWf*0)/););,2,<,<,L,L  Nr   )r   r   r   r   r   r   r   s   @r   r   r      s    	
		N 		Nr   r   c                   .    e Zd ZdZd Zd Zd Zd Zd Zy)r   z
        This wrapper class provides a gevent WebSocket interface that is
        compatible with eventlet's implementation, using the gevent-websocket
        package.
        c                     || _         y r	   )app)r   r(   r)   s      r   r   zWebSocketWSGI.__init__1   s	    DHr   c                 <   d|vrt        d      |d   | _        || _        | j                  j                  | _        | j                  j                  | _        | j                  j
                  | _        | j                  j                  | _        | j                  |       S )Nzwsgi.websocketzThe gevent-websocket server is not configured appropriately. See the Deployment section of the documentation for more information.)RuntimeError_sockenvironversionpathoriginprotocolr-   )r   r1   start_responses      r   __call__zWebSocketWSGI.__call__4   s    w." $I J J !!12DJ"DL::--DL

DI**++DK JJ//DM88D>!r   c                 6    | j                   j                         S r	   )r0   closer   s    r   r9   zWebSocketWSGI.closeB   s    ::##%%r   c                 8    | j                   j                  |      S r	   )r0   send)r   messages     r   r;   zWebSocketWSGI.sendE   s    ::??7++r   c                 6    | j                   j                         S r	   )r0   receiver   s    r   waitzWebSocketWSGI.waitH   s    ::%%''r   N)	r   r   r   r   r   r7   r9   r;   r?    r   r   r   r   +   s     	
		"	&	,	(r   )threadr   queue_emptyr%   	websocketsleep)r*   r   r#   r   geventwebsocketr   ImportError&engineio.async_drivers._websocket_wsgiGreenletr   r   JoinableQueueEmptyrD   _asyncr@   r   r   <module>rL      s      K	V__ 	 "N+ N"( (D   ;;\\
I  KJKs   A- -A;:A;