
    F/jL                        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         Z4 ejj                  dd       G d d             Z6 e6dd      Z7 G d de	e4         Z8y)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                   h    e Zd Z ej                  ee   d      Z ej                  ee   d      Zy)ClientWSTimeoutN)typer+   )	__name__
__module____qualname__attribr   float
ws_receivews_close     O/var/www/html/maxservice/venv/lib/python3.12/site-packages/aiohttp/client_ws.pyr/   r/   4   s.    huot<JtwwHUOT:Hr:   r/   g      $@)r7   r8   c                   X   e Zd Zdddddedededz  ded	ed
edede	j                  dedz  dededdfdZdVdZdVdZdVdZdVdZdVdZdVdZdWdZdVdZdeddfdZdVdZdVdZedefd       Zededz  fd       Zededz  fd        Zedefd!       Zedefd"       ZdXd#ed$e de fd%Z!dedz  fd&Z"dYd(e#ddfd)Z$dYd(e#ddfd*Z%	 dXd(e#d+e&dedz  ddfd,Z'dXd-ededz  ddfd.Z(dXd-e#dedz  ddfd/Z)	 dXe*d0d-e dedz  d1e+ddfd2Z,	 dXd-e dedz  d1e-ddfd3Z.e/j`                  d'd4d5ed(e#defd6Z1e2	 dXd7d8d	edz  de3fd9       Z4e2	 dXd7d:d	edz  de5fd;       Z4e2	 dXd7d<d	edz  de3e5z  fd=       Z4	 dXd	edz  de3e5z  fd>Z4e2dd?d7d8d	edz  defd@       Z6e2dd?d7d:d	edz  de#fdA       Z6e2dd?d7d<d	edz  dee#z  fdB       Z6dd?d	edz  dee#z  fdCZ6dd?d	edz  de#fdDZ7e2dEddFd7d8dGe8d	edz  de fdH       Z9e2dEddFd7d:dGe:e#ge f   d	edz  de fdI       Z9e2dEddFd7d<dGe8e:e#ge f   z  d	edz  de fdJ       Z9e;ddFdGe8e:e#ge f   z  d	edz  de fdKZ9de<fdLZ=e2d7d8de3fdM       Z>e2d7d:de5fdN       Z>e2d7d<de3e5z  fdO       Z>de3e5z  fdPZ>de<fdQZ?dRe@e   dz  dSedz  dTeAdz  ddfdUZBy)ZClientWebSocketResponseNr   F)	heartbeatcompressclient_notakeoverreaderwriterprotocolresponsetimeout	autocloseautopingloopr>   r?   r@   returnc	                   || _         |j                  | _        || _        || _        || _        d| _        d| _        d | _        || _	        || _
        || _        |	| _        d | _        d| _        |	
|	dz  | _        d | _        || _        d| _        d | _        d | _        |
| _        || _        d | _        d| _        d | _        | j5                          y )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)selfrA   rB   rC   rD   rE   rF   rG   rH   r>   r?   r@   s               r;   __init__z ClientWebSocketResponse.__init__>   s     "((
!'+#!#9=&) #,s?D =A
#8<04!"359%*">B$r:   c                 B   | j                          | j                  !| j                  j                          d | _        d| _        | j                  !| j                  j                          d | _        | j
                  "| j
                  j                          d | _        y y NF)_cancel_pong_response_cbrd   cancelrc   rX   rb   rf   s    r;   _cancel_heartbeatz)ClientWebSocketResponse._cancel_heartbeatk   s    %%'''3((//1+/D(%*")%%'!%D??&OO""$"DO 'r:   c                 `    | j                   "| j                   j                          d | _         y y N)r[   rk   rl   s    r;   rj   z0ClientWebSocketResponse._cancel_pong_response_cbx   s-    !!-""))+%)D" .r:   c                     | j                   | j                  ry | j                  }|J d| _        |j                  | j                        | _        y )NT)rW   rc   r\   	call_soon_flush_heartbeat_resetrd   )rf   rH   s     r;   _on_data_receivedz)ClientWebSocketResponse._on_data_received}   sM    ??"d&@&@zz &*"'+~~d6Q6Q'R$r:   c                 Z    d | _         | j                  sy | j                          d| _        y ri   )rd   rc   re   rl   s    r;   rr   z.ClientWebSocketResponse._flush_heartbeat_reset   s*    '+$))%*"r:   c                 b   | j                   y | j                          | j                  }|J | j                  }||j                  j
                  nd}|j                         }t        || j                   |      }|| _        | j                  "|j                  || j                        | _	        y y )N   )rW   rj   r\   rM   
_connector_timeout_ceil_thresholdtimer   rY   rX   call_at_send_heartbeat)rf   rH   conntimeout_ceil_thresholdnowwhens         r;   re   z(ClientWebSocketResponse._reset_heartbeat   s    ??"%%'zzzz7;7GDOO33Q 	 iik%c4??<RS#% "&dD4H4H!ID &r:   c                    d | _         | j                  ry | j                  }|j                         }|| j                  k  r,|j                  | j                  | j                        | _         y | j                  }||j                  j                  nd}t        || j                  |      }| j                          |j                  || j                        | _        | j                  j!                  dt"        j$                        }t&        j(                  dk\  rt+        j,                  ||d      }n|j/                  |      }|j1                         s#|| _        |j5                  | j6                         y | j7                  |       y )Nrv   r:   )r#      T)rH   eager_start)rX   rc   r\   ry   rY   rz   r{   rM   rw   rx   r   rZ   rj   _pong_not_receivedr[   rN   
send_framer   PINGsysversion_infoasyncioTaskcreate_taskdonerb   add_done_callback_ping_task_done)rf   rH   r~   r|   r}   r   coro	ping_tasks           r;   r{   z'ClientWebSocketResponse._send_heartbeat   s>   ! %%zziik%%%!%$$d&:&:"D zz7;7GDOO33Q 	 &c4+?+?AWX%%'!%dD4K4K!L||&&sINN;w&  T$GI((.I~~'DO''(<(<=  +r:   c                 x    |j                         s#|j                         x}r| j                  |       d| _        y)z*Callback for when the ping task completes.N)	cancelled	exception_handle_ping_pong_exceptionrb   )rf   taskexcs      r;   r   z'ClientWebSocketResponse._ping_task_done   s2    ~~DNN,<%<S%<,,S1r:   c                 T    | j                  t        d| j                   d             y )NzNo PONG received after z seconds)r   r   rZ   rl   s    r;   r   z*ClientWebSocketResponse._pong_not_received   s)    ((!89M9M8NhWX	
r:   r   c                 H   | j                   ry| j                          t        j                  | _        || _        | j                  j                          | j                  rC| j                  s6| j                  j                  t        t        j                  |d      d       yyy)z5Handle exceptions raised during ping/pong processing.Nr   )rQ   _set_closedr   ABNORMAL_CLOSURErS   r_   rK   closer]   rR   rO   	feed_datar   r   ERROR)rf   r   s     r;   r   z3ClientWebSocketResponse._handle_ping_pong_exception   sr    <<&77==LL""9Y__c4#H!L "/=r:   c                 2    d| _         | j                          y)zdSet the connection to closed.

        Cancel any heartbeat timers and set the closed flag.
        TN)rQ   rm   rl   s    r;   r   z#ClientWebSocketResponse._set_closed   s    
  r:   c                 2    d| _         | j                          y)zfSet the connection to closing.

        Cancel any heartbeat timers and set the closing flag.
        TN)rR   rm   rl   s    r;   _set_closingz$ClientWebSocketResponse._set_closing   s    
  r:   c                     | j                   S ro   )rQ   rl   s    r;   closedzClientWebSocketResponse.closed   s    ||r:   c                     | j                   S ro   )rS   rl   s    r;   
close_codez"ClientWebSocketResponse.close_code   s    r:   c                     | j                   S ro   )rP   rl   s    r;   rC   z ClientWebSocketResponse.protocol       ~~r:   c                     | j                   S ro   )r`   rl   s    r;   r?   z ClientWebSocketResponse.compress   r   r:   c                     | j                   S ro   )ra   rl   s    r;   r@   z)ClientWebSocketResponse.client_notakeover  s    &&&r:   namer+   c                 z    | j                   j                  }||S |j                  }||S |j                  ||      S )z$extra info from connection transport)rK   rL   	transportget_extra_info)rf   r   r+   r|   r   s        r;   r   z&ClientWebSocketResponse.get_extra_info  sB    ~~((<NNN	N''g66r:   c                     | j                   S ro   )r_   rl   s    r;   r   z!ClientWebSocketResponse.exception  s    r:   r:   messagec                 t   K   | j                   j                  |t        j                         d {    y 7 wro   )rN   r   r   r   rf   r   s     r;   pingzClientWebSocketResponse.ping  $     ll%%gy~~>>>   .868c                 t   K   | j                   j                  |t        j                         d {    y 7 wro   )rN   r   r   PONGr   s     r;   pongzClientWebSocketResponse.pong  r   r   opcodec                 Z   K   | j                   j                  |||       d{    y7 w)z Send a frame over the websocket.N)rN   r   )rf   r   r   r?   s       r;   r   z"ClientWebSocketResponse.send_frame  s$      ll%%gvx@@@s   !+)+datac                    K   t        |t              st        dt        |      z        | j                  j                  |j                  d      t        j                  |       d {    y 7 w)Nzdata argument must be str (%r)zutf-8r?   )	
isinstancestr	TypeErrorr0   rN   r   encoder   TEXTrf   r   r?   s      r;   send_strz ClientWebSocketResponse.send_str  sZ     $$<tDzIJJll%%KK )..8 & 
 	
 	
s   A&A0(A.)A0c                    K   t        |t        t        t        f      st	        dt        |      z        | j                  j                  |t        j                  |       d {    y 7 w)Nz#data argument must be byte-ish (%r)r   )
r   bytes	bytearray
memoryviewr   r0   rN   r   r   BINARYr   s      r;   
send_bytesz"ClientWebSocketResponse.send_bytes%  sQ     $	: >?ADJNOOll%%dI,<,<x%PPPs   A"A,$A*%A,)dumpsr   c                R   K   | j                   ||      |       d {    y 7 w)Nr   )r   rf   r   r?   r   s       r;   	send_jsonz!ClientWebSocketResponse.send_json*  s"      mmE$K(m;;;   '%'c                R   K   | j                   ||      |       d{    y7 w)zSend 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   s       r;   send_json_bytesz'ClientWebSocketResponse.send_json_bytes3  s"      ooeDkHo===r   )coder   r   c                  K   | j                   r}| j                  sq| j                  J | j                  j                         | _        | j                          | j                  j                  t        d       | j                   d {    | j                  ry| j                          	 | j                  j                  ||       d {    | j"                  r| j$                  j                          y	 	 t+        j,                  | j.                  j0                        4 d {    | j                  j3                          d {   }d d d       d {    j4                  t6        j8                  u r,|j:                  | _        | j$                  j                          y7 7 # t        j                  $ r1 t        j                   | _        | j$                  j                           t&        $ r@}t        j                   | _        || _        | j$                  j                          Y d }~yd }~ww xY w7 7 7 # 1 d {  7  sw Y   xY w# t        j                  $ r1 t        j                   | _        | j$                  j                           t&        $ r@}t        j                   | _        || _        | j$                  j                          Y d }~yd }~ww xY ww)Nr   FT)r]   rR   r\   create_futurer^   r   rO   r   r   rQ   r   rN   r   r   CancelledErrorr   r   rS   rK   	Exceptionr_   async_timeoutrE   rT   r8   readr0   r   CLOSEr   )rf   r   r   r   msgs        r;   r   zClientWebSocketResponse.closeA  s3     ==::)))#zz779DLL""#5q9""""<<
	,,$$T7333 NN  "(001G1GH 4 4 $ 1 1 33C4 4 xx9??*#&88 $$&# - # 4%% 	*;;DNN  " 	*;;D!DONN  "		434 4 4 4)) #.#?#? $$& #.#?#? "%$$&	s   BK!F$!K!*F) 	F'
F) (K!7-I $H7%I (H>H:H>I H<I A
K!'F) )AH446H/*K!/H44K!7I :H><I >IIII AK6KK!KK!rf   z&ClientWebSocketResponse[Literal[True]]c                    K   y wro   r9   rf   rE   s     r;   receivezClientWebSocketResponse.receiver        "   z'ClientWebSocketResponse[Literal[False]]c                    K   y wro   r9   r   s     r;   r   zClientWebSocketResponse.receivew        !$r   z$ClientWebSocketResponse[_DecodeText]c                    K   y wro   r9   r   s     r;   r   zClientWebSocketResponse.receive|        7:r   c                 n  K   |xs | j                   j                  }	 | j                  rt        d      | j                  rt
        S | j                  r| j                          d {    t
        S 	 d| _        	 |rQt        j                  |      4 d {    | j                  j                          d {   }d d d       d {    n"| j                  j                          d {   }d| _        | j                  rt        | j                  d        	 jB                  tD        vr|S |jB                  t.        jF                  u rS| jA                          |jH                  | _        | j                  s$| jJ                  r| j                          d {    |S |jB                  t.        jL                  u r| jA                          |S |jB                  t.        jN                  u r1| jP                  r%| jS                  |jH                         d {    |jB                  t.        jT                  u r| jP                  r$|S 7 7 7 7 # 1 d {  7  sw Y   sxY w7 {# d| _        | j                  rt        | j                  d        w w xY w# t        j                  t        j                   f$ r t"        j$                  | _         t(        $ rL t"        j*                  | _        | j                          d {  7   t-        t.        j0                  d d       cY S t2        $ r. | j5                          t"        j$                  | _        t
        cY S t6        $ r[}|j8                  | _        | j                  |j8                         d {  7   t-        t.        j:                  |d       cY d }~S d }~wt<        $ rj}|| _        | jA                          t"        j$                  | _        | j                          d {  7   t-        t.        j:                  |d       cY d }~S d }~ww xY w7 7 "w)NTz+Concurrent call to receive() is not allowedF)r   )+rT   r7   r]   RuntimeErrorrQ   r   rR   r   r   rE   rO   r   r^   r   r   r   TimeoutErrorr   r   rS   r   OKr   r   CLOSEDr   r   r   r   r   r   r_   r   r0   r   r   r   rU   CLOSINGr   rV   r   r   )rf   rE   receive_timeoutr   r   s        r;   r   zClientWebSocketResponse.receive  s5     "=T]]%=%=}}"#PQQ||((jjl""((%= $;&
 $1#8#8#I < <(,(9(9(;";C< < < %)LL$5$5$77$)DM''"4#3#3T:0 xx66 
xx9??*!!##&88 ||**,&& J Y...!!# J Y^^+ii)))Y^^+Jy #<";< < < < 8$)DM''"4#3#3T: (**G,@,@A #.#?#?  ?#.>> jjl"" !1!14>> )  "#.#?#? ((! =#&88 jjchhj/// #t<< ="%!!##.#?#? jjl"" #t<<=  ' *s5  A$P5&I'
P52J :I( II( I7I	8I<I( I"I( *I%+I( /*J A<P5P/A:P5P23P5I( 	II( I"II"	I( (,JJ A)P, L P,!P5#3P,P5P, 0N6NN60P,1P56P,?P'PP'!P,"P5'P,,P52P5rE   c                   K   y wro   r9   r   s     r;   receive_strz#ClientWebSocketResponse.receive_str  s      r   c                   K   y wro   r9   r   s     r;   r   z#ClientWebSocketResponse.receive_str  s      r   c                   K   y wro   r9   r   s     r;   r   z#ClientWebSocketResponse.receive_str  s      r   c                   K   | j                  |       d{   }|j                  t        j                  ur&t	        d|j                   d|j
                  d      t        t        |j
                        S 7 `w)zrReceive TEXT message.

        Returns str when decode_text=True (default), bytes when decode_text=False.
        NReceived message :z is not WSMsgType.TEXT)r   r0   r   r   r   r   r	   r   rf   rE   r   s      r;   r   z#ClientWebSocketResponse.receive_str  si     
 LL))889>>)$#CHH:Qsxxl:PQ  C"" *   A:A8A!A:c                   K   | j                  |       d {   }|j                  t        j                  ur&t	        d|j                   d|j
                  d      t        t        |j
                        S 7 `w)Nr   r   z is not WSMsgType.BINARY)r   r0   r   r   r   r   r	   r   r   s      r;   receive_bytesz%ClientWebSocketResponse.receive_bytes  si     LL))889+++$#CHH:Qsxxl:RS  E388$$ *r   .)loadsrE   r   c                   K   y wro   r9   rf   r   rE   s      r;   receive_jsonz$ClientWebSocketResponse.receive_json        r   c                   K   y wro   r9   r   s      r;   r   z$ClientWebSocketResponse.receive_json  r   r   c                   K   y wro   r9   r   s      r;   r   z$ClientWebSocketResponse.receive_json  r   r   c                R   K   | j                  |       d {   } ||      S 7 w)Nr   )r   )rf   r   rE   r   s       r;   r   z$ClientWebSocketResponse.receive_json  s-      %%g%66T{ 7s   '%'c                     | S ro   r9   rl   s    r;   	__aiter__z!ClientWebSocketResponse.__aiter__  s    r:   c                    K   y wro   r9   rl   s    r;   	__anext__z!ClientWebSocketResponse.__anext__  r   r   c                    K   y wro   r9   rl   s    r;   r   z!ClientWebSocketResponse.__anext__  r   r   c                    K   y wro   r9   rl   s    r;   r   z!ClientWebSocketResponse.__anext__  r   r   c                    K   | j                          d {   }|j                  t        j                  t        j                  t        j
                  fv rt        |S 7 Gwro   )r   r0   r   r   r   r   StopAsyncIteration)rf   r   s     r;   r   z!ClientWebSocketResponse.__anext__!  sG     LLN"88	):):I<L<LMM$$
 #s   A AAA c                    K   | S wro   r9   rl   s    r;   
__aenter__z"ClientWebSocketResponse.__aenter__'  s     s   exc_typeexc_valexc_tbc                 @   K   | j                          d {    y 7 wro   )r   )rf   r  r  r  s       r;   	__aexit__z!ClientWebSocketResponse.__aexit__*  s      jjls   )rI   N)r   zasyncio.Task[None]rI   Nro   )r:   )Cr1   r2   r3   r   r   r   r   r/   boolr   AbstractEventLoopr6   intrg   rm   rj   rs   rr   re   r{   r   r   BaseExceptionr   r   r   propertyr   r   rC   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!   r   r   r   r'   r   r   r  r0   r   r
  r9   r:   r;   r=   r=   =   s{    #'"'+ "+   +  *	+ 
 !+  !+  +  +  ''+  4<+  +   +  
+ Z#*
S+J*&,P

	M} 	M 	M!!     C$J     #*   #   '4 ' '73 7 7 7=4/ ?% ?$ ??% ?$ ? IMAA&/A;>:A	A
3 
#* 
 
QU QcDj QD Q  $<
 2<< *<
 < 
<  $>> *>
  > 
> *5# /3 /% /RV /b PT"6"AF"	" " QU$7$BG$,$	$ $ NR:4:?Dt|:	4	4: :
 '+Ht|H	4	4HT SW6DIDL	  TX7EJT\	  QU4BG$,	u  <@ 
#EDL 
#C%K 
# >B %edl %e %  ! $	6  	
 
   ), $	7 % 	
 
   7: $	4 Xugsl33 	
 
  7K $	 Xugsl33 	
 
4  "6"	" " $7$	$ $ :4:	4	4: :!47L!L $ }%, % $	
 
r:   r=   )9__doc__r   r   collections.abcr   typesr   typingr   r   r   r   r	   r
   r4   _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_TIMEOUTr=   r9   r:   r;   <module>r     s    #  
 $  B B  1 R R ) 7	 	 	 E   w)w#& m44QUW t4 ; ; !;
 ,tdK sgk2 sr:   