a
    Rfu6                     @   s   d Z ddlZddlZddl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 ddlmZmZmZ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 ej dkrddlZ!nddl!Z!G dd dZ"dS )zWebSocket client for asyncio.    N)AnyOptionalcast   )ClientErrorServerTimeoutError)ClientResponse)calculate_timeout_when
set_result)WS_CLOSED_MESSAGEWS_CLOSING_MESSAGEWebSocketErrorWSCloseCode	WSMessage	WSMsgType)WebSocketWriter)	EofStreamFlowControlDataQueue)DEFAULT_JSON_DECODERDEFAULT_JSON_ENCODERJSONDecoderJSONEncoder)      c                   @   sj  e Zd Zddddddeee eeeee	j
ee ee eeddddZdd	d
dZdd	ddZdd	ddZdd	ddZdddddZdd	ddZeddddZdd	ddZdd	ddZeed	dd Zeee d	d!d"Zeee d	d#d$Zeed	d%d&Zeed	d'd(ZdQeeed)d*d+Zee d	d,d-ZdRe dd/d0d1Z!dSe dd/d2d3Z"dTeee dd4d5d6Z#dUe ee dd4d7d8Z$dVe%d9eee e&dd:d;d<Z'e(j)d.d=ee ed>d?d@Z*dWee e+dAdBdCZ,ddDee edAdEdFZ-ddDee e dAdGdHZ.e/ddIe0ee edJdKdLZ1d d	dMdNZ2e+d	dOdPZ3dS )XClientWebSocketResponseNr   F)receive_timeout	heartbeatcompressclient_notakeoverzFlowControlDataQueue[WSMessage])readerwriterprotocolresponsetimeout	autocloseautopingloopr   r   r   r   returnc	                C   s   || _ |j| _|| _|| _|| _d| _d| _d | _|| _	|	| _
|| _|| _|
| _d | _d| _|
d urn|
d | _d | _|| _d| _d | _d | _|| _|| _d | _|   d S )NFg        g       @)	_response
connection_conn_writer_reader	_protocol_closed_closing_close_code_timeout_receive_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)selfr   r    r!   r"   r#   r$   r%   r&   r   r   r   r    rC   J/var/www/ai-form-bot/venv/lib/python3.9/site-packages/aiohttp/client_ws.py__init__"   s4    
z ClientWebSocketResponse.__init__)r'   c                 C   s@   |    | jd ur"| j  d | _| jd ur<| j  d | _d S N)_cancel_pong_response_cbr6   cancelr@   rB   rC   rC   rD   _cancel_heartbeatO   s    



z)ClientWebSocketResponse._cancel_heartbeatc                 C   s   | j d ur| j   d | _ d S rF   )r9   rH   rI   rC   rC   rD   rG   X   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 rx|
|| j| _	d S )N   )r5   rG   r:   r*   
_connector_timeout_ceil_thresholdtimer	   r7   r6   call_at_send_heartbeat)rB   r&   conntimeout_ceil_thresholdnowwhenrC   rC   rD   rA   ]   s    

z(ClientWebSocketResponse._reset_heartbeatc                 C   s   d | _ | j}| }|| jk r4|| j| j| _ d S | j}|d urJ|jjnd}t	|| j
|}|   ||| j| _tjdkrtj| j |dd}n|| j }| s|| _|| j n
| | d S )NrK   )r      T)r&   Zeager_start)r6   r:   rN   r7   rO   rP   r*   rL   rM   r	   r8   rG   _pong_not_receivedr9   sysversion_infoasyncioTaskr+   pingZcreate_taskdoner@   Zadd_done_callback_ping_task_done)rB   r&   rS   rQ   rR   rT   Z	ping_taskrC   rC   rD   rP   r   s*    

z'ClientWebSocketResponse._send_heartbeatzasyncio.Task[None])taskr'   c                 C   s(   |  s|  }r| | d| _dS )z*Callback for when the ping task completes.N)Z	cancelled	exception_handle_ping_pong_exceptionr@   )rB   r^   excrC   rC   rD   r]      s    
z'ClientWebSocketResponse._ping_task_donec                 C   s   |  t  d S rF   )r`   r   rI   rC   rC   rD   rV      s    z*ClientWebSocketResponse._pong_not_received)ra   r'   c                 C   sP   | j r
dS |   tj| _|| _| j  | jrL| j	sL| j
ttj|d dS )z5Handle exceptions raised during ping/pong processing.N)r.   _set_closedr   ABNORMAL_CLOSUREr0   r=   r(   closer;   r/   r,   	feed_datar   r   ERROR)rB   ra   rC   rC   rD   r`      s    
z3ClientWebSocketResponse._handle_ping_pong_exceptionc                 C   s   d| _ |   dS )zdSet the connection to closed.

        Cancel any heartbeat timers and set the closed flag.
        TN)r.   rJ   rI   rC   rC   rD   rb      s    z#ClientWebSocketResponse._set_closedc                 C   s   d| _ |   dS )zfSet the connection to closing.

        Cancel any heartbeat timers and set the closing flag.
        TN)r/   rJ   rI   rC   rC   rD   _set_closing   s    z$ClientWebSocketResponse._set_closingc                 C   s   | j S rF   )r.   rI   rC   rC   rD   closed   s    zClientWebSocketResponse.closedc                 C   s   | j S rF   )r0   rI   rC   rC   rD   
close_code   s    z"ClientWebSocketResponse.close_codec                 C   s   | j S rF   )r-   rI   rC   rC   rD   r!      s    z ClientWebSocketResponse.protocolc                 C   s   | j S rF   )r>   rI   rC   rC   rD   r      s    z ClientWebSocketResponse.compressc                 C   s   | j S rF   )r?   rI   rC   rC   rD   r      s    z)ClientWebSocketResponse.client_notakeover)namedefaultr'   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)rB   rj   rk   rQ   rl   rC   rC   rD   rm      s    z&ClientWebSocketResponse.get_extra_infoc                 C   s   | j S rF   )r=   rI   rC   rC   rD   r_      s    z!ClientWebSocketResponse.exception    )messager'   c                    s   | j |I d H  d S rF   )r+   r[   rB   ro   rC   rC   rD   r[      s    zClientWebSocketResponse.pingc                    s   | j |I d H  d S rF   )r+   pongrp   rC   rC   rD   rq      s    zClientWebSocketResponse.pong)datar   r'   c                    s6   t |tstdt| | jj|d|dI d H  d S )Nzdata argument must be str (%r)Fbinaryr   )
isinstancestr	TypeErrortyper+   sendrB   rr   r   rC   rC   rD   send_str   s    
z ClientWebSocketResponse.send_strc                    s<   t |tttfs tdt| | jj|d|dI d H  d S )Nz#data argument must be byte-ish (%r)Trs   )ru   bytes	bytearray
memoryviewrw   rx   r+   ry   rz   rC   rC   rD   
send_bytes   s    z"ClientWebSocketResponse.send_bytes)dumps)rr   r   r   r'   c                   s   | j |||dI d H  d S )N)r   )r{   )rB   rr   r   r   rC   rC   rD   	send_json   s    z!ClientWebSocketResponse.send_json)codero   )r   ro   r'   c             
      s  | j rH| jsH| jd usJ | j | _|   | jtd | jI d H  | j	s| 
  z| j||I d H  W nd tjy   tj| _| j   Y n> ty } z&tj| _|| _| j  W Y d }~dS d }~0 0 | jr| j  dS zXt| j4 I d H ( | j I d H }W d   I d H  q@1 I d H s60    Y  W nh tjyl   tj| _| j   Y n@ ty } z&tj| _|| _| j  W Y d }~dS d }~0 0 |jtju r|j| _| j  dS qndS d S )Nr   TF)r;   r/   r:   Zcreate_futurer<   rg   r,   re   r   r.   rb   r+   rd   rY   CancelledErrorr   rc   r0   r(   	Exceptionr=   async_timeoutr#   r1   readrx   r   CLOSErr   )rB   r   ro   ra   msgrC   rC   rD   rd      sN    


B


zClientWebSocketResponse.close)r#   r'   c              
      s  |p| j }| jrtd| jr"tS | jr:|  I d H  tS zd| _z|rt|4 I d H & | j	
 I d H }W d   I d H  q1 I d H s0    Y  n| j	
 I d H }|   W d| _| jrt| jd  nd| _| jrt| jd  0 W n( tjtjfy   tj| _ Y n tyH   tj| _|  I d H  ttjd d  Y S  tyn   |   tj| _t Y S  ty } z6|j| _| j|jdI d H  ttj|d W  Y d }~S d }~0  ty } z>|| _|    tj| _|  I d H  ttj|d W  Y d }~S d }~0 0 |j!tj"u rR|    |j#| _| js| j$r|  I d H  n\|j!tj%u rj|    nD|j!tj&u r| j'r| (|j#I d H  q
n|j!tj)u r| j'rq
|S )Nz+Concurrent call to receive() is not allowedTF)r   )*r2   r;   RuntimeErrorr.   r   r/   rd   r   r#   r,   r   rA   r<   r
   rY   r   TimeoutErrorr   rc   r0   r   OKr   r   CLOSEDr   rb   r   r   rf   r   r=   rg   rx   r   rr   r3   CLOSINGZPINGr4   rq   ZPONG)rB   r#   r   r   ra   rC   rC   rD   receive"  sp    
<
"$
zClientWebSocketResponse.receiver#   c                   sB   |  |I d H }|jtjur6td|j d|jdtt|jS )NReceived message :z is not str)r   rx   r   ZTEXTrw   rr   r   rv   rB   r#   r   rC   rC   rD   receive_strf  s    z#ClientWebSocketResponse.receive_strc                   sB   |  |I d H }|jtjur6td|j d|jdtt|jS )Nr   r   z is not bytes)r   rx   r   BINARYrw   rr   r   r|   r   rC   rC   rD   receive_bytesl  s    z%ClientWebSocketResponse.receive_bytes)loadsr#   )r   r#   r'   c                   s   | j |dI d H }||S )Nr   )r   )rB   r   r#   rr   rC   rC   rD   receive_jsonr  s    z$ClientWebSocketResponse.receive_jsonc                 C   s   | S rF   rC   rI   rC   rC   rD   	__aiter__{  s    z!ClientWebSocketResponse.__aiter__c                    s,   |   I d H }|jtjtjtjfv r(t|S rF   )r   rx   r   r   r   r   StopAsyncIteration)rB   r   rC   rC   rD   	__anext__~  s    z!ClientWebSocketResponse.__anext__)N)rn   )rn   )N)N)N)N)4__name__
__module____qualname__r   r   rv   r   floatboolrY   ZAbstractEventLoopintrE   rJ   rG   rA   rP   r]   rV   BaseExceptionr`   rb   rg   propertyrh   ri   r!   r   r   r   rm   r_   r|   r[   rq   r{   r   r   r   r   r   r   rd   r   r   r   r   r   r   r   r   r   rC   rC   rC   rD   r   !   s   -	!
 	1D		r   )#__doc__rY   rW   typingr   r   r   Zclient_exceptionsr   r   Zclient_reqrepr   Zhelpersr	   r
   httpr   r   r   r   r   r   Zhttp_websocketr   Zstreamsr   r   Ztypedefsr   r   r   r   rX   r   r   rC   rC   rC   rD   <module>   s    

