
    i                         S SK r S SKJr   S SKJr   S SKJr  S r	S r
S r " S S	5      rS
\	\
\\(       a  \OSS.rg! \ a	    S SKJr   N3f = f! \ a    SrSr NCf = f)    N)urlsplit)HTTPResponse)WebSocketProtocolc                     U R                  UR                  U/ SQS9   U R                  5         g! [         a     gf = f)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.
)GETPOSTOPTIONS)methodsN)	add_routehandle_requestenable_websocketAttributeError)appengineio_serverengineio_endpoints      Y/home/admin/cozy_coffee/venv/lib/python3.13/site-packages/engineio/async_drivers/sanic.pycreate_router      sF     MM/002C4  6 s   0 
==c                     " S S5      n[        U R                  5      n0 SU" U R                  5      _S[        R                  _SS_SS_S	S
_SS
_SS
_SS_SU R
                  _SUR                  =(       d    S_SU R                  _SSU R                  -   _SS_SS_SS_SS_SU _nU R                  R                  5        HT  u  pEUR                  5       nUS:X  a  XSS'   M!  US:X  a  XSS'   M-  S UR                  S!S"5      -  nXc;   a	  X6    S#U 3nXSU'   MV     UR                  S$S%5      US&'   UR                  nXsS''   SUS('   U$ ))zThis function takes the arguments passed to the request handler and
uses them to generate a WSGI compatible environ dictionary.
c                   $    \ rS rSrS rSS jrSrg)+translate_request.<locals>.AwaitablePayload#   c                 $    U=(       d    SU l         g N    payload)selfr   s     r   __init__4translate_request.<locals>.AwaitablePayload.__init__$   s    ">cDLr   Nc                    #    Uc  U R                   nSU l         U$ U R                   S U nU R                   US  U l         U$ 7fr   r   )r   lengthrs      r   read0translate_request.<locals>.AwaitablePayload.read'   sJ     ~LL" H LL&)#||FG4Hs   >A r   N)__name__
__module____qualname____firstlineno__r   r#   __static_attributes__ r   r   AwaitablePayloadr   #   s    	*	r   r,   z
wsgi.inputzwsgi.errorszwsgi.version)   r   z
wsgi.asyncTzwsgi.multithreadFzwsgi.multiprocesszwsgi.run_onceSERVER_SOFTWAREsanicREQUEST_METHODQUERY_STRING RAW_URISERVER_PROTOCOLzHTTP/REMOTE_ADDRz	127.0.0.1REMOTE_PORT0SERVER_NAMESERVER_PORTsanic.requestzCONTENT-TYPECONTENT_TYPEzCONTENT-LENGTHCONTENT_LENGTHzHTTP_%s-_,HTTP_X_FORWARDED_PROTOhttpzwsgi.url_scheme	PATH_INFOSCRIPT_NAME)r   urlbodysysstderrmethodqueryversionheadersitemsupperreplacegetpath)requestr,   	uri_partsenvironhdr_name	hdr_valuekey	path_infos           r   translate_requestrX      s     %I&w||4szz 	 	d	
 	E 	U 	 	7 	'.. 		-2 	7;; 	7W__4 	{ 	s 	w  	s!" 	#G(  '446>>#~%&/N#))(1$%(**344>"<.)5I   7 ")-Ev!NGI$KGMNr   c                     0 nSnU H+  nUS   R                  5       S:X  a  US   nM!  US   XFS   '   M-     [        X%[        U R                  5       S   5      US9$ )zLThis function generates an appropriate response object for this async
mode.
Nr   zcontent-typer-   )rE   content_typestatusrK   )lowerr   intsplit)r[   rK   r   rS   headers_dictrZ   hs          r   make_responsera   ^   sk     LLQ4::<>)Q4L!"1L1	 
 W"6<<>!#45|M Mr   c                   6    \ rS rSrSrS rS rS rS rS r	Sr
g	)
	WebSocketm   zu
This wrapper class provides a sanic WebSocket interface that is
somewhat compatible with eventlet's implementation.
c                 *    Xl         X l        S U l        g r%   )handlerserver_sock)r   rf   rg   s      r   r   WebSocket.__init__r   s    
r   c                    #    US   nUR                   R                  5       nUR                  U5      I S h  vN U l        Xl        U R                  U 5      I S h  vN   U R                  R                  5       $  NB N 7f)Nr:   )	transportget_protocolwebsocket_handshakerh   rS   rf   rg   _ok)r   rS   rQ   protocols       r   __call__WebSocket.__call__w   sk     /*$$113#77@@
ll4   {{  	 A 	!s!   4A=A9#A=A;A=;A=c                 T   #    U R                   R                  5       I S h  vN   g  N7fr%   )rh   close)r   s    r   rs   WebSocket.close   s     jj   s   (&(c                 V   #    U R                   R                  U5      I S h  vN   g  N7fr%   )rh   send)r   messages     r   rv   WebSocket.send   s     jjoog&&&s   )')c                    #    U R                   R                  5       I S h  vN n[        U[        5      (       d  [        U[        5      (       d
  [        5       eU$  N:7fr%   )rh   recv
isinstancebytesstrOSError)r   datas     r   waitWebSocket.wait   sC     ZZ__&&$&&tS)))O	 's   AA;A)rh   rS   rf   rg   N)r&   r'   r(   r)   __doc__r   rp   rs   rv   r   r*   r+   r   r   rc   rc   m   s     
!!'r   rc   T)asyncior   rX   ra   	websocket)rF   urllib.parser   sanic.responser   )sanic.server.protocols.websocket_protocolr   ImportErrorsanic.websocketr   rX   ra   rc   _asyncr+   r   r   <module>r      s    
 !+6O <~M D  *"/T
M  656 Ls,   A > A
A AA 
AA