
    i(                     b    d dl Z d dlZd dlmZmZ d Zd Zd Z G d d          Zdeeeed	Z	dS )
    N)ResponseWebSocketResponsec                     | j                             ||j                   | j                             ||j                   | j                             d||j                   dS )zThis function sets up the engine.io endpoint as a route for the
    application.

    Note that both GET and POST requests must be hooked up on the engine.io
    endpoint.
    OPTIONSN)routeradd_gethandle_requestadd_post	add_route)appengineio_serverengineio_endpoints      I/usr/local/lib/python3.11/dist-packages/engineio/async_drivers/aiohttp.pycreate_router      sk     J(/*HIIIJ)?+IJJJJ$5(79 9 9 9 9    c                 ,   i d| j         dt          j        ddddddd	dd
dddd| j        d| j        pdd| j        dd| j        d          d| j        d          ddddddddd| }| j                                        D ]`\  }}|	                                }|dk    r||d<   %|dk    r||d <   1d!|
                    d"d#          z  }||v r||          d$| }|||<   a|                    d%d&          |d'<   | j        |d(<   d|d)<   |S )*zThis function takes the arguments passed to the request handler and
    uses them to generate a WSGI compatible environ dictionary.
    z
wsgi.inputzwsgi.errorszwsgi.version)   r   z
wsgi.asyncTzwsgi.multithreadFzwsgi.multiprocesszwsgi.run_onceSERVER_SOFTWAREaiohttpREQUEST_METHODQUERY_STRING RAW_URISERVER_PROTOCOLzHTTP/r   .r   REMOTE_ADDRz	127.0.0.1REMOTE_PORT0SERVER_NAMESERVER_PORTaiohttp.requestzCONTENT-TYPECONTENT_TYPEzCONTENT-LENGTHCONTENT_LENGTHzHTTP_%s-_,HTTP_X_FORWARDED_PROTOhttpzwsgi.url_scheme	PATH_INFOSCRIPT_NAME)contentsysstderrmethodquery_stringpath_qsversionheadersitemsupperreplacegetpath)requestenvironhdr_name	hdr_valuekeys        r   translate_requestr=      s   gosz 	 	d	
 	E 	U 	 	9 	'. 	,2 	7? 	L7?1#5LL8JLL 	{ 	s 	y  	s!" 	7#G(  '4466 ! !)>>##~%%&/GN#)))(1G$%(**3444'>>"3<55)55I !(-Ev!N!NG"<GKGMNr   c                 p    t          |t          |                                 d                   |          S )zTThis function generates an appropriate response object for this async
    mode.
    r   )bodystatusr2   )r   intsplit)r@   r2   payloadr9   s       r   make_responserD   C   s7     V\\^^A->)?)?#% % % %r   c                   0    e Zd ZdZd Zd Zd Zd Zd ZdS )	WebSocketz
    This wrapper class provides a aiohttp WebSocket interface that is
    somewhat compatible with eventlet's implementation.
    c                 "    || _         d | _        d S N)handler_sock)selfrI   servers      r   __init__zWebSocket.__init__P   s    


r   c                    K   |d         }t          d          | _        | j                            |           d {V  || _        |                     |            d {V  | j        S )Nr!   r   )max_msg_size)r   rJ   preparer9   rI   )rK   r9   r8   s      r   __call__zWebSocket.__call__T   s~      +,&A666
j  )))))))))ll4         zr   c                 H   K   | j                                          d {V  d S rH   )rJ   close)rK   s    r   rS   zWebSocket.close]   s2      j           r   c                    K   t          |t                    r| j        j        }n| j        j        }t          j        |          r ||           d {V  d S  ||           d S rH   )
isinstancebytesrJ   
send_bytessend_strinspectiscoroutinefunction)rK   messagefs      r   sendzWebSocket.send`   sx      gu%% 	$
%AA
#A&q)) 	!G**AgJJJJJr   c                    K   | j                                          d {V }t          |j        t                    s(t          |j        t
                    st                      |j        S rH   )rJ   receiverU   datarV   strOSError)rK   msgs     r   waitzWebSocket.waitj   sc      J&&((((((((#(E** 	sx--	))Oxr   N)	__name__
__module____qualname____doc__rM   rQ   rS   r]   rd    r   r   rF   rF   K   si             ! ! !      r   rF   T)asyncior   r=   rD   	websocket)
rY   r,   aiohttp.webr   r   r   r=   rD   rF   _asyncri   r   r   <module>rn      s     



 3 3 3 3 3 3 3 3
9 
9 
9, , ,^% % %$ $ $ $ $ $ $ $P  *"
 
r   