o
    i                     @  s   d dl m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 edZeddd	Zed
ddZG dd deZG dd deZG dd deZG dd de
e ZG dd de
e ZG dd de	e ZdS )    )annotationsN)deque)AsyncIterator)GenericProtocolTypeVarTT_coT)	covariantT_contra)contravariantc                   @     e Zd ZdS )
ChanClosedN__name__
__module____qualname__ r   r   b/var/www/html/livekit_bhavya/venv/lib/python3.10/site-packages/livekit/agents/utils/aio/channel.pyr          r   c                   @  r   )ChanFullNr   r   r   r   r   r      r   r   c                   @  r   )	ChanEmptyNr   r   r   r   r   r      r   r   c                   @  s*   e Zd ZdddZdddZdd	d
ZdS )
ChanSendervaluer   returnNonec                      d S Nr   selfr   r   r   r   send       zChanSender.sendc                 C     d S r   r   r   r   r   r   send_nowait        zChanSender.send_nowaitc                 C  r"   r   r   r   r   r   r   close"   r$   zChanSender.closeN)r   r   r   r   r   r   )r   r   r   r    r#   r&   r   r   r   r   r      s    

r   c                   @  s>   e Zd ZdddZdddZddd	ZdddZdddZdS )ChanReceiverr   r	   c                   r   r   r   r%   r   r   r   recv&   r!   zChanReceiver.recvc                 C  r"   r   r   r%   r   r   r   recv_nowait(   r$   zChanReceiver.recv_nowaitr   c                 C  r"   r   r   r%   r   r   r   r&   *   r$   zChanReceiver.closeAsyncIterator[T_co]c                 C  r"   r   r   r%   r   r   r   	__aiter__,   r$   zChanReceiver.__aiter__c                   r   r   r   r%   r   r   r   	__anext__.   r!   zChanReceiver.__anext__N)r   r	   r'   )r   r+   )r   r   r   r)   r*   r&   r,   r-   r   r   r   r   r(   %   s    



r(   c                   @  s   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d-ddZd.ddZ	e
d/ddZd0ddZd/d d!Zd/d"d#Zd1d%d&Zd-d'd(ZdS )2Chanr   Nmaxsizeintloop asyncio.AbstractEventLoop | Noner   r   c                 C  sF   |pt  | _t|d| _t  | _d| _t | _	t | _
t | _d S Nr   F)asyncioget_event_loop_loopmax_maxsizeEvent	_close_ev_closedr   _gets_puts_queue)r   r/   r1   r   r   r   __init__2   s   
zChan.__init__waitersdeque[asyncio.Future[T | None]]c                 C  s.   |r|  }| s|d  d S |sd S d S r   )popleftdone
set_result)r   r@   waiterr   r   r   _wakeup_next@   s   
zChan._wakeup_nextr   r   c                   s   |   r^| j s^| j }| j| z|I d H  W n8 ty$       |  t	
t | j| W d    n1 sAw   Y  |   sT| sT| | j  |   r^| j r
| | d S r   )fullr:   is_setr6   create_futurer=   appendr   cancel
contextlibsuppress
ValueErrorremove	cancelledrF   r#   )r   r   pr   r   r   r    G   s$   
z	Chan.sendc                 C  s6   | j  rt|  rt| j| | | j d S r   )	r:   rH   r   rG   r   r>   rJ   rF   r<   r   r   r   r   r#   Z   s   
zChan.send_nowaitc                   s   |   rb| j sb| j }| j| z|I d H  W n< ty$     tyX   |	  t
t | j| W d    n1 sDw   Y  |   sW| sW| | j  w |   rb| j r
|  S r   )emptyr:   rH   r6   rI   r<   rJ   r   BaseExceptionrK   rL   rM   rN   rO   rP   rF   r*   )r   gr   r   r   r)   d   s&   
z	Chan.recvc                 C  s4   |   r| j rtt| j }| | j |S r   )	rR   r:   rH   r   r   r>   rB   rF   r=   )r   itemr   r   r   r*   y   s   

zChan.recv_nowaitc                 C  s   d| _ | j  | jD ]}| s|t  qt| j| 	 kr9| j
 }| s0|t  t| j| 	 ks!| jrG| | j | js<d S d S )NT)r;   r:   setr=   rP   set_exceptionr   lenr<   qsizepoprF   )r   puttergetterr   r   r   r&      s   


z
Chan.closeboolc                 C  s   | j S r   )r;   r%   r   r   r   closed   s   zChan.closedc                 C  s
   t | jS )z<the number of elements queued (unread) in the channel buffer)rX   r>   r%   r   r   r   rY      s   
z
Chan.qsizec                 C  s   | j dkrdS |  | j kS r3   )r8   rY   r%   r   r   r   rG      s   
z	Chan.fullc                 C  s   | j  S r   )r>   r%   r   r   r   rR      s   z
Chan.emptyAsyncIterator[T]c                 C  s   | S r   r   r%   r   r   r   r,      s   zChan.__aiter__c                   s(   z|   I d H W S  ty   td w r   )r)   r   StopAsyncIterationr%   r   r   r   r-      s   zChan.__anext__)r   N)r/   r0   r1   r2   r   r   )r@   rA   r   r   )r   r   r   r   )r   r   r'   )r   r]   )r   r0   )r   r_   )r   r   r   r?   rF   r    r#   r)   r*   r&   propertyr^   rY   rG   rR   r,   r-   r   r   r   r   r.   1   s"    










r.   )
__future__r   r4   rL   collectionsr   collections.abcr   typingr   r   r   r   r	   r   	Exceptionr   r   r   r   r(   r.   r   r   r   r   <module>   s    