
    vKg                         S SK r S SKrS SKJr  S SKJrJrJr  SSKJ	r	J
r
  SSKJr  \S\/S4   r\S\/S4   r\S/S4   r\S\\/S4   r " S S	\5      r " S
 S\5      r " S S5      rg)    N)IntEnum)CallableOptionalTuple   )	CurlECode
CurlWsFlag)	CurlError	WebSocketc                   L    \ rS rSrSrSrSrSrSrSr	Sr
S	rS
rSrSrSrSrSrSrg)WsCloseCode   i  i  i  i    i  i  i  i  i  i  i  i  i   N)__name__
__module____qualname____firstlineno__OK
GOING_AWAYPROTOCOL_ERRORUNSUPPORTED_DATAUNKNOWNABNORMAL_CLOSUREINVALID_DATAPOLICY_VIOLATIONMESSAGE_TOO_BIGMANDATORY_EXTENSIONINTERNAL_ERRORSERVICE_RESTARTTRY_AGAIN_LATERBAD_GATEWAY__static_attributes__r       ]/var/www/highfloat_scraper/venv/lib/python3.13/site-packages/curl_cffi/requests/websockets.pyr   r      sL    	BJNGLONOOKr$   r   c                       \ rS rSrSrg)WebSocketError    r   N)r   r   r   r   r#   r   r$   r%   r'   r'       s    r$   r'   c            
       R   \ rS rSr    SS\\   S\\   S\\   S\\   4S jjr	S r
S	\\\4   4S
 jr\R                   4S\S\4S jjrS r\R(                  S4S\S\4S jjr\S 5       rS	\\\4   4S jr\R                   4S\S\4S jjr\R(                  S4S\S\4S jjrSrg)r   $   N
on_messageon_erroron_openon_closec                 h    Xl         X l        X0l        X@l        XPl        X`l        SU l        S U l        g )NT)sessioncurlr+   r,   r-   r.   keep_running_loop)selfr0   r1   r+   r,   r-   r.   s          r%   __init__WebSocket.__init__%   s1     	$   
r$   c                 6    U R                   R                  5       $ N)r1   ws_recvr4   s    r%   recv_fragmentWebSocket.recv_fragment7   s    yy  ""r$   returnc                 f   / nSn  U R                   R                  5       u  p4UR                  nUR                  U5        UR                  S:X  a  U[
        R                  -  S:X  a  OMd  SR                  U5      U4$ ! [         a)  nUR                  [        R                  :X  a   SnANBe SnAff = f)zs
Receive a frame as bytes.

libcurl split frames into fragments, so we have to collect all the chunks for
a frame.
r   Nr$   )r1   r9   flagsappend	bytesleftr	   CONTr
   coder   AGAINjoin)r4   chunksr?   chunkframees         r%   recvWebSocket.recv:   s     
#yy002e$??a'EJOO,Cq,H  xx&&  66Y__,	s   A A= =
B0B+*B++B0payloadr?   c                 8    U R                   R                  X5      $ )zSend a data frame)r1   ws_sendr4   rL   r?   s      r%   sendWebSocket.sendS   s    yy  00r$   c                 >   U R                   (       a  U R                  U 5        U R                  (       Ga   U R                  5       u  pU R                  (       a  U R                  X5        U[        R
                  -  (       a  SU l        [        U5      S:  a  [        R                  nSnO^ [        R                  " SU5      S   nUSS R                  5       nUS:  a*  U[        ;  d  US:X  a  [        S	[        R                  5      eU R"                  (       a  U R#                  XU5        U R                  (       a  GM  gg! [         a   n[        S
[        R                  5      UeSnAf[          a   n[        S[        R                  5      UeSnAff = f! [         aG  nU R%                  UR&                  5        U R(                  (       a  U R)                  X5         SnANSnAf[*         a,  nU R(                  (       a  U R)                  X5         SnANSnAff = f)z`
libcurl automatically handles pings and pongs.

ref: https://curl.se/libcurl/c/libcurl-ws.html
Fr    !Hr   Ni  r   zInvalid close codezInvalid close messagezInvalid close frame)r-   r2   rJ   r+   r	   CLOSElenr   r   structunpack_fromdecoder'   r   UnicodeDecodeErrorr   	Exceptionr.   closerC   r,   r
   )r4   msgr?   rC   reasonrI   s         r%   run_foreverWebSocket.run_foreverW   s    <<LL %+!YY[
??OOD.:+++(-D%3x!|*22!#"#)#5#5dC#@#CD%(W^^%5F  $d{K0G4SW<&4$8+:T:T'" !" }}d&9;   2 %"0 79Q9Q##$%  ) %"0 5{7Q7Q##$%% " + 

166"==MM$* +==MM$*+sU   A5F ,-E AF 
FE''F4FFF 
H!=G##H0"HHr$   rC   messagec                     [         R                  " SU5      U-   nU R                  U[        R                  5        SU l        U R                  R                  5         g )NrT   F)rW   packrP   r	   rU   r2   r1   r\   )r4   rC   ra   r]   s       r%   r\   WebSocket.close   sA    kk$%/		#z''(!		r$   c                 h    U R                   c  [        R                  " 5       U l         U R                   $ r8   )r3   asyncioget_running_loopr:   s    r%   loopWebSocket.loop   s&    :: 113DJzzr$   c                 j   #    U R                   R                  S U R                  5      I S h  vN $  N7fr8   )rh   run_in_executorrJ   r:   s    r%   arecvWebSocket.arecv   s&     YY..tTYY????s   *313c                 l   #    U R                   R                  S U R                  X5      I S h  vN $  N7fr8   )rh   rk   rP   rO   s      r%   asendWebSocket.asend   s(     YY..tTYYOOOOs   +424c                    #    U R                   R                  S U R                  X5      I S h  vN   U R                  R	                  5         U R
                  R                  U R                  5        g  ND7fr8   )rh   rk   r\   r1   resetr0   	push_curl)r4   rC   ra   s      r%   acloseWebSocket.aclose   sO     ii''djj$HHH		tyy) 	Is   +A4A2AA4)r3   r1   r2   r.   r,   r+   r-   r0   )NNNN)r   r   r   r   r   ON_MESSAGE_T
ON_ERROR_T	ON_OPEN_T
ON_CLOSE_Tr5   r;   r   bytesintrJ   r	   BINARYrP   r_   r   r   r\   propertyrh   rl   ro   rt   r#   r   r$   r%   r   r   $   s   
 .2)-'+)- \*	
 :& )$ :&$#'eE3J' '2 8B7H7H 1E 1* 10+d !, #    
@U5#:. @ ?I>O>O P5 P P (3~~ * * * *r$   )rf   rW   enumr   typingr   r   r   constr   r	   r1   r
   rz   rv   rw   rx   r{   strry   r   r'   r   r   r$   r%   <module>r      s       , , ) e,d23{I.45
k]D()	{C-t34
' "	Y 	{* {*r$   