o
    i}/                     @  sX  d dl mZ d dlZd dlZd dlZd dlm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 ddlmZ d dl	mZ erVddlmZ dZeG dd dZeG dd deZG dd dZ eG dd deZ!G dd dZ"G dd dZ#G dd de#Z$G dd de#Z%ee e&gdf Z'ee"e&gdf Z(dS )    )annotationsN)Callable)	dataclass)AsyncIteratorOptionalDictList   )
DataStream)ffi_pb2)room_pb2)	FfiClient)
split_utf8)TYPE_CHECKING)LocalParticipanti:  c                   @  s>   e Zd ZU ded< ded< ded< ded< ded< d	ed
< dS )BaseStreamInfostr	stream_id	mime_typetopicint	timestampzOptional[int]sizeOptional[Dict[str, str]]
attributesN__name__
__module____qualname____annotations__ r    r    Y/var/www/html/livekit_bhavya/venv/lib/python3.10/site-packages/livekit/rtc/data_stream.pyr   %   s   
 r   c                   @     e Zd ZU ded< dS )TextStreamInfoz	List[str]attachmentsNr   r    r    r    r!   r#   /      
 r#   c                   @  sV   e Zd ZdddZdd	d
ZdddZdddZdddZed ddZ	dddZ
dS )!TextStreamReaderheaderproto_DataStream.HeaderreturnNonec              	   C  sD   || _ t|j|j|j|j|jt|jt	|j
jd| _t | _d S )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)selfr'   r    r    r!   __init__5   s   
	zTextStreamReader.__init__chunkproto_DataStream.Chunkc                      | j |I d H  d S Nr5   putr6   r8   r    r    r!   _on_chunk_updateE      z!TextStreamReader._on_chunk_updatetrailerproto_DataStream.Trailerc                   8   | j jpi | j _| j j|j | jd I d H  d S r;   infor   updater5   r=   r6   rA   r    r    r!   _on_stream_closeH      z!TextStreamReader._on_stream_closeAsyncIterator[str]c                 C     | S r;   r    r6   r    r    r!   	__aiter__M      zTextStreamReader.__aiter__r   c                   s,   | j  I d H }|d u rt|j }|S r;   )r5   getStopAsyncIterationcontentdecode)r6   item
decodedStrr    r    r!   	__anext__P   s   
zTextStreamReader.__anext__r#   c                 C     | j S r;   r2   rL   r    r    r!   rE   W      zTextStreamReader.infoc                   s&   d}| 2 z
3 d H W }||7 }q6 |S )N r    )r6   final_stringr8   r    r    r!   read_all[   s   
zTextStreamReader.read_allN)r'   r(   r)   r*   r8   r9   rA   rB   )r)   rJ   )r)   r   r)   r#   )r   r   r   r7   r?   rH   rM   rU   propertyrE   r[   r    r    r    r!   r&   4   s    




r&   c                   @  r"   )ByteStreamInfor   nameNr   r    r    r    r!   r`   b   r%   r`   c                   @  sN   e Zd Zdddd	ZdddZdddZd ddZd!ddZed"ddZ	dS )#ByteStreamReaderr   r'   r(   capacityr   r)   r*   c              	   C  sB   || _ t|j|j|j|j|jt|j|j	j
d| _t|| _d S )Nr   r   r   r   r   r   ra   )r,   r`   r   r   r   r   r-   r.   r   byte_headerra   r2   r3   r4   r5   )r6   r'   rc   r    r    r!   r7   h   s   	zByteStreamReader.__init__r8   r9   c                   r:   r;   r<   r>   r    r    r!   r?   u   r@   z!ByteStreamReader._on_chunk_updaterA   rB   c                   rC   r;   rD   rG   r    r    r!   rH   x   rI   z!ByteStreamReader._on_stream_closeAsyncIterator[bytes]c                 C  rK   r;   r    rL   r    r    r!   rM   }   rN   zByteStreamReader.__aiter__bytesc                   s$   | j  I d H }|d u rt|jS r;   )r5   rO   rP   rQ   )r6   rS   r    r    r!   rU      s
   zByteStreamReader.__anext__r`   c                 C  rV   r;   rW   rL   r    r    r!   rE      rX   zByteStreamReader.infoN)r   )r'   r(   rc   r   r)   r*   r\   r]   )r)   rf   )r)   rg   r)   r`   )
r   r   r   r7   r?   rH   rM   rU   r_   rE   r    r    r    r!   rb   g   s    



rb   c                   @  sT   e Zd Zdi dddddfd!ddZdd Zd"ddZd#ddZdddd$dd ZdS )%BaseStreamWriterrY   Nlocal_participantr   r   r   r   r   r   
str | None
total_size
int | Noner   destination_identitiesOptional[List[str]]sender_identityc	           
      C  sl   || _ |d u rtt }ttj  d }	tj	||	||||d| _
d| _|| _|p/| j j| _d| _d S )Ni  )r   r   r   r   r   r-   r   F)_local_participantr   uuiduuid4r   datetimenowr   proto_DataStreamHeaderr,   _next_chunk_index_destination_identitiesidentity_sender_identity_closed)
r6   rj   r   r   r   rl   r   rn   rp   r   r    r    r!   r7      s    
zBaseStreamWriter.__init__c              	     s   t jtj| j| jjj| j| j	dd}t
jj }zt
j| | fddI d H }W t
jj| nt
jj| w |jjrHt|jjd S )N)r'   local_participant_handlern   rp   )send_stream_headerc                      | j j j jkS r;   )r~   async_iderespr    r!   <lambda>       z/BaseStreamWriter._send_header.<locals>.<lambda>)	proto_ffi
FfiRequest
proto_roomSendStreamHeaderRequestr,   rq   _ffi_handlehandlery   r{   r   instancequeue	subscriberequestwait_forunsubscriber~   errorConnectionError)r6   reqr   cbr    r   r!   _send_header   s&   	
 zBaseStreamWriter._send_headerr8   r9   c              	     s   | j rtd| tjtj|| jjj| jj	| j
dd}tjj }ztj| | fddI d H }W tjj| ntjj| w |jjrRt|jjd S )Nz*Cannot send chunk after stream is closed: )r8   r}   rp   rn   )send_stream_chunkc                   r   r;   )r   r   r   r   r    r!   r      r   z.BaseStreamWriter._send_chunk.<locals>.<lambda>)r|   RuntimeErrorr   r   r   SendStreamChunkRequestrq   r   r   rz   ry   r   r   r   r   r   r   r   r   r   r   )r6   r8   r   r   r   r    r   r!   _send_chunk   s*   	
 zBaseStreamWriter._send_chunkrA   rB   c              	     s   t jtj|| jjj| jjdd}tj	j
 }ztj	| | fddI d H }W tj	j
| ntj	j
| w |jjrFt|jjd S )N)rA   r}   rp   )send_stream_trailerc                   r   r;   )r   r   r   r   r    r!   r      r   z0BaseStreamWriter._send_trailer.<locals>.<lambda>)r   r   r   SendStreamTrailerRequestrq   r   r   rz   r   r   r   r   r   r   r   r   r   r   r   )r6   rA   r   r   r   r    r   r!   _send_trailer   s$   
 zBaseStreamWriter._send_trailer)reasonr   r   c                  s<   | j rtdd| _ | jtj| jj||ddI d H  d S )NzStream already closedT)r   r   r   )rA   )r|   r   r   rv   Trailerr,   r   )r6   r   r   r    r    r!   aclose   s   
zBaseStreamWriter.aclose)rj   r   r   r   r   r   r   rk   rl   rm   r   r   rn   ro   rp   rk   r\   r]   )r   r   r   r   )r   r   r   r7   r   r   r   r   r    r    r    r!   ri      s    

ri   c                      sH   e Zd Zdi ddddddd fddZdddZedddZ  ZS )TextStreamWriterrY   N)r   r   r   rl   reply_to_idrn   rp   rj   r   r   r   r   r   r   rk   rl   rm   r   rn   ro   rp   r)   r*   c          	   
     s   t  j|||||d||d tjj| jj_|r|| jj_t	| jj
| jj| jj| jj| jjt| jjt| jjjd| _t | _d S )Nz
text/plain)r   rn   rp   r+   )superr7   rv   OperationTypeCREATEr,   r0   operation_typereply_to_stream_idr#   r   r   r   r   r-   r.   r   r/   r1   r2   r3   Lock_write_lock)	r6   rj   r   r   r   rl   r   rn   rp   	__class__r    r!   r7      s.   


	zTextStreamWriter.__init__textc              	     s   | j 4 I d H 2 t|tD ] }|}| j}|  jd7  _tj| jj||d}| |I d H  qW d   I d H  d S 1 I d H s@w   Y  d S )Nr	   r   chunk_indexrQ   )	r   r   STREAM_CHUNK_SIZErx   rv   Chunkr,   r   r   )r6   r   r8   rQ   r   	chunk_msgr    r    r!   write  s   .zTextStreamWriter.writer#   c                 C  rV   r;   rW   rL   r    r    r!   rE   )  rX   zTextStreamWriter.info)rj   r   r   r   r   r   r   rk   rl   rm   r   rk   rn   ro   rp   rk   r)   r*   )r   r   r^   r   r   r   r7   r   r_   rE   __classcell__r    r    r   r!   r      s    
$r   c                      sF   e Zd Zdddddddd fddZdddZed ddZ  ZS )!ByteStreamWriterrY   Nzapplication/octet-stream)r   r   r   rl   r   rn   rj   r   ra   r   r   r   r   r   rk   rl   rm   r   rn   ro   r)   r*   c          	   	     sl   t  j|||||||d || jj_t| jj| jj| jj| jj	| jj
t| jj| jjjd| _t | _d S )N)r   rn   rd   )r   r7   r,   re   ra   r`   r   r   r   r   r-   r.   r   r2   r3   r   r   )	r6   rj   ra   r   r   r   rl   r   rn   r   r    r!   r7   /  s(   
	
	zByteStreamWriter.__init__datarg   c              	     s   | j 4 I d H :  fddtdt tD }|D ]}tj| jj| j|d}| 	|I d H  |  jd7  _qW d   I d H  d S 1 I d H sHw   Y  d S )Nc                   s   g | ]
} ||t   qS r    )r   ).0ir   r    r!   
<listcomp>R  s    z*ByteStreamWriter.write.<locals>.<listcomp>r   r   r	   )
r   rangelenr   rv   r   r,   r   rx   r   )r6   r   chunked_datar8   r   r    r   r!   r   P  s   
.zByteStreamWriter.writer`   c                 C  rV   r;   rW   rL   r    r    r!   rE   _  rX   zByteStreamWriter.info)rj   r   ra   r   r   r   r   r   r   rk   rl   rm   r   r   rn   ro   r)   r*   )r   rg   rh   r   r    r    r   r!   r   .  s    
!r   ))
__future__r   r3   rr   rt   collections.abcr   dataclassesr   typingr   r   r   r   _proto.room_pb2r
   rv   _protor   r   r   r   _ffi_clientr   _utilsr   r   participantr   r   r   r#   r&   r`   rb   ri   r   r   r   TextStreamHandlerByteStreamHandlerr    r    r    r!   <module>   s:   	.%k76