
    /j                    p    S SK Jr  S SKrS SKrS SKr " S S\5      r " S S5      rS
S jr " S S	5      r	g)    )annotationsNc                      \ rS rSrSrSrg)DuplexClosed   z6Exception raised when the duplex connection is closed. N)__name__
__module____qualname____firstlineno____doc____static_attributes__r       U/app/agent/.venv/lib/python3.13/site-packages/livekit/agents/utils/aio/duplex_unix.pyr   r      s    @r   r   c                  h    \ rS rSr S	         S
S jjr\SS j5       rSS jrSS jrSS jr	Sr
g)_AsyncDuplex   Nc                4    X@l         Xl        X l        X0l        g N)_loop_sock_reader_writer)selfsockreaderwriterloops        r   __init___AsyncDuplex.__init__   s     

r   c                   #    [         R                  " 5       n[         R                  " U S9I S h  vN u  p#[        XX15      $  N7f)Nr   )asyncioget_running_loopopen_connectionr   )r   r   r   r   s       r   open_AsyncDuplex.open   s;     '')&66DAAD&77 Bs   -AAAc                8  #     U R                   R                  S5      I S h  vN n[        R                  " SU5      S   nU R                   R                  U5      I S h  vN $  NA N! [        [
        [        R                  4 a  n[        5       UeS nAff = f7fN   !Ir   )	r   readexactlystructunpackOSErrorEOFErrorr"   IncompleteReadErrorr   r   	len_byteslenes       r   
recv_bytes_AsyncDuplex.recv_bytes!   s     		("ll66q99I--i03C11#666 :6''
 	(
 .a'	(sJ   BA( A$<A( A& A( #B$A( &A( (BBBBc                <  #     [         R                  " S[        U5      5      nU R                  R	                  U5        U R                  R	                  U5        U R                  R                  5       I S h  vN   g  N! [         a  n[        5       UeS nAff = f7fNr*   )r,   packr3   r   writedrainr.   r   r   datar2   r4   s       r   
send_bytes_AsyncDuplex.send_bytes-   sq     	(D#d)4ILLy)LLt$,,$$&&& 	(.a'	(s;   BA3A? 7A=8A? <B=A? ?
B	BBBc                   #     U R                   R                  5         U R                   R                  5       I S h  vN   U R                  R                  5         g  N! [         a  n[        5       UeS nAff = f7fr   )r   closewait_closedr   r.   r   r   r4   s     r   aclose_AsyncDuplex.aclose6   s^     	(LL ,,**,,,JJ - 	(.a'	(s8   A:7A AA A:A 
A7'A22A77A:)r   r   r   r   r   )
r   socket.socketr   zasyncio.StreamReaderr   zasyncio.StreamWriterr   z asyncio.AbstractEventLoop | NonereturnNone)r   rF   rG   r   rG   bytesr=   rJ   rG   rH   rG   rH   )r   r	   r
   r   r   staticmethodr%   r5   r>   rD   r   r   r   r   r   r      s_     26

 %
 %	

 /
 

 8 8

(((r   r   c                    [        5       n[        U5      U:  aP  U R                  U[        U5      -
  5      nU(       d
  [        5       eUR	                  U5        [        U5      U:  a  MP  [        U5      $ r   )	bytearrayr3   recvr/   extendrJ   )r   	num_bytesr=   packets       r   _read_exactlyrT   ?   s]    ;D
d)i
9s4y01*F	 d)i

 ;r   c                  Z    \ rS rSrS
S jr\SS j5       rSS jrSS jrSS jr	SS jr
Srg	)_DuplexI   c                    Xl         g r   r   r   r   s     r   r   _Duplex.__init__J   s    +/
r   c                    [        U 5      $ r   )rV   r!   s    r   r%   _Duplex.openM   s    t}r   c                   U R                   c
  [        5       e [        U R                   S5      n[        R                  " SU5      S   n[        U R                   U5      $ ! [
        [        4 a  n[        5       UeS nAff = fr(   )r   r   rT   r,   r-   r.   r/   r1   s       r   r5   _Duplex.recv_bytesQ   sn    ::. 	(%djj!4I--i03C S11" 	(.a'	(s   AA A?/A::A?c                   U R                   c
  [        5       e [        R                  " S[	        U5      5      nU R                   R                  U5        U R                   R                  U5        g ! [         a  n[        5       UeS nAff = fr8   )r   r   r,   r9   r3   sendallr.   r<   s       r   r>   _Duplex.send_bytes\   sk    ::. 	(D#d)4IJJy)JJt$ 	(.a'	(s   AA0 0
B
:BB
c                Z    U R                   c
  [        5       eU R                   nS U l         U$ r   )r   r   rZ   s     r   detach_Duplex.detachg   s)    ::. zz
r   c                     U R                   b"  U R                   R                  5         S U l         g g ! [         a  n[        5       UeS nAff = fr   )r   rA   r.   r   rC   s     r   rA   _Duplex.closeo   sI    	(zz%

  "!
 &  	(.a'	(s   .2 
AAArY   N)r   rF   rG   rH   )r   rF   rG   rV   rI   rK   )rG   rF   rL   )r   r	   r
   r   r   rM   r%   r5   r>   rd   rA   r   r   r   r   rV   rV   I   s/    0  	(	((r   rV   )r   rF   rR   intrG   rJ   )

__future__r   r"   socketr,   	Exceptionr   r   rT   rV   r   r   r   <module>rl      s7    "   	9 	.( .(b,( ,(r   