o
    ìcj                     @   sL   d dl Z d dlZd dlZd dlmZ d dlmZ eeZ	G dd dZ
dS )    N)Any)	WebSocketc                   @   sf   e Zd ZdddZdeddfddZdeddfdd	Zd
eee	f ddfddZ
edefddZdS )ConnectionManagerreturnNc                 C   s   g | _ t | _d S N)_connectionsasyncioLock_lockself r   ;/var/www/html/bot-asterisk-ari/backend/websocket/manager.py__init__   s   zConnectionManager.__init__	websocketc              	      s\   |  I d H  | j4 I d H  | j| W d   I d H  d S 1 I d H s'w   Y  d S r   )acceptr
   r   appendr   r   r   r   r   connect   s
   .zConnectionManager.connectc              	      sn   | j 4 I d H " || jv r| j| W d   I d H  d S W d   I d H  d S 1 I d H s0w   Y  d S r   )r
   r   remover   r   r   r   
disconnect   s   
.zConnectionManager.disconnectmessagec              
      s   t |}| j4 I d H < g }| jD ]}z
||I d H  W q ty-   || Y qw |D ]}|| jv r=| j| q0W d   I d H  d S 1 I d H sOw   Y  d S r   )jsondumpsr
   r   	send_text	Exceptionr   r   )r   r   payloaddeadwsr   r   r   	broadcast   s    


.zConnectionManager.broadcastc                 C   s
   t | jS r   )lenr   r   r   r   r   active_count'   s   
zConnectionManager.active_count)r   N)__name__
__module____qualname__r   r   r   r   dictstrr   r   propertyintr!   r   r   r   r   r      s    
r   )r   r   loggingtypingr   fastapir   	getLoggerr"   loggerr   r   r   r   r   <module>   s    
