
    4?i		                         S SK Jr  S SKJr   " S S5      r " S S5      r " S S5      r\" 5       r\" 5       r\" 5       r	g	)
    )Dict)	WebSocketc                   H    \ rS rSrSrS rS\4S jrS\4S jrS\4S jr	Sr
g	)
VisitorConnectionManager   zu
Keeps track of active visitor websocket connections.
Keys are visitor_uids (strings), values are websocket objects.
c                     0 U l         g Nactive_connectionsselfs    ;/var/www/html/livechat/backend/app/ws/connection_manager.py__init__!VisitorConnectionManager.__init__   s
    24    visitor_uidc                      X R                   U'   g r	   r
   )r   r   	websockets      r   connect VisitorConnectionManager.connect   s    /8,r   c                 >    XR                   ;   a  U R                   U	 g g r	   r
   r   r   s     r   
disconnect#VisitorConnectionManager.disconnect   s!    111''4 2r   c                 8    U R                   R                  U5      $ r	   r   getr   s     r   r   VisitorConnectionManager.get   s    &&**;77r   r
   N)__name__
__module____qualname____firstlineno____doc__r   strr   r   r   __static_attributes__ r   r   r   r      s0    
593 95c 58s 8r   r   c                   H    \ rS rSrSrS rS\4S jrS\4S jrS\	4S jr
S	rg
)AdminConnectionManager   uF   
Admins don’t have IDs (unless you want), we just broadcast to all.
c                     / U l         g r	   r
   r   s    r   r   AdminConnectionManager.__init__   s
    35r   r   c                 :    U R                   R                  U5        g r	   )r   appendr   r   s     r   r   AdminConnectionManager.connect!   s    &&y1r   c                 Z    XR                   ;   a  U R                   R                  U5        g g r	   )r   remover.   s     r   r   !AdminConnectionManager.disconnect$   s'    ///##**95 0r   messagec                    #    / nU R                    H  n UR                  U5      I S h  vN   M     U H  nU R	                  U5        M     g  N#! [         a    UR                  U5         M\  f = f7fr	   )r   	send_json	Exceptionr-   r   )r   r3   deadwss       r   	broadcast AdminConnectionManager.broadcast(   sg     ))B ll7+++ *
 BOOB  ,  B s7   A1AAAA1AA.*A1-A..A1r
   N)r   r    r!   r"   r#   r   r   r   r   dictr9   r%   r&   r   r   r(   r(      s0    62 26I 6 t  r   r(   c                   V    \ rS rSrS rS\S\4S jrS\4S jrS\4S jr	S\
4S	 jrS
rg)AgentConnectionManager3   c                     0 U l         g r	   r
   r   s    r   r   AgentConnectionManager.__init__4   s
    8:r   agent_idr   c                      X R                   U'   g r	   r
   )r   rA   r   s      r   r   AgentConnectionManager.connect7   s    ,5)r   c                 >    XR                   ;   a  U R                   U	 g g r	   r
   r   rA   s     r   r   !AgentConnectionManager.disconnect:   s!    ...''1 /r   c                 8    U R                   R                  U5      $ r	   r   rE   s     r   r   AgentConnectionManager.get>   s    &&**844r   r3   c                   #    / nU R                   R                  5        H  u  p4 UR                  U5      I S h  vN   M!     U H  nU R                  U5        M     g  N#! [         a    UR	                  U5         M^  f = f7fr	   )r   itemsr5   r6   r-   r   )r   r3   r7   aidr8   s        r   r9    AgentConnectionManager.broadcastA   ss     ..446GC!ll7+++ 7
 COOC   , !C !s7   "BAAABAA>:B=A>>Br
   N)r   r    r!   r"   r   intr   r   r   r   r;   r9   r%   r&   r   r   r=   r=   3   s>    ;6 6	 623 25C 5!t !r   r=   N)
typingr   fastapir   r   r(   r=   agent_manageradmin_managervisitor_managerr&   r   r   <module>rS      sC     8 8(   2! !2 '(&(*,r   