U
    ;g27                     @   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
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)TracebackType)AnyOptionalType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                   @   s  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dVeeed)d*d+Zee d	d,d-ZdWe dd/d0d1Z!dXe dd/d2d3Z"dYeee dd4d5d6Z#dZe ee dd4d7d8Z$d[e%d9eee e&dd:d;d<Z'e(j)d.d=ee ed>d?d@Z*d\e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 d	dQdRZ4ee5e  ee ee6 ddSdTdUZ7dS )]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 k	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     rE   Q/opt/bot/vods_filmes/script/venv/lib/python3.8/site-packages/aiohttp/client_ws.py__init__#   s4    
z ClientWebSocketResponse.__init__)r)   c                 C   s@   |    | jd k	r"| j  d | _| jd k	r<| j  d | _d S N)_cancel_pong_response_cbr8   cancelrB   rD   rE   rE   rF   _cancel_heartbeatP   s    



z)ClientWebSocketResponse._cancel_heartbeatc                 C   s   | j d k	r| j   d | _ d S rH   )r;   rJ   rK   rE   rE   rF   rI   Y   s    

z0ClientWebSocketResponse._cancel_pong_response_cbc                 C   s|   | j d krd S |   | j}|d k	s(t| j}|d k	r>|jjnd}| }t|| j |}|| _	| j
d krx||| j| _
d S )N   )r7   rI   r<   AssertionErrorr,   
_connector_timeout_ceil_thresholdtimer   r9   r8   call_at_send_heartbeat)rD   r(   conntimeout_ceil_thresholdnowwhenrE   rE   rF   rC   ^   s    

z(ClientWebSocketResponse._reset_heartbeatc                 C   s   d | _ | j}| }|| jk r4|| j| j| _ d S | j}|d k	rJ|jjnd}t	|| j
|}|   ||| j| _tjdkrtj| j |dd}n|| j }| s|| _|| j n
| | d S )NrM   )r      T)r(   Zeager_start)r8   r<   rQ   r9   rR   rS   r,   rO   rP   r   r:   rI   _pong_not_receivedr;   sysversion_infoasyncioTaskr-   pingZcreate_taskdonerB   Zadd_done_callback_ping_task_done)rD   r(   rV   rT   rU   rW   Z	ping_taskrE   rE   rF   rS   s   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_exceptionrB   )rD   ra   excrE   rE   rF   r`      s    
z'ClientWebSocketResponse._ping_task_donec                 C   s   |  t  d S rH   )rc   r	   rK   rE   rE   rF   rY      s    z*ClientWebSocketResponse._pong_not_received)rd   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)r0   _set_closedr   ABNORMAL_CLOSUREr2   r?   r*   closer=   r1   r.   	feed_datar   r   ERROR)rD   rd   rE   rE   rF   rc      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)r0   rL   rK   rE   rE   rF   re      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)r1   rL   rK   rE   rE   rF   _set_closing   s    z$ClientWebSocketResponse._set_closingc                 C   s   | j S rH   )r0   rK   rE   rE   rF   closed   s    zClientWebSocketResponse.closedc                 C   s   | j S rH   )r2   rK   rE   rE   rF   
close_code   s    z"ClientWebSocketResponse.close_codec                 C   s   | j S rH   )r/   rK   rE   rE   rF   r#      s    z ClientWebSocketResponse.protocolc                 C   s   | j S rH   )r@   rK   rE   rE   rF   r      s    z ClientWebSocketResponse.compressc                 C   s   | j S rH   )rA   rK   rE   rE   rF   r       s    z)ClientWebSocketResponse.client_notakeover)namedefaultr)   c                 C   s2   | j j}|dkr|S |j}|dkr&|S |||S )z$extra info from connection transportN)r*   r+   	transportget_extra_info)rD   rm   rn   rT   ro   rE   rE   rF   rp      s    z&ClientWebSocketResponse.get_extra_infoc                 C   s   | j S rH   )r?   rK   rE   rE   rF   rb      s    z!ClientWebSocketResponse.exception    )messager)   c                    s   | j |I d H  d S rH   )r-   r^   rD   rr   rE   rE   rF   r^      s    zClientWebSocketResponse.pingc                    s   | j |I d H  d S rH   )r-   pongrs   rE   rE   rF   rt      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rD   ru   r   rE   rE   rF   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)Trv   )rx   bytes	bytearray
memoryviewrz   r{   r-   r|   r}   rE   rE   rF   
send_bytes   s    z"ClientWebSocketResponse.send_bytes)dumps)ru   r   r   r)   c                   s   | j |||dI d H  d S )N)r   )r~   )rD   ru   r   r   rE   rE   rF   	send_json   s    z!ClientWebSocketResponse.send_json)coderr   )r   rr   r)   c             
      s  | j rH| jsH| jd k	st| j | _|   | jt	d | jI d H  | j
rRdS |   z| j||I d H  W nh tjk
r   tj| _| j   Y n@ tk
r } z"tj| _|| _| j  W Y dS d }~X Y nX | jr| j  dS z:t| j4 I d H  | j I d H }W 5 Q I d H R X W nl tjk
rV   tj| _| j   Y nB tk
r } z"tj| _|| _| j  W Y dS d }~X Y nX |jtjkr|j| _| j  dS qd S )Nr   FT)r=   r1   r<   rN   Zcreate_futurer>   rj   r.   rh   r   r0   re   r-   rg   r\   CancelledErrorr   rf   r2   r*   	Exceptionr?   async_timeoutr%   r3   readr{   r   CLOSEru   )rD   r   rr   rd   msgrE   rE   rF   rg      sN    


$


zClientWebSocketResponse.close)r%   r)   c              
      s  |p| j }| jrtd| jr"tS | jr:|  I d H  tS z~d| _zV|r~t	
|4 I d H  | j I d H }W 5 Q I d H R X n| j I d H }|   W 5 d| _| jrt| jd  X W n0 tjtjfk
r   tj| _ Y n
 tk
r   tj| _|  I d H  ttjd d  Y S  tk
r@   |   tj| _t Y S  tk
r } z2|j| _| j|jdI d H  ttj|d  W Y S d }~X Y nZ tk
r } z:|| _|    tj| _|  I d H  ttj|d  W Y S d }~X Y nX |j!tj"kr(|    |j#| _| js| j$r|  I d H  n\|j!tj%kr@|    nD|j!tj&krl| j'rl| (|j#I d H  q
n|j!tj)kr| j'rq
|S )Nz+Concurrent call to receive() is not allowedTF)r   )*r4   r=   RuntimeErrorr0   r   r1   rg   r>   r   r   r%   r.   r   rC   r\   r   TimeoutErrorr   rf   r2   r   OKr   r   CLOSEDr   re   r   r   ri   r   r?   rj   r{   r   ru   r5   CLOSINGZPINGr6   rt   ZPONG)rD   r%   r   r   rd   rE   rE   rF   receive#  sj    
""$
zClientWebSocketResponse.receiver%   c                   sB   |  |I d H }|jtjk	r6td|j d|jdtt|jS )NReceived message :z is not str)r   r{   r   ZTEXTrz   ru   r   ry   rD   r%   r   rE   rE   rF   receive_strg  s    z#ClientWebSocketResponse.receive_strc                   sB   |  |I d H }|jtjk	r6td|j d|jdtt|jS )Nr   r   z is not bytes)r   r{   r   ZBINARYrz   ru   r   r   r   rE   rE   rF   receive_bytesm  s    z%ClientWebSocketResponse.receive_bytes)loadsr%   )r   r%   r)   c                   s   | j |dI d H }||S )Nr   )r   )rD   r   r%   ru   rE   rE   rF   receive_jsons  s    z$ClientWebSocketResponse.receive_jsonc                 C   s   | S rH   rE   rK   rE   rE   rF   	__aiter__|  s    z!ClientWebSocketResponse.__aiter__c                    s,   |   I d H }|jtjtjtjfkr(t|S rH   )r   r{   r   r   r   r   StopAsyncIteration)rD   r   rE   rE   rF   	__anext__  s    z!ClientWebSocketResponse.__anext__c                    s   | S rH   rE   rK   rE   rE   rF   
__aenter__  s    z"ClientWebSocketResponse.__aenter__)exc_typeexc_valexc_tbr)   c                    s   |   I d H  d S rH   )rg   )rD   r   r   r   rE   rE   rF   	__aexit__  s    z!ClientWebSocketResponse.__aexit__)N)rq   )rq   )N)N)N)N)8__name__
__module____qualname__r   r   ry   r
   floatboolr\   ZAbstractEventLoopintrG   rL   rI   rC   rS   r`   rY   BaseExceptionrc   re   rj   propertyrk   rl   r#   r   r    r   rp   rb   r   r^   rt   r~   r   r   r   r   r   r   rg   r   r   r   r   r   r   r   r   r   r   r   r   r   rE   rE   rE   rF   r   "   s   -	!
 	1D		
r   )&__doc__r\   rZ   typesr   typingr   r   r   r   Zclient_exceptionsr   r	   Zclient_reqrepr
   Zhelpersr   r   httpr   r   r   r   r   r   Zhttp_websocketr   streamsr   r   Ztypedefsr   r   r   r   r[   r   r   rE   rE   rE   rF   <module>   s    

