
    wg_                     \    d dl Z d dlZd dlmZmZ  ej                  d      Z G d d      Zy)    N)bidictValueDuplicationErrorsocketioc                   t    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd ZddZd Zd Zd Zd Zd Zy)BaseManagerc                 X    d | _         d | _        i | _        i | _        i | _        i | _        y N)loggerserverrooms
eio_to_sid	callbackspending_disconnectselfs    Z/home/mcse/projects/flask/flask-venv/lib/python3.12/site-packages/socketio/base_manager.py__init__zBaseManager.__init__
   s-    
"$    c                     || _         y r	   )r   )r   r   s     r   
set_serverzBaseManager.set_server   s	    r   c                      y)zqInvoked before the first request is received. Subclasses can add
        their initialization code here.
        N r   s    r   
initializezBaseManager.initialize   s     	r   c                 6    | j                   j                         S )z3Return an iterable with the active namespace names.)r   keysr   s    r   get_namespaceszBaseManager.get_namespaces   s    zz  r   c              #     K   | j                   j                  |i       }t        |d      rht        |t              sX|d   |v r ||d      j
                  j                         ni }|dd D ]&  }|j                  ||v r||   j
                  ni        ( n#||v r||   j
                  j                         ni }|j                         E d{    y7 w)z:Return an iterable with the active participants in a room.__len__r      N)	r   gethasattr
isinstancestr_fwdmcopyupdateitems)r   	namespaceroomnsparticipantsrs         r   get_participantszBaseManager.get_participants   s     ZZ^^Ir*4#JtS,A7;Aw"}2d1g;,,113"L!"X D##17BqEKKCD 59BJ2d8>>..0BL%%'''s   CC	C
Cc                     | j                   j                  j                         }	 | j                  ||d|       | j                  ||||       |S # t        $ r Y yw xY w)z,Register a client connection to a namespace.N)eio_sid)r   eiogenerate_idbasic_enter_roomr   )r   r/   r(   sids       r   connectzBaseManager.connect*   sf    kkoo))+	!!#y$!H 	c9c7C
	 % 		s   A 	AAc                     || j                   v r|| j                   |   v ry	 | j                  |   d    |   d uS # t        $ r Y yw xY w)NF)r   r   KeyErrorr   r3   r(   s      r   is_connectedzBaseManager.is_connected5   s^    ///t..y99	::i(.s34?? 		s   9 	AAc                 `    	 | j                   |   d    j                  |   S # t        $ r Y y w xY wr	   )r   _invmr6   )r   r/   r(   s      r   sid_from_eio_sidzBaseManager.sid_from_eio_sid@   s8    	::i(.44W== 		s   ! 	--c                 b    || j                   v r!| j                   |   d    j                  |      S y r	   )r   r    r7   s      r   eio_sid_from_sidzBaseManager.eio_sid_from_sidF   s2    

"::i(.22377 #r   c                     || j                   vrg | j                   |<   | j                   |   j                  |       | j                  |   d   j                  |      S )zPut the client in the to-be-disconnected list.

        This allows the client data structures to be present while the
        disconnect handler is invoked, but still recognize the fact that the
        client is soon going away.
        N)r   appendr   r    r7   s      r   pre_disconnectzBaseManager.pre_disconnectJ   sZ     D33313D##I.	*11#6zz)$T*..s33r   c                    || j                   vry g }| j                   |   j                         j                         D ]  \  }}||v s|j                  |        |D ]  }| j	                  |||        || j
                  v r| j
                  |= || j                  v rZ|| j                  |   v rH| j                  |   j                  |       t        | j                  |         dk(  r| j                  |= y y y y Nr   )	r   r%   r'   r?   basic_leave_roomr   r   removelen)r   r3   r(   kwargsr   	room_namer)   s          r   basic_disconnectzBaseManager.basic_disconnectV   s   DJJ&#zz)499;AAC 	(OItd{Y'	(  	8D!!#y$7	8$.. s#///t..y99##I.55c:4**956!;++I6 < : 0r   Nc                 "   ||| j                   vrt        d      || j                   vri | j                   |<   || j                   |   vrt               | j                   |   |<   || j                   |   d    |   }|| j                   |   |   |<   y )Nz+sid is not connected to requested namespace)r   
ValueErrorr   )r   r3   r(   r)   r/   s        r   r2   zBaseManager.basic_enter_roomg   s    ?y

:JKKDJJ&$&DJJy!tzz),,*0(DJJy!$'?jj+D1#6G+2

9d#C(r   c                     	 | j                   |   |   |= t        | j                   |   |         dk(  r:| j                   |   |= t        | j                   |         dk(  r| j                   |= y y y # t        $ r Y y w xY wrB   )r   rE   r6   )r   r3   r(   r)   s       r   rC   zBaseManager.basic_leave_roomr   s    	

9%d+C04::i(./14JJy)$/tzz),-2

9- 3 5  		s   A)A. .	A:9A:c                 ~    	 | j                  ||      D ]  \  }}| j                  |||        y # t        $ r Y y w xY wr	   )r-   rC   r6   )r   r)   r(   r3   _s        r   basic_close_roomzBaseManager.basic_close_room|   sK    	//	4@ <Q%%c9d;< 		s   -0 	<<c                     g }	 | j                   |   j                         D ]  \  }}|	||v s|j                  |         	 |S # t        $ r Y |S w xY w)z Return the rooms a client is in.)r   r'   r?   r6   )r   r3   r(   r,   rG   r)   s         r   	get_roomszBaseManager.get_rooms   si    	#'::i#8#>#>#@ (	4(SD[HHY'(
   		s   %A A A 	AAc                     || j                   vr$dt        j                  d      i| j                   |<   t        | j                   |   d         }|| j                   |   |<   |S )z/Generate a unique identifier for an ACK packet.r   r   )r   	itertoolscountnext)r   r3   callbackids       r   _generate_ack_idzBaseManager._generate_ack_id   sZ    dnn$#$iooa&8"9DNN3$..%a()"*sB	r   c                     | j                   r| j                   S | j                  r| j                  j                   S t        S )zlGet the appropriate logger

        Prevents uninitialized servers in write-only mode from failing.
        )r
   r   default_loggerr   s    r   _get_loggerzBaseManager._get_logger   s2     ;;;;[[;;%%%!!r   r	   )__name__
__module____qualname__r   r   r   r   r-   r4   r8   r;   r=   r@   rH   r2   rC   rN   rP   rW   rZ   r   r   r   r   r   	   sW    %!	(		8
47"	3	"r   r   )rR   loggingr   r   	getLoggerrY   r   r   r   r   <module>r`      s,      0""":.X" X"r   