
    g                         U d Z ddl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 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)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           N/var/www/openai/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   zlib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+   r/   r0   r   rsvcompressobj
msg_lengthr   mask_bit
first_byteheader
header_lenmasks                r,   
send_framezWebSocketWriter.send_frameD   sv     ==&9??":,-PQQ
  6A: C"55h?(((,(?(?(ND%"// "**733##)-D%%d>O>O 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 % +y 4~ 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)r0   NT)
isinstancestrencoderN   r   r   r9   r'   )r+   rU   r/   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	[4z
3 
> 
	! 	!U5#:5F 	!QU 	!r.   r   )"r^   r`   r   r<   	functoolsr   typingr   r   r   r   base_protocolr	   client_exceptionsr
   compression_utilsr   helpersr   r   r   r   r   r   r   r   modelsr   r   r   rc   __annotations__rT   r   re   r.   r,   <module>rn      sY    +     . . ( : .	 	 	 3!uSz ! !) M! M!r.   