o
    çûõjKP  ã                   @   s¬  d Z ddlZddlZddlmZ ddlmZ ddlmZ ddl	m
Z
mZmZmZmZmZ ddlZddlmZ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#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/m0Z0 ej1dkrŒddl	m2Z2 nddl3m2Z2 ej1dkr¢ddlZ4ddl	m5Z5 n
ddl4Z4ddl3m5Z5 e2de6ded d�Z7ej8ddd�G dd„ dƒƒZ9e9ddd�Z:G dd„ dee7 ƒZ;dS )zWebSocket client for asyncio.é    N)ÚBaseEventLoop)ÚCallable)ÚTracebackType)ÚAnyÚGenericÚLiteralÚOptionalÚcastÚoverloadé   )ÚWebSocketDataQueueÚWebSocketReader)ÚClientErrorÚServerTimeoutErrorÚWSMessageTypeError)ÚClientResponse)Úcalculate_timeout_whenÚ
set_result)ÚWS_CLOSED_MESSAGEÚWS_CLOSING_MESSAGEÚWebSocketErrorÚWSCloseCodeÚ	WSMessageÚWSMessageDecodeTextÚWSMessageNoDecodeTextÚ	WSMsgType)Ú_INTERNAL_RECEIVE_TYPESÚWebSocketWriter)Ú	EofStream)ÚDEFAULT_JSON_DECODERÚDEFAULT_JSON_ENCODERÚJSONBytesEncoderÚJSONDecoderÚJSONEncoder)é   é   )ÚTypeVar)r$   é   )ÚSelfÚ_DecodeTextT)ÚboundÚ	covariantÚdefault)ÚfrozenÚslotsc                   @   s0   e Zd Zejee dd�Zejee dd�ZdS )ÚClientWSTimeoutN)Útyper,   )	Ú__name__Ú
__module__Ú__qualname__ÚattrÚibr   ÚfloatÚ
ws_receiveÚws_close© r9   r9   úD/opt/steambot/venv/lib/python3.10/site-packages/aiohttp/client_ws.pyr/   5   s    r/   g      $@)r7   r8   c                   @   sà  e Zd ZddddœdedededB ded	ed
edede	j
dedB dededdfdd„Zd{dd„Zd{dd„Zd{dd„Zd{dd„Zd{dd„Zd{dd„Zd|d!d"„Zd{d#d$„Zd%eddfd&d'„Zd{d(d)„Zd{d*d+„Zedefd,d-„ƒZededB fd.d/„ƒZededB fd0d1„ƒZedefd2d3„ƒZedefd4d5„ƒZd}d6ed7e de fd8d9„Z!dedB fd:d;„Z"d~d=e#ddfd>d?„Z$d~d=e#ddfd@dA„Z%	d}d=e#dBe&dedB ddfdCdD„Z'd}dEededB ddfdFdG„Z(d}dEe#dedB ddfdHdI„Z)	d}e*dJœdEe dedB dKe+ddfdLdM„Z,	d}dEe dedB dKe-ddfdNdO„Z.e/j0d<dPœdQed=e#defdRdS„Z1e2	d}dTdUd	edB de3fdVdW„ƒZ4e2	d}dTdXd	edB de5fdYdW„ƒZ4e2	d}dTdZd	edB de3e5B fd[dW„ƒZ4	d}d	edB de3e5B fd\dW„Z4e2dd]œdTdUd	edB defd^d_„ƒZ6e2dd]œdTdXd	edB de#fd`d_„ƒZ6e2dd]œdTdZd	edB dee#B fdad_„ƒZ6dd]œd	edB dee#B fdbd_„Z6dd]œd	edB de#fdcdd„Z7e2deddfœdTdUdge8d	edB de fdhdi„ƒZ9e2deddfœdTdXdge:e#ge f d	edB de fdjdi„ƒZ9e2deddfœdTdZdge8e:e#ge f B d	edB de fdkdi„ƒZ9e;ddfœdge8e:e#ge f B d	edB de fdldi„Z9de<fdmdn„Z=e2dTdUde3fdodp„ƒZ>e2dTdXde5fdqdp„ƒZ>e2dTdZde3e5B fdrdp„ƒZ>de3e5B fdsdp„Z>de<fdtdu„Z?dve@e dB dwedB dxeAdB ddfdydz„ZBdS )ÚClientWebSocketResponseNr   F)Ú	heartbeatÚcompressÚclient_notakeoverÚreaderÚwriterÚprotocolÚresponseÚtimeoutÚ	autocloseÚautopingÚloopr<   r=   r>   Úreturnc	                C   s¶   || _ |j| _|| _|| _d | _|| _d| _d| _d | _	|| _
|| _|| _|	| _d | _d| _|	d ur7|	d | _d | _|| _d| _d | _d | _|
| _|| _d | _d| _d | _|  ¡  d S )NFg        g       @)Ú	_responseÚ
connectionÚ_connÚ_writerÚ_readerÚ_parserÚ	_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Ú_need_heartbeat_resetÚ_heartbeat_reset_handleÚ_reset_heartbeat)Úselfr?   r@   rA   rB   rC   rD   rE   rF   r<   r=   r>   r9   r9   r:   Ú__init__?   s8   
z ClientWebSocketResponse.__init__c                 C   sd   |   ¡  | jd ur| j ¡  d | _d| _| jd ur!| j ¡  d | _| jd ur0| j ¡  d | _d S d S ©NF)Ú_cancel_pong_response_cbrb   Úcancelra   rV   r`   ©rd   r9   r9   r:   Ú_cancel_heartbeatp   s   






þz)ClientWebSocketResponse._cancel_heartbeatc                 C   s"   | j d ur| j  ¡  d | _ d S d S ©N)rY   rh   ri   r9   r9   r:   rg   }   s   


þz0ClientWebSocketResponse._cancel_pong_response_cbc                 C   s>   | j d u s| jr
d S | j}|d usJ ‚d| _| | j¡| _d S )NT)rU   ra   rZ   Ú	call_soonÚ_flush_heartbeat_resetrb   )rd   rF   r9   r9   r:   Ú_on_data_received‚   s   z)ClientWebSocketResponse._on_data_receivedc                 C   s"   d | _ | jsd S |  ¡  d| _d S rf   )rb   ra   rc   ri   r9   r9   r:   rm   Œ   s
   
z.ClientWebSocketResponse._flush_heartbeat_resetc                 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é   )rU   rg   rZ   rJ   Ú
_connectorÚ_timeout_ceil_thresholdÚtimer   rW   rV   Úcall_atÚ_send_heartbeat)rd   rF   ÚconnÚtimeout_ceil_thresholdÚnowÚwhenr9   r9   r:   rc   “   s   
ÿ
úz(ClientWebSocketResponse._reset_heartbeatc                 C   s  d | _ | jrd S | 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rbt|tƒrYtj|dd�}ntj||dd�}ntjdkrptj||dd�}nt |¡}| ¡ s„|| _| | j¡ d S |  |¡ d S )Nro   ó    )r$   é   T)Úeager_start)rF   r{   )r$   é   )rV   ra   rZ   rr   rW   rs   rt   rJ   rp   rq   r   rX   rg   Ú_pong_not_receivedrY   rK   Ú
send_framer   ÚPINGÚsysÚversion_infoÚ
isinstancer   ÚasyncioÚcreate_taskÚTaskÚdoner`   Úadd_done_callbackÚ_ping_task_done)rd   rF   rw   ru   rv   rx   ÚcoroÚ	ping_taskr9   r9   r:   rt   ¨   s8   
ÿÿ



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_exceptionr`   )rd   r‹   Úexcr9   r9   r:   rˆ   Ô   s   

z'ClientWebSocketResponse._ping_task_donec                 C   s   |   td| j› d�ƒ¡ d S )NzNo PONG received after z seconds)r�   r   rX   ri   r9   r9   r:   r}   Ú   s   ÿz*ClientWebSocketResponse._pong_not_receivedr�   c                 C   s`   | j rdS |  ¡  d| _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   )rO   Ú_set_closedrM   r   ÚABNORMAL_CLOSURErQ   r]   rH   Úcloser[   rP   rL   Ú	feed_datar   r   ÚERROR)rd   r�   r9   r9   r:   r�   ß   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)rO   rj   ri   r9   r9   r:   r‘   ì   ó   z#ClientWebSocketResponse._set_closedc                 C   r–   )zfSet the connection to closing.

        Cancel any heartbeat timers and set the closing flag.
        TN)rP   rj   ri   r9   r9   r:   Ú_set_closingô   r—   z$ClientWebSocketResponse._set_closingc                 C   ó   | j S rk   )rO   ri   r9   r9   r:   Úclosedü   ó   zClientWebSocketResponse.closedc                 C   r™   rk   )rQ   ri   r9   r9   r:   Ú
close_code   r›   z"ClientWebSocketResponse.close_codec                 C   r™   rk   )rN   ri   r9   r9   r:   rA     r›   z ClientWebSocketResponse.protocolc                 C   r™   rk   )r^   ri   r9   r9   r:   r=     r›   z ClientWebSocketResponse.compressc                 C   r™   rk   )r_   ri   r9   r9   r:   r>     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)rH   rI   Ú	transportÚget_extra_info)rd   r�   r,   ru   rž   r9   r9   r:   rŸ     s   z&ClientWebSocketResponse.get_extra_infoc                 C   r™   rk   )r]   ri   r9   r9   r:   rŽ     s   z!ClientWebSocketResponse.exceptionry   Úmessagec                 Ã   ó   �| j  |tj¡I d H  d S rk   )rK   r~   r   r   ©rd   r    r9   r9   r:   Úping  ó   €zClientWebSocketResponse.pingc                 Ã   r¡   rk   )rK   r~   r   ÚPONGr¢   r9   r9   r:   Úpong   r¤   zClientWebSocketResponse.pongÚopcodec                 Ã   s   �| j  |||¡I dH  dS )z Send a frame over the websocket.N)rK   r~   )rd   r    r§   r=   r9   r9   r:   r~   #  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=   )	r‚   ÚstrÚ	TypeErrorr0   rK   r~   Úencoder   ÚTEXT©rd   r¨   r=   r9   r9   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«   r0   rK   r~   r   ÚBINARYr®   r9   r9   r:   Ú
send_bytes0  s   €z"ClientWebSocketResponse.send_bytes)Údumpsrµ   c                Ã   s   �| j ||ƒ|d�I d H  d S )Nr©   )r¯   ©rd   r¨   r=   rµ   r9   r9   r:   Ú	send_json5  s   €z!ClientWebSocketResponse.send_jsonc                Ã   s   �| j ||ƒ|d�I dH  dS )zÌSend JSON data using a bytes-returning encoder as a binary frame.

        Use this when your JSON encoder (like orjson) returns bytes
        instead of str, avoiding the encode/decode overhead.
        r©   N)r´   r¶   r9   r9   r:   Úsend_json_bytes>  s   €z'ClientWebSocketResponse.send_json_bytes)Ú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Æz| j ||¡I d H  W n4 tjyM   tj| _| j ¡  ‚  tyo } ztj| _|| _| j ¡  W Y d }~W d | _dS d }~ww | jr~| j ¡  W d | _dS 	 z+t | jj¡4 I d H š | j ¡ I d H }W d   ƒI d H  n1 I d H s¤w   Y  W n4 tjy¼   tj| _| j ¡  ‚  tyÞ } ztj| _|| _| j ¡  W Y d }~W d | _dS d }~ww |jtju rô|j| _| j ¡  W d | _dS qd | _w )Nr   FT)r[   rP   rZ   Úcreate_futurer\   r˜   rL   r”   r   rO   r‘   rK   r“   rƒ   ÚCancelledErrorr   r’   rQ   rH   Ú	Exceptionr]   rM   Úasync_timeoutrC   rR   r8   Úreadr0   r   ÚCLOSEr¨   )rd   r¹   r    r�   Úmsgr9   r9   r:   r“   L  sl   €


€á

ë(ÿ€


	€ó

ëzClientWebSocketResponse.closerd   z&ClientWebSocketResponse[Literal[True]]c                 Ã   ó   �d S rk   r9   ©rd   rC   r9   r9   r:   Úreceive‚  ó   €zClientWebSocketResponse.receivez'ClientWebSocketResponse[Literal[False]]c                 Ã   rÁ   rk   r9   rÂ   r9   r9   r:   rÃ   ‡  rÄ   z$ClientWebSocketResponse[_DecodeText]c                 Ã   rÁ   rk   r9   rÂ   r9   r9   r:   rÃ   Œ  rÄ   c              
   Ã   sº  �|p| j j}	 | jrtdƒ‚| jrtS | jr |  ¡ I d H  tS zTd| _z@|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rdt| jd ƒ nd| _| jrrt| 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³   d | _|  ¡  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 �rO| j)�rO|  *|j%¡I d H  q|j"tj+u �r[| j)�r[q|S )NTz+Concurrent call to receive() is not allowedF)r¹   ),rR   r7   r[   ÚRuntimeErrorrO   r   rP   r“   r½   rC   rL   r¾   r\   r   rƒ   r»   ÚTimeoutErrorr   r’   rQ   r   ÚOKr   r   ÚCLOSEDr   rM   r‘   r   r¹   r•   r¼   r]   r˜   r0   r   r¿   r¨   rS   ÚCLOSINGr   rT   r¦   r¥   )rd   rC   Úreceive_timeoutrÀ   r�   r9   r9   r:   rÃ   ‘  sŽ   €(ÿ€€€þÿ€€€û	øú©rC   c                Ã   rÁ   rk   r9   rÂ   r9   r9   r:   Úreceive_strÞ  rÄ   z#ClientWebSocketResponse.receive_strc                Ã   rÁ   rk   r9   rÂ   r9   r9   r:   rÌ   ã  rÄ   c                Ã   rÁ   rk   r9   rÂ   r9   r9   r:   rÌ   è  rÄ   c                Ã   sD   �|   |¡I dH }|jtjurtd|j› d|j›d�ƒ‚tt|jƒS )zrReceive TEXT message.

        Returns str when decode_text=True (default), bytes when decode_text=False.
        NúReceived message ú:z is not WSMsgType.TEXT)rÃ   r0   r   r­   r   r¨   r	   rª   ©rd   rC   rÀ   r9   r9   r:   rÌ   í  s   €ÿc                Ã   sD   �|   |¡I d H }|jtjurtd|j› d|j›d�ƒ‚tt|jƒS )NrÍ   rÎ   z is not WSMsgType.BINARY)rÃ   r0   r   r³   r   r¨   r	   r°   rÏ   r9   r9   r:   Úreceive_bytesù  s   €ÿz%ClientWebSocketResponse.receive_bytes.)ÚloadsrC   rÑ   c                Ã   rÁ   rk   r9   ©rd   rÑ   rC   r9   r9   r:   Úreceive_json  ó   €z$ClientWebSocketResponse.receive_jsonc                Ã   rÁ   rk   r9   rÒ   r9   r9   r:   rÓ   	  rÔ   c                Ã   rÁ   rk   r9   rÒ   r9   r9   r:   rÓ     rÔ   c                Ã   s   �| j |d�I d H }||ƒS )NrË   )rÌ   )rd   rÑ   rC   r¨   r9   r9   r:   rÓ     s   €c                 C   s   | S rk   r9   ri   r9   r9   r:   Ú	__aiter__"  s   z!ClientWebSocketResponse.__aiter__c                 Ã   rÁ   rk   r9   ri   r9   r9   r:   Ú	__anext__%  rÄ   z!ClientWebSocketResponse.__anext__c                 Ã   rÁ   rk   r9   ri   r9   r9   r:   rÖ   *  rÄ   c                 Ã   rÁ   rk   r9   ri   r9   r9   r:   rÖ   /  rÄ   c                 Ã   s.   �|   ¡ I d H }|jtjtjtjfv rt‚|S rk   )rÃ   r0   r   r¿   rÉ   rÈ   ÚStopAsyncIteration)rd   rÀ   r9   r9   r:   rÖ   4  s
   €c                 Ã   s   �| S rk   r9   ri   r9   r9   r:   Ú
__aenter__:  s   €z"ClientWebSocketResponse.__aenter__Úexc_typeÚexc_valÚexc_tbc                 Ã   s   �|   ¡ I d H  d S rk   )r“   )rd   rÙ   rÚ   rÛ   r9   r9   r:   Ú	__aexit__=  s   €z!ClientWebSocketResponse.__aexit__)rG   N)r‹   rŒ   rG   Nrk   )ry   )Cr1   r2   r3   r   r   rª   r   r/   Úboolrƒ   ÚAbstractEventLoopr6   Úintre   rj   rg   rn   rm   rc   rt   rˆ   r}   ÚBaseExceptionr�   r‘   r˜   Úpropertyrš   rœ   rA   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Ð   r"   rÓ   r   r   r(   rÕ   rÖ   rØ   r0   r   rÜ   r9   r9   r9   r:   r;   >   sÄ   óþýüûúùø	÷õôó
ò
1






,



ÿÿÿÿ
þýûþýû
úýþýû
ú 6ÿÿÿþÿÿÿþÿÿÿþÿÿ
þMÿÿÿþÿÿÿþÿÿÿþ üÿýüûüÿýüûüÿýüû
üýü
û	ÿþÿþÿþ
þýüûr;   )<Ú__doc__rƒ   r€   Úasyncio.base_eventsr   Úcollections.abcr   Útypesr   Útypingr   r   r   r   r	   r
   r4   Ú_websocket.readerr   r   Úclient_exceptionsr   r   r   Úclient_reqrepr   Úhelpersr   r   Úhttpr   r   r   r   r   r   r   r   Úhttp_websocketr   r   Ústreamsr   Útypedefsr   r    r!   r"   r#   r�   r&   Útyping_extensionsr½   r(   rÝ   r)   Úsr/   ÚDEFAULT_WS_CLIENT_TIMEOUTr;   r9   r9   r9   r:   Ú<module>   s:     (


