o
    zsg:                     @   s&  d Z ddlZddlZddlmZ ddlmZmZmZm	Z	 ddl
Z
ddlmZ ddlmZmZmZ ddlmZ dd	lmZmZ dd
lmZmZmZmZmZmZ ddlmZmZ ddl m!Z! ddl"m#Z#m$Z$m%Z%m&Z& ej'dkrrddlZ(nddl(Z(e
j)dddG dd dZ*e*dddZ+G dd dZ,dS )zWebSocket client for asyncio.    N)TracebackType)AnyOptionalTypecast   )WebSocketDataQueue)ClientErrorServerTimeoutErrorWSMessageTypeError)ClientResponse)calculate_timeout_when
set_result)WS_CLOSED_MESSAGEWS_CLOSING_MESSAGEWebSocketErrorWSCloseCode	WSMessage	WSMsgType)_INTERNAL_RECEIVE_TYPESWebSocketWriter)	EofStream)DEFAULT_JSON_DECODERDEFAULT_JSON_ENCODERJSONDecoderJSONEncoder)      T)frozenslotsc                   @   s0   e Zd Zejee ddZejee ddZdS )ClientWSTimeoutN)typedefault)	__name__
__module____qualname__attribr   float
ws_receivews_close r+   r+   M/var/www/html/minecraft/env/lib/python3.10/site-packages/aiohttp/client_ws.pyr    %   s    r    g      $@)r)   r*   c                   @   s  e Zd Zdddddededee ded	ed
e	de	de
jdee dede	ddfddZddddZddddZddddZddddZdeddZdddd Zd!eddfd"d#Zddd$d%Zddd&d'Zede	fd(d)Zedee fd*d+Zedee fd,d-Zedefd.d/Zede	fd0d1Zdfd2ed3edefd4d5Z dee fd6d7Z!dgd9e"ddfd:d;Z#dgd9e"ddfd<d=Z$	dfd9e"d>e%dee ddfd?d@Z&dfdAedee ddfdBdCZ'dfdAe"dee ddfdDdEZ(	dfe)dFdAedee dGe*ddfdHdIZ+e,j-d8dJdKed9e"de	fdLdMZ.dfd	ee de/fdNdOZ0ddPd	ee defdQdRZ1ddPd	ee de"fdSdTZ2e3ddUdVe4d	ee defdWdXZ5dhdYdZZ6de/fd[d\Z7dhd]d^Z8d_ee9e  d`ee daee: ddfdbdcZ;dS )iClientWebSocketResponseNr   F)	heartbeatcompressclient_notakeoverreaderwriterprotocolresponsetimeout	autocloseautopingloopr.   r/   r0   returnc	                C   s   || _ |j| _|| _|| _|| _d| _d| _d | _|| _	|| _
|| _|	| _d | _d| _|	d ur4|	d | _d | _|| _d| _d | _d | _|
| _|| _d | _|   d S )NFg        g       @)	_response
connection_conn_writer_reader	_protocol_closed_closing_close_code_timeout
_autoclose	_autoping
_heartbeat_heartbeat_cb_heartbeat_when_pong_heartbeat_pong_response_cb_loop_waiting_close_wait
_exception	_compress_client_notakeover
_ping_task_reset_heartbeat)selfr1   r2   r3   r4   r5   r6   r7   r8   r.   r/   r0   r+   r+   r,   __init__/   s2   
z ClientWebSocketResponse.__init__c                 C   sD   |    | jd ur| j  d | _| jd ur | j  d | _d S d S N)_cancel_pong_response_cbrG   cancelrQ   rS   r+   r+   r,   _cancel_heartbeatZ   s   




z)ClientWebSocketResponse._cancel_heartbeatc                 C   s"   | j d ur| j   d | _ d S d S rU   )rJ   rW   rX   r+   r+   r,   rV   c   s   


z0ClientWebSocketResponse._cancel_pong_response_cbc                 C   s   | j d u rd S |   | j}|d usJ | j}|d ur|jjnd}| }t|| j |}|| _| j	d u r>|
|| j| _	d S d S )N   )rF   rV   rK   r<   
_connector_timeout_ceil_thresholdtimer   rH   rG   call_at_send_heartbeat)rS   r8   conntimeout_ceil_thresholdnowwhenr+   r+   r,   rR   h   s   

z(ClientWebSocketResponse._reset_heartbeatc                 C   s   d | _ | j}| }|| jk r|| j| j| _ d S | j}|d ur%|jjnd}t	|| j
|}|   ||| j| _| jdtj}tjdkrPtj||dd}n||}| sd|| _|| j d S | | d S )NrZ       )r      T)r8   eager_start)rG   rK   r]   rH   r^   r_   r<   r[   r\   r   rI   rV   _pong_not_receivedrJ   r=   
send_framer   PINGsysversion_infoasyncioTaskcreate_taskdonerQ   add_done_callback_ping_task_done)rS   r8   rb   r`   ra   rc   coro	ping_taskr+   r+   r,   r_   }   s,   


z'ClientWebSocketResponse._send_heartbeattaskasyncio.Task[None]c                 C   s(   |  s|  }r| | d| _dS )z*Callback for when the ping task completes.N)	cancelled	exception_handle_ping_pong_exceptionrQ   )rS   rt   excr+   r+   r,   rq      s   

z'ClientWebSocketResponse._ping_task_donec                 C   s   |  t  d S rU   )rx   r
   rX   r+   r+   r,   rg      s   z*ClientWebSocketResponse._pong_not_receivedry   c                 C   sZ   | j rdS |   tj| _|| _| j  | jr)| j	s+| j
ttj|dd dS dS dS )z5Handle exceptions raised during ping/pong processing.Nr   )r@   _set_closedr   ABNORMAL_CLOSURErB   rN   r:   closerL   rA   r>   	feed_datar   r   ERROR)rS   ry   r+   r+   r,   rx      s   
z3ClientWebSocketResponse._handle_ping_pong_exceptionc                 C      d| _ |   dS )zdSet the connection to closed.

        Cancel any heartbeat timers and set the closed flag.
        TN)r@   rY   rX   r+   r+   r,   rz         z#ClientWebSocketResponse._set_closedc                 C   r   )zfSet the connection to closing.

        Cancel any heartbeat timers and set the closing flag.
        TN)rA   rY   rX   r+   r+   r,   _set_closing   r   z$ClientWebSocketResponse._set_closingc                 C      | j S rU   )r@   rX   r+   r+   r,   closed      zClientWebSocketResponse.closedc                 C   r   rU   )rB   rX   r+   r+   r,   
close_code   r   z"ClientWebSocketResponse.close_codec                 C   r   rU   )r?   rX   r+   r+   r,   r3      r   z ClientWebSocketResponse.protocolc                 C   r   rU   )rO   rX   r+   r+   r,   r/      r   z ClientWebSocketResponse.compressc                 C   r   rU   )rP   rX   r+   r+   r,   r0      r   z)ClientWebSocketResponse.client_notakeovernamer"   c                 C   s2   | j j}|du r
|S |j}|du r|S |||S )z$extra info from connection transportN)r:   r;   	transportget_extra_info)rS   r   r"   r`   r   r+   r+   r,   r      s   z&ClientWebSocketResponse.get_extra_infoc                 C   r   rU   )rN   rX   r+   r+   r,   rw      s   z!ClientWebSocketResponse.exceptionrd   messagec                       | j |tjI d H  d S rU   )r=   rh   r   ri   rS   r   r+   r+   r,   ping      zClientWebSocketResponse.pingc                    r   rU   )r=   rh   r   PONGr   r+   r+   r,   pong   r   zClientWebSocketResponse.pongopcodec                    s   | j |||I dH  dS )z Send a frame over the websocket.N)r=   rh   )rS   r   r   r/   r+   r+   r,   rh      s   z"ClientWebSocketResponse.send_framedatac                    s@   t |tstdt| | jj|dtj|dI d H  d S )Nzdata argument must be str (%r)zutf-8r/   )	
isinstancestr	TypeErrorr!   r=   rh   encoder   TEXTrS   r   r/   r+   r+   r,   send_str   s   
z ClientWebSocketResponse.send_strc                    s@   t |tttfstdt| | jj|tj	|dI d H  d S )Nz#data argument must be byte-ish (%r)r   )
r   bytes	bytearray
memoryviewr   r!   r=   rh   r   BINARYr   r+   r+   r,   
send_bytes   s   z"ClientWebSocketResponse.send_bytes)dumpsr   c                   s   | j |||dI d H  d S )Nr   )r   )rS   r   r/   r   r+   r+   r,   	send_json   s   z!ClientWebSocketResponse.send_json)coder   r   c             
      s  | j r%| js%| jd usJ | j | _|   | jtd | jI d H  | j	r*dS | 
  z| j||I d H  W n0 tjyL   tj| _| j    tyj } ztj| _|| _| j  W Y d }~dS d }~ww | jru| j  dS 	 z+t| jj4 I d H  | j I d H }W d   I d H  n1 I d H sw   Y  W n0 tjy   tj| _| j    ty } ztj| _|| _| j  W Y d }~dS d }~ww |jtju r|j| _| j  dS qv)Nr   FT)rL   rA   rK   create_futurerM   r   r>   r}   r   r@   rz   r=   r|   rl   CancelledErrorr   r{   rB   r:   	ExceptionrN   async_timeoutr5   rC   r*   readr!   r   CLOSEr   )rS   r   r   ry   msgr+   r+   r,   r|     s`   


(


zClientWebSocketResponse.closec              
      s  |p| j j}	 | jrtd| jrtS | jr |  I d H  tS zXd| _zD|rOt	|4 I d H  | j
 I d H }W d   I d H  n1 I d H sIw   Y  n| j
 I d H }|   W d| _| jrht| jd  nd| _| jrvt| jd  w w W n tjtjfy   tj| _  ty   tj| _|  I d H  ttjd d  Y S  ty   |   tj| _t Y S  ty } z|j| _| j|jdI d H  ttj|d W  Y d }~S d }~w ty } z|| _ | !  tj| _|  I d H  ttj|d W  Y d }~S d }~ww |j"t#vr|S |j"tj$u r.| !  |j%| _| js,| j&r,|  I d H  |S |j"tj'u r;| !  |S |j"tj(u rP| j)rP| *|j%I d H  q|j"tj+u r\| j)r\q|S )NTz+Concurrent call to receive() is not allowedF)r   ),rC   r)   rL   RuntimeErrorr@   r   rA   r|   r   r5   r>   r   rR   rM   r   rl   r   TimeoutErrorr   r{   rB   r   OKr   r   CLOSEDr	   rz   r   r   r~   r   rN   r   r!   r   r   r   rD   CLOSINGri   rE   r   r   )rS   r5   receive_timeoutr   ry   r+   r+   r,   receive6  s   (
	zClientWebSocketResponse.receiver5   c                   D   |  |I d H }|jtjurtd|j d|jdtt|jS )NReceived message :z is not WSMsgType.TEXT)r   r!   r   r   r   r   r   r   rS   r5   r   r+   r+   r,   receive_str     z#ClientWebSocketResponse.receive_strc                   r   )Nr   r   z is not WSMsgType.BINARY)r   r!   r   r   r   r   r   r   r   r+   r+   r,   receive_bytes  r   z%ClientWebSocketResponse.receive_bytes)loadsr5   r   c                   s   | j |dI d H }||S )Nr   )r   )rS   r   r5   r   r+   r+   r,   receive_json  s   z$ClientWebSocketResponse.receive_jsonc                 C   s   | S rU   r+   rX   r+   r+   r,   	__aiter__  s   z!ClientWebSocketResponse.__aiter__c                    s.   |   I d H }|jtjtjtjfv rt|S rU   )r   r!   r   r   r   r   StopAsyncIteration)rS   r   r+   r+   r,   	__anext__  s
   z!ClientWebSocketResponse.__anext__c                    s   | S rU   r+   rX   r+   r+   r,   
__aenter__  s   z"ClientWebSocketResponse.__aenter__exc_typeexc_valexc_tbc                    s   |   I d H  d S rU   )r|   )rS   r   r   r   r+   r+   r,   	__aexit__  s   z!ClientWebSocketResponse.__aexit__)r9   N)rt   ru   r9   NrU   )rd   )r9   r-   )<r#   r$   r%   r   r   r   r   r   r    boolrl   AbstractEventLoopr(   intrT   rY   rV   rR   r_   rq   rg   BaseExceptionrx   rz   r   propertyr   r   r3   r/   r0   r   r   rw   r   r   r   r   rh   r   r   r   r   r   r   r   r|   r   r   r   r   r   r   r   r   r   r   r   r   r   r+   r+   r+   r,   r-   .   s    	

+
	


"





 	1I

	

r-   )-__doc__rl   rj   typesr   typingr   r   r   r   r&   _websocket.readerr   client_exceptionsr	   r
   r   client_reqrepr   helpersr   r   httpr   r   r   r   r   r   http_websocketr   r   streamsr   typedefsr   r   r   r   rk   r   sr    DEFAULT_WS_CLIENT_TIMEOUTr-   r+   r+   r+   r,   <module>   s*     

