
    wg                     ~    d dl Z d dlmZ ddlmZ ddlmZ  e j                  d      Z G d dej                        Z	y)    N)packet   )base_managersocketioc                   B    e Zd ZdZd Z	 	 d
dZd ZddZd Zd Z	d	 Z
y)Managera]  Manage client connections.

    This class keeps track of all the clients and the rooms they are in, to
    support the broadcasting of messages. The data used by this class is
    stored in a memory structure, making it appropriate only for single process
    services. More sophisticated storage backends can be implemented by
    subclasses.
    c                 &    | j                  ||      S N)is_connected)selfsid	namespaces      U/home/mcse/projects/flask/flask-venv/lib/python3.12/site-packages/socketio/manager.pycan_disconnectzManager.can_disconnect   s      i00    Nc                 4   |xs |}|| j                   vryt        |t              rt        |      }n||g}ng }t        |t              s|g}|s| j                  j                  t        j                  ||g|z         }	|	j                         }
t        |
t              s|
g}
|
D cg c]&  }t        j                  t        j                  |      ( }}| j                  ||      D ]-  \  }}||vs|D ]  }| j                  j                  ||         / y| j                  ||      D ]i  \  }}||vs| j                  ||      }| j                  j                  t        j                  ||g|z   |      }	| j                  j                  ||	       k yc c}w )zaEmit a message to a single client, a room, or all the clients
        connected to the namespace.N)r   data)r   r   id)rooms
isinstancetuplelistserverpacket_classr   EVENTencode
eio_packetPacketMESSAGEget_participants_send_eio_packet_generate_ack_id_send_packet)r   eventr   r   roomskip_sidcallbacktokwargspktencoded_packetpeio_pktr   eio_sidr   s                   r   emitzManager.emit   s    zTDJJ&dE" :D6DD(D) zH ++**	$ + HC ZZ\Nnd3"0!1 .0 "((););Q? 0G 0 $ 5 5i F AWh&$ A44Wa@AA !% 5 5i F ;Wh&..sH=B++22	$ 3 C KK,,Wc:;0s   &+Fc                 &    | j                  ||      S )z.Register a client disconnect from a namespace.)basic_disconnect)r   r   r   r)   s       r   
disconnectzManager.disconnectB   s    $$S)44r   c                 ,    | j                  ||||      S )zAdd a client to a room.)r.   )basic_enter_room)r   r   r   r%   r.   s        r   
enter_roomzManager.enter_roomF   s    $$S)T7$KKr   c                 (    | j                  |||      S )zRemove a client from a room.)basic_leave_room)r   r   r   r%   s       r   
leave_roomzManager.leave_roomJ   s    $$S)T::r   c                 &    | j                  ||      S )z$Remove all participants from a room.)basic_close_room)r   r%   r   s      r   
close_roomzManager.close_roomN   s    $$T955r   c                     d}	 | j                   |   |   }| j                   |   |= | ||  yy# t        $ r" | j                         j                  d       Y 3w xY w)zInvoke an application callback.Nz$Unknown callback received, ignoring.)	callbacksKeyError_get_loggerwarning)r   r   r   r   r'   s        r   trigger_callbackzManager.trigger_callbackR   so    	(~~c*2.H
 s#B'dO    	O&&'MN	Os   / (AA)NNNNr
   )__name__
__module____qualname____doc__r   r/   r2   r5   r8   r;   rA    r   r   r   r   
   s6    1 @D#*;X5L;6r   r   )
loggingengineior   r    r   	getLoggerdefault_loggerBaseManagerr   rF   r   r   <module>rM      s7     )  """:.Sl&& Sr   