o
    4˜ŽjL  ã                   @   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m	Z	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 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,m-Z- ej.dkr„ddlm/Z/ nddl0m/Z/ ej.dkršddlZ1ddlm2Z2 n
ddl1Z1ddl0m2Z2 e/de3de
d d�Z4ej5ddd�G dd„ dƒƒZ6e6ddd�Z7G dd„ de	e4 ƒZ8dS )zWebSocket client for asyncio.é    N)ÚCallable)ÚTracebackType)ÚAnyÚGenericÚLiteralÚOptionalÚcastÚoverloadé   )ÚWebSocketDataQueue)Ú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© r7   r7   úN/var/www/kodo/Anonymous/send/lib/python3.10/site-packages/aiohttp/client_ws.pyr-   4   s    r-   g      $@)r5   r6   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 ur4|	d | _d | _|| _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Ú_need_heartbeat_resetÚ_heartbeat_reset_handleÚ_reset_heartbeat)Úselfr=   r>   r?   r@   rA   rB   rC   rD   r:   r;   r<   r7   r7   r8   Ú__init__>   s6   
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_cbr_   Úcancelr^   rS   r]   ©ra   r7   r7   r8   Ú_cancel_heartbeatk   s   






þz)ClientWebSocketResponse._cancel_heartbeatc                 C   s"   | j d ur| j  ¡  d | _ d S d S ©N)rV   re   rf   r7   r7   r8   rd   x   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)rR   r^   rW   Ú	call_soonÚ_flush_heartbeat_resetr_   )ra   rD   r7   r7   r8   Ú_on_data_received}   s   z)ClientWebSocketResponse._on_data_receivedc                 C   s"   d | _ | jsd S |  ¡  d| _d S rc   )r_   r^   r`   rf   r7   r7   r8   rj   ‡   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é   )rR   rd   rW   rH   Ú
_connectorÚ_timeout_ceil_thresholdÚtimer   rT   rS   Úcall_atÚ_send_heartbeat)ra   rD   ÚconnÚtimeout_ceil_thresholdÚnowÚwhenr7   r7   r8   r`   Ž   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rUtj||dd�}n| |¡}| ¡ si|| _| | j¡ d S |  |¡ d S )Nrl   ó    )r"   é   T)rD   Úeager_start)rS   r^   rW   ro   rT   rp   rq   rH   rm   rn   r   rU   rd   Ú_pong_not_receivedrV   rI   Ú
send_framer   ÚPINGÚsysÚversion_infoÚasyncioÚTaskÚcreate_taskÚdoner]   Úadd_done_callbackÚ_ping_task_done)ra   rD   rt   rr   rs   ru   ÚcoroÚ	ping_taskr7   r7   r8   rq   £   s0   
ÿÿ

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]   )ra   r†   Úexcr7   r7   r8   rƒ   Ë   s   

z'ClientWebSocketResponse._ping_task_donec                 C   s   |   td| j› d�ƒ¡ d S )NzNo PONG received after z seconds)rŠ   r   rU   rf   r7   r7   r8   ry   Ñ   s   ÿz*ClientWebSocketResponse._pong_not_receivedr‹   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   )rL   Ú_set_closedr   ÚABNORMAL_CLOSURErN   rZ   rF   ÚcloserX   rM   rJ   Ú	feed_datar   r   ÚERROR)ra   r‹   r7   r7   r8   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)rL   rg   rf   r7   r7   r8   rŒ   á   ó   z#ClientWebSocketResponse._set_closedc                 C   r‘   )zfSet the connection to closing.

        Cancel any heartbeat timers and set the closing flag.
        TN)rM   rg   rf   r7   r7   r8   Ú_set_closingé   r’   z$ClientWebSocketResponse._set_closingc                 C   ó   | j S rh   )rL   rf   r7   r7   r8   Úclosedñ   ó   zClientWebSocketResponse.closedc                 C   r”   rh   )rN   rf   r7   r7   r8   Ú
close_codeõ   r–   z"ClientWebSocketResponse.close_codec                 C   r”   rh   )rK   rf   r7   r7   r8   r?   ù   r–   z ClientWebSocketResponse.protocolc                 C   r”   rh   )r[   rf   r7   r7   r8   r;   ý   r–   z ClientWebSocketResponse.compressc                 C   r”   rh   )r\   rf   r7   r7   r8   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)rF   rG   Ú	transportÚget_extra_info)ra   r˜   r*   rr   r™   r7   r7   r8   rš     s   z&ClientWebSocketResponse.get_extra_infoc                 C   r”   rh   )rZ   rf   r7   r7   r8   r‰     s   z!ClientWebSocketResponse.exceptionrv   Úmessagec                 Ã   ó   �| j  |tj¡I d H  d S rh   )rI   rz   r   r{   ©ra   r›   r7   r7   r8   Úping  ó   €zClientWebSocketResponse.pingc                 Ã   rœ   rh   )rI   rz   r   ÚPONGr�   r7   r7   r8   Úpong  rŸ   zClientWebSocketResponse.pongÚopcodec                 Ã   s   �| j  |||¡I dH  dS )z Send a frame over the websocket.N)rI   rz   )ra   r›   r¢   r;   r7   r7   r8   rz     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.   rI   rz   Úencoder   ÚTEXT©ra   r£   r;   r7   r7   r8   Ú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.   rI   rz   r   ÚBINARYrª   r7   r7   r8   Ú
send_bytes%  s   €z"ClientWebSocketResponse.send_bytes)Údumpsr±   c                Ã   s   �| j ||ƒ|d�I d H  d S )Nr¤   )r«   ©ra   r£   r;   r±   r7   r7   r8   Ú	send_json*  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²   r7   r7   r8   Úsend_json_bytes3  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| 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 s›w   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)rX   rM   rW   Úcreate_futurerY   r“   rJ   r�   r   rL   rŒ   rI   rŽ   r~   ÚCancelledErrorr   r�   rN   rF   Ú	ExceptionrZ   Úasync_timeoutrA   rO   r6   Úreadr.   r   ÚCLOSEr£   )ra   rµ   r›   r‹   Úmsgr7   r7   r8   rŽ   A  s`   €

€ü
(ÿ€

€ü
ïzClientWebSocketResponse.closera   z&ClientWebSocketResponse[Literal[True]]c                 Ã   ó   �d S rh   r7   ©ra   rA   r7   r7   r8   Úreceiver  ó   €zClientWebSocketResponse.receivez'ClientWebSocketResponse[Literal[False]]c                 Ã   r½   rh   r7   r¾   r7   r7   r8   r¿   w  rÀ   z$ClientWebSocketResponse[_DecodeText]c                 Ã   r½   rh   r7   r¾   r7   r7   r8   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°   |  ¡  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 �r7|   ¡  |S |j!tj'u �rL| j(�rL|  )|j$¡I d H  q|j!tj*u �rX| j(�rXq|S )NTz+Concurrent call to receive() is not allowedF)rµ   )+rO   r5   rX   ÚRuntimeErrorrL   r   rM   rŽ   r¹   rA   rJ   rº   rY   r   r~   r·   ÚTimeoutErrorr   r�   rN   r   ÚOKr   r   ÚCLOSEDr   rŒ   r   rµ   r�   r¸   rZ   r“   r.   r   r»   r£   rP   ÚCLOSINGr{   rQ   r¡   r    )ra   rA   Úreceive_timeoutr¼   r‹   r7   r7   r8   r¿   �  sŒ   €(ÿ€€€þÿ€€€û	øú©rA   c                Ã   r½   rh   r7   r¾   r7   r7   r8   Úreceive_strË  rÀ   z#ClientWebSocketResponse.receive_strc                Ã   r½   rh   r7   r¾   r7   r7   r8   rÈ   Ð  rÀ   c                Ã   r½   rh   r7   r¾   r7   r7   r8   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¿   r.   r   r©   r   r£   r   r¦   ©ra   rA   r¼   r7   r7   r8   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¿   r.   r   r¯   r   r£   r   r¬   rË   r7   r7   r8   Úreceive_bytesæ  s   €ÿz%ClientWebSocketResponse.receive_bytes.)ÚloadsrA   rÍ   c                Ã   r½   rh   r7   ©ra   rÍ   rA   r7   r7   r8   Úreceive_jsonî  ó   €z$ClientWebSocketResponse.receive_jsonc                Ã   r½   rh   r7   rÎ   r7   r7   r8   rÏ   ö  rÐ   c                Ã   r½   rh   r7   rÎ   r7   r7   r8   rÏ   þ  rÐ   c                Ã   s   �| j |d�I d H }||ƒS )NrÇ   )rÈ   )ra   rÍ   rA   r£   r7   r7   r8   rÏ     s   €c                 C   s   | S rh   r7   rf   r7   r7   r8   Ú	__aiter__  s   z!ClientWebSocketResponse.__aiter__c                 Ã   r½   rh   r7   rf   r7   r7   r8   Ú	__anext__  rÀ   z!ClientWebSocketResponse.__anext__c                 Ã   r½   rh   r7   rf   r7   r7   r8   rÒ     rÀ   c                 Ã   r½   rh   r7   rf   r7   r7   r8   rÒ     rÀ   c                 Ã   s.   �|   ¡ I d H }|jtjtjtjfv rt‚|S rh   )r¿   r.   r   r»   rÅ   rÄ   ÚStopAsyncIteration)ra   r¼   r7   r7   r8   rÒ   !  s
   €c                 Ã   s   �| S rh   r7   rf   r7   r7   r8   Ú
__aenter__'  s   €z"ClientWebSocketResponse.__aenter__Úexc_typeÚexc_valÚexc_tbc                 Ã   s   �|   ¡ I d H  d S rh   )rŽ   )ra   rÕ   rÖ   r×   r7   r7   r8   Ú	__aexit__*  s   €z!ClientWebSocketResponse.__aexit__)rE   N)r†   r‡   rE   Nrh   )rv   )Cr/   r0   r1   r   r   r¦   r   r-   Úboolr~   ÚAbstractEventLoopr4   Úintrb   rg   rd   rk   rj   r`   rq   rƒ   ry   ÚBaseExceptionrŠ   rŒ   r“   Úpropertyr•   r—   r?   r;   r<   r   rš   r‰   r¬   rž   r¡   r   rz   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Ø   r7   r7   r7   r8   r9   =   sÄ   óþýüûúùø	÷õôó
ò
-






(



ÿÿÿÿ
þýûþýû
úýþýû
ú 1ÿÿÿþÿÿÿþÿÿÿþÿÿ
þJÿÿÿþÿÿÿþÿÿÿþ üÿýüûüÿýüûüÿýüû
üýü
û	ÿþÿþÿþ
þýüûr9   )9Ú__doc__r~   r|   Úcollections.abcr   Útypesr   Útypingr   r   r   r   r   r	   r2   Ú_websocket.readerr   Ú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_TIMEOUTr9   r7   r7   r7   r8   Ú<module>   s8     (


