o
    Rhu6                     @   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r^d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                   @   s  e Zd Zddddddddedee d	ed
ededede	j
dee dee 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#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e fd,d-Zedee fd.d/Zedefd0d1Zedefd2d3Zd^d4ed5edefd6d7Zdee fd8d9Zd_d;e ddfd<d=Z!d_d;e ddfd>d?Z"d^d@edee ddfdAdBZ#d^d@e dee ddfdCdDZ$	d^e%dEd@edee dFe&ddfdGdHZ'e(j)d:dIdJed;e defdKdLZ*d^d
ee de+fdMdNZ,ddOd
ee defdPdQZ-ddOd
ee de fdRdSZ.e/ddTdUe0d
ee defdVdWZ1d`dXdYZ2de+fdZd[Z3dS )aClientWebSocketResponseNr   F)receive_timeout	heartbeatcompressclient_notakeoverreaderzFlowControlDataQueue[WSMessage]writerprotocolresponsetimeout	autocloseautopingloopr   r   r   r   returnc	                C   s   || _ |j| _|| _|| _|| _d| _d| _d | _|| _	|	| _
|| _|| _|
| _d | _d| _|
d ur7|
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   S/home/air/sanwanet/backup_V2/venv/lib/python3.10/site-packages/aiohttp/client_ws.py__init__"   s4   
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_cbr6   cancelr@   rB   rC   rC   rD   _cancel_heartbeatO   s   




z)ClientWebSocketResponse._cancel_heartbeatc                 C   s"   | j d ur| j   d | _ d S 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 r>|
|| j| _	d S 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 r|| j| j| _ d S | j}|d ur%|jjnd}t	|| j
|}|   ||| j| _tjdkrKtj| j |dd}n|| j }| sb|| _|| j d S | | d S )NrK   )r      T)r&   eager_start)r6   r:   rN   r7   rO   rP   r*   rL   rM   r	   r8   rG   _pong_not_receivedr9   sysversion_infoasyncioTaskr+   pingcreate_taskdoner@   add_done_callback_ping_task_done)rB   r&   rS   rQ   rR   rT   	ping_taskrC   rC   rD   rP   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_exceptionr@   )rB   rb   excrC   rC   rD   r`      s   

z'ClientWebSocketResponse._ping_task_donec                 C   s   |  t  d S rF   )rf   r   rI   rC   rC   rD   rW      s   z*ClientWebSocketResponse._pong_not_receivedrg   c                 C   sX   | j rdS |   tj| _|| _| j  | jr(| j	s*| j
ttj|d dS dS 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   rg   rC   rC   rD   rf      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.   rJ   rI   rC   rC   rD   rh         z#ClientWebSocketResponse._set_closedc                 C   rm   )zfSet the connection to closing.

        Cancel any heartbeat timers and set the closing flag.
        TN)r/   rJ   rI   rC   rC   rD   _set_closing   rn   z$ClientWebSocketResponse._set_closingc                 C      | j S rF   )r.   rI   rC   rC   rD   closed      zClientWebSocketResponse.closedc                 C   rp   rF   )r0   rI   rC   rC   rD   
close_code   rr   z"ClientWebSocketResponse.close_codec                 C   rp   rF   )r-   rI   rC   rC   rD   r!      rr   z ClientWebSocketResponse.protocolc                 C   rp   rF   )r>   rI   rC   rC   rD   r      rr   z ClientWebSocketResponse.compressc                 C   rp   rF   )r?   rI   rC   rC   rD   r      rr   z)ClientWebSocketResponse.client_notakeovernamedefaultc                 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   rt   ru   rQ   rv   rC   rC   rD   rw      s   z&ClientWebSocketResponse.get_extra_infoc                 C   rp   rF   )r=   rI   rC   rC   rD   re      s   z!ClientWebSocketResponse.exception    messagec                       | j |I d H  d S rF   )r+   r\   rB   ry   rC   rC   rD   r\         zClientWebSocketResponse.pingc                    rz   rF   )r+   pongr{   rC   rC   rD   r}      r|   zClientWebSocketResponse.pongdatac                    s8   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   r~   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)Tr   )r   bytes	bytearray
memoryviewr   r   r+   r   r   rC   rC   rD   
send_bytes   s   z"ClientWebSocketResponse.send_bytes)dumpsr   c                   s   | j |||dI d H  d S )N)r   )r   )rB   r~   r   r   rC   rC   rD   	send_json   s   z!ClientWebSocketResponse.send_json)codery   r   c             
      s  | j r%| js%| jd usJ | j | _|   | jtd | jI d H  | j	s| 
  z| j||I d H  W n0 tjyJ   tj| _| j    tyh } ztj| _|| _| j  W Y d }~dS d }~ww | jrs| j  dS 	 z*t| 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 qtdS )Nr   TF)r;   r/   r:   create_futurer<   ro   r,   rk   r   r.   rh   r+   rj   rZ   CancelledErrorr   ri   r0   r(   	Exceptionr=   async_timeoutr#   r1   readr   r   CLOSEr~   )rB   r   ry   rg   msgrC   rC   rD   rj      s`   


(


zClientWebSocketResponse.closec              
      s  |p| j }	 | jrtd| jrtS | jr|  I d H  tS zXd| _zD|rNt|4 I d H  | j	
 I d H }W d   I d H  n1 I d H sHw   Y  n| j	
 I d H }|   W d| _| jrgt| jd  nd| _| jrut| 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j"u r%|    |j#| _| js#| j$r#|  I d H  |S |j!tj%u r2|    |S |j!tj&u rG| j'rG| (|j#I d H  q|j!tj)u rS| j'rSq|S )NTz+Concurrent call to receive() is not allowedF)r   )*r2   r;   RuntimeErrorr.   r   r/   rj   r   r#   r,   r   rA   r<   r
   rZ   r   TimeoutErrorr   ri   r0   r   OKr   r   CLOSEDr   rh   r   r   rl   r   r=   ro   r   r   r~   r3   CLOSINGPINGr4   r}   PONG)rB   r#   r   r   rg   rC   rC   rD   receive"  s   
(
	zClientWebSocketResponse.receiver#   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 str)r   r   r   TEXTr   r~   r   r   rB   r#   r   rC   rC   rD   receive_strf  
   z#ClientWebSocketResponse.receive_strc                   r   )Nr   r   z is not bytes)r   r   r   BINARYr   r~   r   r   r   rC   rC   rD   receive_bytesl  r   z%ClientWebSocketResponse.receive_bytes)loadsr#   r   c                   s   | j |dI d H }||S )Nr   )r   )rB   r   r#   r~   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   r   r   r   r   r   StopAsyncIteration)rB   r   rC   rC   rD   	__anext__~  s
   z!ClientWebSocketResponse.__anext__)r'   N)rb   rc   r'   NrF   )rx   )r'   r   )4__name__
__module____qualname__r   r   r   r   floatboolrZ   AbstractEventLoopintrE   rJ   rG   rA   rP   r`   rW   BaseExceptionrf   rh   ro   propertyrq   rs   r!   r   r   r   rw   re   r   r\   r}   r   r   r   r   r   r   r   rj   r   r   r   r   r   r   r   r   r   rC   rC   rC   rD   r   !   s    	

-
	


!




 	1D	

	r   )#__doc__rZ   rX   typingr   r   r   client_exceptionsr   r   client_reqrepr   helpersr	   r
   httpr   r   r   r   r   r   http_websocketr   streamsr   r   typedefsr   r   r   r   rY   r   r   rC   rC   rC   rD   <module>   s     

