
    >OOfd                         d dl Z d dlZd dlmZ d dlmZmZmZ d dlm	Z	m
Z
 d dlmZ edegdf   Zedegdf   Zedgdf   Zedeegdf   Z G d de      Z G d	 d
e      Z G d d      Zy)    N)IntEnum)CallableOptionalTuple)	CurlECode
CurlWsFlag)	CurlError	WebSocketc                   D    e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdZdZdZy)WsCloseCodei  i  i  i    i  i  i  i  i  i  i  i  i  N)__name__
__module____qualname__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     ^/var/www/premiumrankchecker/venv/lib/python3.12/site-packages/curl_cffi/requests/websockets.pyr   r      sL    	BJNGLONOOKr    r   c                       e Zd Zy)WebSocketErrorN)r   r   r   r   r    r!   r#   r#       s    r    r#   c            
       2   e Zd Z	 	 	 	 ddee   dee   dee   dee   fdZd Z	de
eef   fd	Zej                  fd
edefdZd Zej&                  dfdedefdZed        Zde
eef   fdZej                  fd
edefdZej&                  dfdedefdZy)r
   N
on_messageon_erroron_openon_closec                 t    || _         || _        || _        || _        || _        || _        d| _        d | _        y )NT)sessioncurlr%   r&   r'   r(   keep_running_loop)selfr*   r+   r%   r&   r'   r(   s          r!   __init__zWebSocket.__init__%   s=     	$   
r    c                 6    | j                   j                         S N)r+   ws_recvr.   s    r!   recv_fragmentzWebSocket.recv_fragment7   s    yy  ""r    returnc                 `   g }d}	 	 | j                   j                         \  }}|j                  }|j                  |       |j                  dk(  r|t
        j                  z  dk(  rnbdj                  |      |fS # t        $ r)}|j                  t        j                  k(  rn Y d}~Ad}~ww xY w)z
        Receive a frame as bytes.

        libcurl split frames into fragments, so we have to collect all the chunks for
        a frame.
        r   Nr    )r+   r2   flagsappend	bytesleftr   CONTr	   coder   AGAINjoin)r.   chunksr7   chunkframees         r!   recvzWebSocket.recv:   s     
#yy002ue$??a'EJOO,Cq,H  xx&&  66Y__, s   AA; ;	B-B((B-payloadr7   c                 :    | j                   j                  ||      S )zSend a data frame)r+   ws_sendr.   rC   r7   s      r!   sendzWebSocket.sendS   s    yy  %00r    c                    | j                   r| j                  |        | j                  r	 | j                         \  }}| j                  r| j                  | |       |t        j
                  z  rd| _        t        |      dk  rt        j                  }d}nY	 t        j                  d|      d   }|dd j                         }|dk  r'|t        vs|dk(  rt        d	t        j                        | j"                  r| j#                  | ||       | j                  ryy# t        $ r t        d
t        j                        t         $ r t        dt        j                        w xY w# t        $ rC}| j%                  |j&                         | j(                  r| j)                  | |       Y d}~d}~wt*        $ r(}| j(                  r| j)                  | |       Y d}~d}~ww xY w)zx
        libcurl automatically handles pings and pongs.

        ref: https://curl.se/libcurl/c/libcurl-ws.html
        F    !Hr   Ni  r   zInvalid close codezInvalid close messagezInvalid close frame)r'   r,   rB   r%   r   CLOSElenr   r   structunpack_fromdecoder#   r   UnicodeDecodeErrorr   	Exceptionr(   closer;   r&   r	   )r.   msgr7   r;   reasonrA   s         r!   run_foreverzWebSocket.run_foreverW   s    <<LL !+!YY[
U??OOD#.:+++(-D%3x!|*22!#"#)#5#5dC#@#CD%(W^^%5F  $d{K0G4SW<&4$8+:T:T'" !" }}dD&93   2 d"01H+JbJb"cc( d"01FHbHb"ccd " + 

166"==MM$* +==MM$*+s>   A,E' ,D AE' AE$$E' '	G"09F..G":GG"r    r;   messagec                     t        j                  d|      |z   }| j                  |t        j                         d| _        | j                  j                          y )NrK   F)rN   packrG   r   rL   r,   r+   rS   )r.   r;   rW   rT   s       r!   rS   zWebSocket.close   sA    kk$%/		#z''(!		r    c                 d    | j                   t        j                         | _         | j                   S r1   )r-   asyncioget_running_loopr3   s    r!   loopzWebSocket.loop   s&    :: 113DJzzr    c                 j   K   | j                   j                  d | j                         d {   S 7 wr1   )r]   run_in_executorrB   r3   s    r!   arecvzWebSocket.arecv   s'     YY..tTYY????s   *313c                 n   K   | j                   j                  d | j                  ||       d {   S 7 wr1   )r]   r_   rG   rF   s      r!   asendzWebSocket.asend   s+     YY..tTYYOOOOs   ,535c                    K   | j                   j                  d | j                  ||       d {    | j                  j	                          | j
                  j                  | j                         y 7 Dwr1   )r]   r_   rS   r+   resetr*   	push_curl)r.   r;   rW   s      r!   aclosezWebSocket.aclose   sR     ii''djj$HHH		tyy) 	Is   ,A5A3AA5)NNNN)r   r   r   r   ON_MESSAGE_T
ON_ERROR_T	ON_OPEN_T
ON_CLOSE_Tr/   r4   r   bytesintrB   r   BINARYrG   rV   r   r   rS   propertyr]   r`   rb   rf   r   r    r!   r
   r
   $   s   
 .2)-'+)- \*	
 :& )$ :&$#'eE3J' '2 8B7H7H 1E 1* 1,+\ !, #    
@U5#:. @ ?I>O>O P5 P P (3~~ * * *r    )r[   rN   enumr   typingr   r   r   curl_cffi.constr   r   curl_cffi.curlr	   rk   rg   rh   ri   rl   strrj   r   r#   r
   r   r    r!   <module>rt      s       , , 1 $e,d23{I.45
k]D()	{C-t34
' "	Y 	w* w*r    