
    ;3h                         U 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
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Zee   ed<   dZ  G d d      Z!y)z%WebSocket protocol versions 13 and 8.    N)partial)AnyFinalOptionalUnion   )BaseProtocol)ClientConnectionResetError)ZLibBackendZLibCompressor   )MASK_LENMSG_SIZEPACK_CLOSE_CODE	PACK_LEN1	PACK_LEN2	PACK_LEN3PACK_RANDBITSwebsocket_mask)WS_DEFLATE_TRAILING	WSMsgType   DEFAULT_LIMITi   c                       e Zd ZdZde ej                         ddddedej                  de
ded	ej                  d
ede
ddfdZ	 ddeded
ee   ddfdZd
edefdZddedeeef   ddfdZy)WebSocketWritera3  WebSocket writer.

    The writer is responsible for sending messages to the client. It is
    created by the protocol when a connection is established. The writer
    should avoid implementing any application logic and should only be
    concerned with the low-level details of the WebSocket protocol.
    Fr   )use_masklimitrandomcompress
notakeoverprotocol	transportr   r   r   r   r    returnNc                    || _         || _        || _        t        |j                  d      | _        || _        || _        d| _        || _	        d| _
        d| _        y)zInitialize a WebSocket writer.    Fr   N)r!   r"   r   r   getrandbitsget_random_bitsr   r    _closing_limit_output_size_compressobj)selfr!   r"   r   r   r   r   r    s           Y/var/www/html/audio-gradio/venv/lib/python3.12/site-packages/aiohttp/_websocket/writer.py__init__zWebSocketWriter.__init__,   sZ     !" &v'9'92> $!%    messageopcodec                   K   | j                   r|t        j                  z  st        d      d}|s| j                  r|dk  rd}|r| j                  |      }n8| j                  s | j                  | j                        | _        | j                  }|j	                  |       d{   |j                  | j                  rt        j                  nt        j                        z   j                  t              }t        |      }| j                  }|rdnd}d|z  |z  }	|dk  rt!        |	||z        }
d}n*|d	k  rt#        |	d|z  |      }
d
}nt%        |	d|z  |      }
d}| j&                  j)                         rt        d      |rkt+        | j-                               }t/        |      }t1        ||       | j&                  j3                  |
|z   |z          | xj4                  t6        z  c_        n^|t8        kD  r7| j&                  j3                  |
       | j&                  j3                  |       n| j&                  j3                  |
|z          | xj4                  ||z   z  c_        | j4                  | j:                  kD  rAd| _        | j<                  j>                  r#| j<                  jA                          d{    yyy7 7 
w)z<Send a frame over the websocket with message as its payload.z!Cannot write to closing transportr      @   N   ~   r   r         
   )!r(   r   CLOSEr
   r   _make_compress_objr+   flushr    r   Z_FULL_FLUSHZ_SYNC_FLUSHremovesuffixr   lenr   r   r   r   r"   
is_closingr   r'   	bytearrayr   writer*   r   r   r)   r!   _paused_drain_helper)r,   r0   r1   r   rsvcompressobj
msg_lengthr   mask_bit
first_byteheader
header_lenmasks                r-   
send_framezWebSocketWriter.send_frameC   sz     ==&9??":,-PQQ
  6A: C"55h?(((,(?(?(ND%"// "**733##  ,,$11 l./  \
==#4 CZ&(
z:+@AFJ%z3>:FFJz3>:FFJ>>$$&,-PQQ  !5!5!78D(G4)NN  $!89)("NN  (NN  )NN  '!12Z*44 t{{* !D}}$$mm11333 % +} 4B 4s%   B"K$K%HK9K:KKc                 D    t        t        j                  | t              S )N)levelwbitsmax_sync_chunk_size)r   r   Z_BEST_SPEEDWEBSOCKET_MAX_SYNC_CHUNK_SIZE)r,   r   s     r-   r;   z"WebSocketWriter._make_compress_obj   s     **) =
 	
r/   codec                    K   t        |t              r|j                  d      }	 | j                  t	        |      |z   t
        j                         d{    d| _        y7 # d| _        w xY ww)z<Close the websocket, sending the specified code and message.zutf-8)r1   NT)
isinstancestrencoderN   r   r   r:   r(   )r,   rU   r0   s      r-   closezWebSocketWriter.close   si     gs#nnW-G	!//%/	 "    !DM	 !DMs.   "A00A$ A"A$ A0"A$ $	A--A0)N)i  r/   )__name__
__module____qualname____doc__r   r   Randomr	   asyncio	Transportboolintr.   bytesr   rN   r   r;   r   rX   rZ    r/   r-   r   r   #   s     " - && $$&
 & & & & & 
&0 FJ]4]4&)]45=c]]4	]4~
3 
> 
	! 	!U5#:5F 	!QU 	!r/   r   )"r^   r`   r   	functoolsr   typingr   r   r   r   base_protocolr	   client_exceptionsr
   compression_utilsr   r   helpersr   r   r   r   r   r   r   r   modelsr   r   r   rc   __annotations__rT   r   re   r/   r-   <module>rn      sV    +    . . ( : ;	 	 	 3!uSz ! !) O! O!r/   