a
    `g:                     @   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
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 ddlmZmZ ddl 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(e
j)dddG dd dZ*e*dddZ+G dd dZ,dS )zWebSocket client for asyncio.    N)TracebackType)AnyOptionalTypecast   )WebSocketDataQueue)ClientErrorServerTimeoutErrorWSMessageTypeError)ClientResponse)calculate_timeout_when
set_result)WS_CLOSED_MESSAGEWS_CLOSING_MESSAGEWebSocketErrorWSCloseCode	WSMessage	WSMsgType)_INTERNAL_RECEIVE_TYPESWebSocketWriter)	EofStream)DEFAULT_JSON_DECODERDEFAULT_JSON_ENCODERJSONDecoderJSONEncoder)      T)frozenslotsc                   @   s0   e Zd Zejee ddZejee ddZdS )ClientWSTimeoutN)typedefault)	__name__
__module____qualname__attrZibr   float
ws_receivews_close r*   r*   _/var/www/html/cobodadashboardai.evdpl.com/venv/lib/python3.9/site-packages/aiohttp/client_ws.pyr    %   s   r    g      $@)r(   r)   c                   @   s  e Zd Zddddeeee eee	e	e
j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dXeeed(d)d*Z ee dd+d,Z!dYe"dd.d/d0Z#dZe"dd.d1d2Z$d[e"e%ee dd3d4d5Z&d\eee dd6d7d8Z'd]e"ee dd6d9d:Z(d^e)d;eee e*dd<d=d>Z+e,j-d-d?ee"e	d@dAdBZ.d_ee e/dCdDdEZ0ddFee edCdGdHZ1ddFee e"dCdIdJZ2e3ddKe4ee edLdMdNZ5d ddOdPZ6e/ddQdRZ7d ddSdTZ8ee9e  ee ee: ddUdVdWZ;d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rh|	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_reset_heartbeat)selfr0   r1   r2   r3   r4   r5   r6   r7   r-   r.   r/   r*   r*   r+   __init__/   s2    
z ClientWebSocketResponse.__init__)r8   c                 C   s@   |    | jd ur"| j  d | _| jd ur<| j  d | _d S N)_cancel_pong_response_cbrF   cancelrP   rR   r*   r*   r+   _cancel_heartbeatZ   s    



z)ClientWebSocketResponse._cancel_heartbeatc                 C   s   | j d ur| j   d | _ d S rT   )rI   rV   rW   r*   r*   r+   rU   c   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   )rE   rU   rJ   r;   
_connector_timeout_ceil_thresholdtimer   rG   rF   call_at_send_heartbeat)rR   r7   conntimeout_ceil_thresholdnowwhenr*   r*   r+   rQ   h   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| _| jdtj}tjdkrtj||dd}n
||}| s|| _|| j n
| | d S )NrY       )r      T)r7   Zeager_start)rF   rJ   r\   rG   r]   r^   r;   rZ   r[   r   rH   rU   _pong_not_receivedrI   r<   
send_framer   PINGsysversion_infoasyncioTaskcreate_taskdonerP   add_done_callback_ping_task_done)rR   r7   ra   r_   r`   rb   coroZ	ping_taskr*   r*   r+   r^   }   s,    


z'ClientWebSocketResponse._send_heartbeatzasyncio.Task[None])taskr8   c                 C   s(   |  s|  }r| | d| _dS )z*Callback for when the ping task completes.N)	cancelled	exception_handle_ping_pong_exceptionrP   )rR   rq   excr*   r*   r+   ro      s    
z'ClientWebSocketResponse._ping_task_donec                 C   s   |  t  d S rT   )rt   r
   rW   r*   r*   r+   re      s    z*ClientWebSocketResponse._pong_not_received)ru   r8   c                 C   sR   | j r
dS |   tj| _|| _| j  | jrN| j	sN| j
ttj|dd dS )z5Handle exceptions raised during ping/pong processing.Nr   )r?   _set_closedr   ABNORMAL_CLOSURErA   rM   r9   closerK   r@   r=   	feed_datar   r   ERROR)rR   ru   r*   r*   r+   rt      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?   rX   rW   r*   r*   r+   rv      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@   rX   rW   r*   r*   r+   _set_closing   s    z$ClientWebSocketResponse._set_closingc                 C   s   | j S rT   )r?   rW   r*   r*   r+   closed   s    zClientWebSocketResponse.closedc                 C   s   | j S rT   )rA   rW   r*   r*   r+   
close_code   s    z"ClientWebSocketResponse.close_codec                 C   s   | j S rT   )r>   rW   r*   r*   r+   r2      s    z ClientWebSocketResponse.protocolc                 C   s   | j S rT   )rN   rW   r*   r*   r+   r.      s    z ClientWebSocketResponse.compressc                 C   s   | j S rT   )rO   rW   r*   r*   r+   r/      s    z)ClientWebSocketResponse.client_notakeover)namer"   r8   c                 C   s2   | j j}|du r|S |j}|du r&|S |||S )z$extra info from connection transportN)r9   r:   	transportget_extra_info)rR   r~   r"   r_   r   r*   r*   r+   r      s    z&ClientWebSocketResponse.get_extra_infoc                 C   s   | j S rT   )rM   rW   r*   r*   r+   rs      s    z!ClientWebSocketResponse.exceptionrc   )messager8   c                    s   | j |tjI d H  d S rT   )r<   rf   r   rg   rR   r   r*   r*   r+   ping   s    zClientWebSocketResponse.pingc                    s   | j |tjI d H  d S rT   )r<   rf   r   PONGr   r*   r*   r+   pong   s    zClientWebSocketResponse.pong)r   opcoder.   r8   c                    s   | j |||I dH  dS )z Send a frame over the websocket.N)r<   rf   )rR   r   r   r.   r*   r*   r+   rf      s    z"ClientWebSocketResponse.send_frame)datar.   r8   c                    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!   r<   rf   encoder   TEXTrR   r   r.   r*   r*   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   r!   r<   rf   r   BINARYr   r*   r*   r+   
send_bytes   s    z"ClientWebSocketResponse.send_bytes)dumps)r   r.   r   r8   c                   s   | j |||dI d H  d S )Nr   )r   )rR   r   r.   r   r*   r*   r+   	send_json   s    z!ClientWebSocketResponse.send_json)coder   )r   r   r8   c             
      s  | j rH| jsH| jd usJ | j | _|   | jtd | jI d H  | j	rRd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 zZt| jj4 I d H ( | j I d H }W d   I d H  qD1 I d H s:0    Y  W nh tjyp   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 qd S )Nr   FT)rK   r@   rJ   create_futurerL   r{   r=   ry   r   r?   rv   r<   rx   rj   CancelledErrorr   rw   rA   r9   	ExceptionrM   async_timeoutr4   rB   r)   readr!   r   CLOSEr   )rR   r   r   ru   msgr*   r*   r+   rx     sN    


B


zClientWebSocketResponse.close)r4   r8   c              
      s  |p
| j 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yJ   tj| _|  I d H  ttjd d  Y S  typ   |   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#vr&|S |j"tj$u rd| !  |j%| _| js| j&r|  I d H  n\|j"tj'u r|| !  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   ),rB   r(   rK   RuntimeErrorr?   r   r@   rx   r   r4   r=   r   rQ   rL   r   rj   r   TimeoutErrorr   rw   rA   r   OKr   r   CLOSEDr	   rv   r   r   rz   r   rM   r{   r!   r   r   r   rC   CLOSINGrg   rD   r   r   )rR   r4   Zreceive_timeoutr   ru   r*   r*   r+   receive6  st    <
"$
zClientWebSocketResponse.receiver4   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 WSMsgType.TEXT)r   r!   r   r   r   r   r   r   rR   r4   r   r*   r*   r+   receive_str  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 WSMsgType.BINARY)r   r!   r   r   r   r   r   r   r   r*   r*   r+   receive_bytes  s    z%ClientWebSocketResponse.receive_bytes)loadsr4   )r   r4   r8   c                   s   | j |dI d H }||S )Nr   )r   )rR   r   r4   r   r*   r*   r+   receive_json  s    z$ClientWebSocketResponse.receive_jsonc                 C   s   | S rT   r*   rW   r*   r*   r+   	__aiter__  s    z!ClientWebSocketResponse.__aiter__c                    s,   |   I d H }|jtjtjtjfv r(t|S rT   )r   r!   r   r   r   r   StopAsyncIteration)rR   r   r*   r*   r+   	__anext__  s    z!ClientWebSocketResponse.__anext__c                    s   | S rT   r*   rW   r*   r*   r+   
__aenter__  s    z"ClientWebSocketResponse.__aenter__)exc_typeexc_valexc_tbr8   c                    s   |   I d H  d S rT   )rx   )rR   r   r   r   r*   r*   r+   	__aexit__  s    z!ClientWebSocketResponse.__aexit__)N)rc   )rc   )N)N)N)N)N)<r#   r$   r%   r   r   r   r   r   r    boolrj   AbstractEventLoopr'   intrS   rX   rU   rQ   r^   ro   re   BaseExceptionrt   rv   r{   propertyr|   r}   r2   r.   r/   r   r   rs   r   r   r   r   rf   r   r   r   r   r   r   r   rx   r   r   r   r   r   r   r   r   r   r   r   r   r   r*   r*   r*   r+   r,   .   s   +	"
 
 	1I	
r,   )-__doc__rj   rh   typesr   typingr   r   r   r   r&   Z_websocket.readerr   Zclient_exceptionsr	   r
   r   Zclient_reqrepr   helpersr   r   httpr   r   r   r   r   r   Zhttp_websocketr   r   streamsr   Ztypedefsr   r   r   r   ri   r   sr    ZDEFAULT_WS_CLIENT_TIMEOUTr,   r*   r*   r*   r+   <module>   s(    

