
    q	h}/                       S SK Jr  S SKrS SKrS SKrS SKJr  S SKJr  S SK	J
r
JrJrJr  SSKJr  SSKJr  SS	KJr  SS
KJr  SSKJr  S SK	Jr  \(       a  SSKJr  Sr\ " S S5      5       r\ " S S\5      5       r " S S5      r \ " S S\5      5       r! " S S5      r" " S S5      r# " S S\#5      r$ " S S\#5      r%\\ \&/S4   r'\\"\&/S4   r(g)    )annotationsN)Callable)	dataclass)AsyncIteratorOptionalDictList   )
DataStream)ffi_pb2)room_pb2)	FfiClient)
split_utf8)TYPE_CHECKING)LocalParticipanti:  c                  R    \ rS rSr% S\S'   S\S'   S\S'   S\S'   S\S	'   S
\S'   Srg)BaseStreamInfo%   str	stream_id	mime_typetopicint	timestampzOptional[int]sizeOptional[Dict[str, str]]
attributes N__name__
__module____qualname____firstlineno____annotations____static_attributes__r       I/var/www/html/env/lib/python3.13/site-packages/livekit/rtc/data_stream.pyr   r   %   s"    NNJN
((r&   r   c                       \ rS rSr% S\S'   Srg)TextStreamInfo/   z	List[str]attachmentsr   Nr   r   r&   r'   r)   r)   /   s    r&   r)   c                  l    \ rS rSr    SS jrSS jrSS jrSS jrSS jr\	SS j5       r
SS jrS	rg
)TextStreamReader4   c                0   Xl         [        UR                  UR                  UR                  UR
                  UR                  [        UR                  5      [        UR                  R                  5      S9U l        [        R                  " 5       U l        g )Nr   r   r   r   r   r   r+   )_headerr)   r   r   r   r   total_lengthdictr   listtext_headerattached_stream_ids_infoasyncioQueue_queue)selfheaders     r'   __init__TextStreamReader.__init__5   ss     #&&&&,,&&$$F--.V//CCD

 ELMMOr&   c                V   #    U R                   R                  U5      I S h  vN   g  N7fNr:   putr;   chunks     r'   _on_chunk_update!TextStreamReader._on_chunk_updateE        kkooe$$$   )')c                  #    U R                   R                  =(       d    0 U R                   l        U R                   R                  R                  UR                  5        U R                  R	                  S 5      I S h  vN   g  N7fr@   infor   updater:   rB   r;   trailers     r'   _on_stream_close!TextStreamReader._on_stream_closeH   T     #yy339r				##G$6$67kkood###   A<B>B?Bc                    U $ r@   r   r;   s    r'   	__aiter__TextStreamReader.__aiter__M       r&   c                   #    U R                   R                  5       I S h  vN nUc  [        eUR                  R	                  5       nU$  N)7fr@   )r:   getStopAsyncIterationcontentdecode)r;   item
decodedStrs      r'   	__anext__TextStreamReader.__anext__P   s@     [[__&&<$$\\((*
	 's   AA
*Ac                    U R                   $ r@   r7   rT   s    r'   rK   TextStreamReader.infoW       zzr&   c                :   #    SnU   S h  vN nX-  nM   N

 U$ 7f)N r   )r;   final_stringrD   s      r'   read_allTextStreamReader.read_all[   s)      	"%!L	"4s   r1   r7   r:   N)r<   proto_DataStream.HeaderreturnNonerD   zproto_DataStream.ChunkrN   zproto_DataStream.Trailer)rl   zAsyncIterator[str])rl   r   rl   r)   )r    r!   r"   r#   r=   rE   rO   rU   r_   propertyrK   rh   r%   r   r&   r'   r-   r-   4   sI    T'T 
T %$
  r&   r-   c                       \ rS rSr% S\S'   Srg)ByteStreamInfob   r   namer   Nr   r   r&   r'   rs   rs   b   s    
Ir&   rs   c                  ^    \ rS rSrS
SS jjrSS jrSS jrSS jrSS jr\	SS j5       r
Srg	)ByteStreamReaderg   c           
         Xl         [        UR                  UR                  UR                  UR
                  UR                  [        UR                  5      UR                  R                  S9U l        [        R                  " U5      U l        g )Nr   r   r   r   r   r   ru   )r1   rs   r   r   r   r   r2   r3   r   byte_headerru   r7   r8   r9   r:   )r;   r<   capacitys      r'   r=   ByteStreamReader.__init__h   sp    #&&&&,,&&$$F--.##((

 ELMMRZD[r&   c                V   #    U R                   R                  U5      I S h  vN   g  N7fr@   rA   rC   s     r'   rE   !ByteStreamReader._on_chunk_updateu   rG   rH   c                  #    U R                   R                  =(       d    0 U R                   l        U R                   R                  R                  UR                  5        U R                  R	                  S 5      I S h  vN   g  N7fr@   rJ   rM   s     r'   rO   !ByteStreamReader._on_stream_closex   rQ   rR   c                    U $ r@   r   rT   s    r'   rU   ByteStreamReader.__aiter__}   rW   r&   c                |   #    U R                   R                  5       I S h  vN nUc  [        eUR                  $  N7fr@   )r:   rY   rZ   r[   )r;   r]   s     r'   r_   ByteStreamReader.__anext__   s2     [[__&&<$$||	 's   <:<c                    U R                   $ r@   rb   rT   s    r'   rK   ByteStreamReader.info   rd   r&   rj   N)r   )r<   rk   r|   r   rl   rm   rn   ro   )rl   zAsyncIterator[bytes])rl   bytesrl   rs   )r    r!   r"   r#   r=   rE   rO   rU   r_   rq   rK   r%   r   r&   r'   rw   rw   g   s0    \%$
  r&   rw   c                  |    \ rS rSrS0 SSSSS4               SS jjrS rSS jrSS jrSSS.SS	 jjrS
r	g)BaseStreamWriter   rf   Nc	           	     n   Xl         Uc  [        [        R                  " 5       5      n[	        [
        R
                  R                  5       R                  5       S-  5      n	[        R                  " UU	UUUUS9U l
        SU l        Xpl        U=(       d    U R                   R                  U l        SU l        g )Ni  )r   r   r   r   r   r2   r   F)_local_participantr   uuiduuid4r   datetimenowr   proto_DataStreamHeaderr1   _next_chunk_index_destination_identitiesidentity_sender_identity_closed)
r;   local_participantr   r   r   
total_sizer   destination_identitiessender_identityr   s
             r'   r=   BaseStreamWriter.__init__   s     #4DJJL)I))--/99;dBC	'..!#
 '('=$ / S43J3J3S3Sr&   c           	       ^#    [         R                  " [        R                  " U R                  U R
                  R                  R                  U R                  U R                  S9S9n[        R                  R                  R                  5       n [        R                  R                  U5      mUR                  U4S j5      I S h  vN n[        R                  R                  R!                  U5        UR"                  R$                  (       a  ['        UR"                  R$                  5      eg  Nh! [        R                  R                  R!                  U5        f = f7f)N)r<   local_participant_handler   r   )send_stream_headerc                ^   > U R                   R                  TR                   R                  :H  $ r@   )r   async_ideresps    r'   <lambda>/BaseStreamWriter._send_header.<locals>.<lambda>   s"    !..774;R;R;[;[[r&   )	proto_ffi
FfiRequest
proto_roomSendStreamHeaderRequestr1   r   _ffi_handlehandler   r   r   instancequeue	subscriberequestwait_forunsubscriber   errorConnectionError)r;   reqr   cbr   s       @r'   _send_headerBaseStreamWriter._send_header   s    "")AA||)-)@)@)L)L)S)S'+'C'C $ 5 5	 
 ""((224	8%%--c2D+0>>[, &B $$007  &&!""7"7"="=>> '& $$007s1   BE"7D4 	D2
D4 A$E"2D4 4+EE"c           	       ^#    U R                   (       a  [        SU 35      e[        R                  " [        R
                  " UU R                  R                  R                  U R                  R                  U R                  S9S9n[        R                  R                  R                  5       n [        R                  R                  U5      mUR!                  U4S j5      I S h  vN n[        R                  R                  R#                  U5        UR$                  R&                  (       a  [)        UR$                  R&                  5      eg  Nh! [        R                  R                  R#                  U5        f = f7f)Nz*Cannot send chunk after stream is closed: )rD   r   r   r   )send_stream_chunkc                ^   > U R                   R                  TR                   R                  :H  $ r@   )r   r   r   s    r'   r   .BaseStreamWriter._send_chunk.<locals>.<lambda>   s"    !--66$:P:P:Y:YYr&   )r   RuntimeErrorr   r   r   SendStreamChunkRequestr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r;   rD   r   r   r   r   s        @r'   _send_chunkBaseStreamWriter._send_chunk   s$    <<!KE7STT""(??)-)@)@)L)L)S)S $ 7 7 @ @'+'C'C	
 ""((224	8%%--c2D+0>>Y, &B $$007%%!""6"6"<"<== && $$007s1   B-F17E (E)E -A$FE +E>>Fc                  ^#    [         R                  " [        R                  " UU R                  R
                  R                  U R                  R                  S9S9n[        R                  R                  R                  5       n [        R                  R                  U5      mUR                  U4S j5      I S h  vN n[        R                  R                  R                  U5        UR                  R                   (       a  [#        UR$                  R                   5      eg  Nh! [        R                  R                  R                  U5        f = f7f)N)rN   r   r   )send_stream_trailerc                ^   > U R                   R                  TR                   R                  :H  $ r@   )r   r   r   s    r'   r   0BaseStreamWriter._send_trailer.<locals>.<lambda>   s"    !//88D<T<T<]<]]r&   )r   r   r   SendStreamTrailerRequestr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r;   rN   r   r   r   r   s        @r'   _send_trailerBaseStreamWriter._send_trailer   s    "" * C C)-)@)@)L)L)S)S $ 7 7 @ @!
 ""((224	8%%--c2D+0>>], &B $$007%%!""8"8">">?? && $$007s1   BE7D) >D'?D) A$E'D) )+EE)reasonr   c                  #    U R                   (       a  [        S5      eSU l         U R                  [        R                  " U R
                  R                  XS9S9I S h  vN   g  N7f)NzStream already closedT)r   r   r   )rN   )r   r   r   r   Trailerr1   r   )r;   r   r   s      r'   acloseBaseStreamWriter.aclose   sY     <<677  $,,,,00 ! 
 	
 	
s   AA'A% A')r   r   r1   r   r   r   )r   r   r   r   r   r   r   
str | Noner   
int | Noner   r   r   Optional[List[str]]r   r   rn   ro   )r   r   r   r   )
r    r!   r"   r#   r=   r   r   r   r   r%   r   r&   r'   r   r      s     /1 $!%6:&*+  -	
    !4 $8?,>0@* -/W[ 
 
r&   r   c                     ^  \ rS rSrS0 SSSSSS.                 S	U 4S jjjrS
S jr\SS j5       rSrU =r	$ )TextStreamWriter   rf   N)r   r   r   r   reply_to_idr   r   c                 > [         T	U ]  UUUUUSUUS9  [        R                  R                  U R
                  R                  l        U(       a  X`R
                  R                  l        [        U R
                  R                  U R
                  R                  U R
                  R                  U R
                  R                  U R
                  R                  [        U R
                  R                   5      [#        U R
                  R                  R$                  5      S9U l        [(        R*                  " 5       U l        g )Nz
text/plain)r   r   r   r0   )superr=   r   OperationTypeCREATEr1   r5   operation_typereply_to_stream_idr)   r   r   r   r   r2   r3   r   r4   r6   r7   r8   Lock_write_lock)
r;   r   r   r   r   r   r   r   r   	__class__s
            r'   r=   TextStreamWriter.__init__   s     	"#9+ 	 		
 3C2P2P2W2W  /:ELL$$7#ll,,ll,,,,$$ll,,**DLL334T\\55IIJ

 #<<>r&   c                  #    U R                    IS h  vN   [        U[        5       Hi  nUnU R                  nU =R                  S-  sl        [        R
                  " U R                  R                  UUS9nU R                  U5      I S h  vN   Mk     S S S 5      IS h  vN   g  N N N	! , IS h  vN  (       d  f       g = f7f)Nr
   r   chunk_indexr[   )	r   r   STREAM_CHUNK_SIZEr   r   Chunkr1   r   r   )r;   textrD   r[   r   	chunk_msgs         r'   writeTextStreamWriter.write  s     ####D*;<"44&&!+&,22"ll44 +#	
 &&y111 = $## 2 $###sW   CB&CA5B,B(B,C B*!C(B,*C,C2B53C?Cc                    U R                   $ r@   rb   rT   s    r'   rK   TextStreamWriter.info)  rd   r&   r7   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rl   rm   )r   r   rp   
r    r!   r"   r#   r=   r   rq   rK   r%   __classcell__r   s   @r'   r   r      s    
 /1 $!%"&6:&*"*+"* 	"*
 -"* "* "*  "* !4"* $"* 
"* "*H2  r&   r   c                  ~   ^  \ rS rSrSSSSSSS.                 S
U 4S jjjrSS jr\SS j5       rS	rU =r	$ )ByteStreamWriteri.  rf   Nzapplication/octet-stream)r   r   r   r   r   r   c          
       > [         T	U ]  UUUUUUUS9  X R                  R                  l        [        U R                  R                  U R                  R                  U R                  R                  U R                  R                  U R                  R                  [        U R                  R                  5      U R                  R                  R                  S9U l        [        R                  " 5       U l        g )N)r   r   rz   )r   r=   r1   r{   ru   rs   r   r   r   r   r2   r3   r   r7   r8   r   r   )
r;   r   ru   r   r   r   r   r   r   r   s
            r'   r=   ByteStreamWriter.__init__/  s     	#9 	 	
 )-  %#ll,,ll,,,,$$ll,,**DLL334))..

 #<<>r&   c                  #    U R                    IS h  vN   [        S[        U5      [        5       Vs/ s H  o!X"[        -    PM     nnU He  nU =R                  S-  sl        [
        R                  " U R                  R                  U R                  US9nU R                  U5      I S h  vN   Mg     S S S 5      IS h  vN   g  Ns  snf  N  N! , IS h  vN  (       d  f       g = f7f)Nr   r
   r   )
r   rangelenr   r   r   r   r1   r   r   )r;   dataichunked_datarD   r   s         r'   r   ByteStreamWriter.writeP  s     ###9>q#d)M^9_9_AQ../9_   &&&!+&,22"ll44 $ 6 6!	
 &&y111 & $## 2 $###sb   C+CC+CCA$C,C-C5C+ CC+CC+C(CC($C+c                    U R                   $ r@   rb   rT   s    r'   rK   ByteStreamWriter.info_  rd   r&   r   )r   r   ru   r   r   r   r   r   r   r   r   r   r   r   r   r   rl   rm   )r   r   r   r   r   s   @r'   r   r   .  s     /3 $!%36:*+* 	*
 * -* * * * !4* 
* *B2  r&   r   ))
__future__r   r8   r   r   collections.abcr   dataclassesr   typingr   r   r   r	   _proto.room_pb2r   r   _protor   r   r   r   _ffi_clientr   _utilsr   r   participantr   r   r   r)   r-   rs   rw   r   r   r   r   TextStreamHandlerByteStreamHandlerr   r&   r'   <module>r     s    #    $ ! 6 6 ; ( * "    -  ) ) ) ^  + +\ ^  " "Jh
 h
V4' 4n3' 3l .4d:; .4d:; r&   