�
���g � �x � d dl Z d dlmZ ddlmZ ddlmZ e j d� � Z G d� dej � � Z dS )� N)�packet� )�base_manager�socketioc �D � e Zd ZdZd� Z d
d�Zd� Zdd�Zd� Zd� Z d � Z
dS )�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 �. � | � ||� � S �N)�is_connected)�self�sid� namespaces �`/home/asafur/pinokio/api/open-webui.git/app/env/lib/python3.11/site-packages/socketio/manager.py�can_disconnectzManager.can_disconnect s � �� � ��i�0�0�0� Nc �� � |p|}|| j vrdS t |t � � rt |� � }n|�|g}ng }t |t � � s|g}|s�| j � t j ||g|z �� � } | � � � }
t |
t � � s|
g}
d� |
D � � }| � ||� � D ])\ }}
||vr |D ]}| j �
|
|� � ��*dS | � ||� � D ]f\ }}
||vr]| � ||� � }| j � t j ||g|z |�� � } | j � |
| � � �gdS )zaEmit a message to a single client, a room, or all the clients
connected to the namespace.N)r �datac �L � g | ]!}t j t j |� � ��"S � )�
eio_packet�Packet�MESSAGE)�.0�ps r �
<listcomp>z Manager.emit.<locals>.<listcomp>/ s8 � � 0� 0� 0�� "�(��);�Q�?�?� 0� 0� 0r )r r �id)
�rooms�
isinstance�tuple�list�server�packet_classr �EVENT�encode�get_participants�_send_eio_packet�_generate_ack_id�_send_packet)r �eventr r �room�skip_sid�callback�to�kwargs�pkt�encoded_packet�eio_pktr
�eio_sidr r s r �emitzManager.emit s� � � �z�T���D�J�&�&��F��d�E�"�"� � ��:�:�D�D�
�
��6�D�D��D��(�D�)�)� "� �z�H�� ;� �+�*�*��� ���$�� +� H� H�C� �Z�Z�\�\�N��n�d�3�3�
2�"0�!1��0� 0� .�0� 0� 0�G� $� 5� 5�i�� F� F�
A�
A���W��h�&�&�$� A� A����4�4�W�a�@�@�@�@��
A�
A� !%� 5� 5�i�� F� F�
;�
;���W��h�&�&��.�.�s�H�=�=�B��+�2�2��� ���$��� 3� � �C� �K�,�,�W�c�:�:�:��
;�
;r c �. � | � ||� � S )z.Register a client disconnect from a namespace.)�basic_disconnect)r r
r r. s r �
disconnectzManager.disconnectB s � ��$�$�S�)�4�4�4r c �4 � | � ||||�� � S )zAdd a client to a room.)r2 )�basic_enter_room)r r
r r* r2 s r �
enter_roomzManager.enter_roomF s � ��$�$�S�)�T�7�$�K�K�Kr c �0 � | � |||� � S )zRemove a client from a room.)�basic_leave_room)r r
r r* s r �
leave_roomzManager.leave_roomJ s � ��$�$�S�)�T�:�:�:r c �. � | � ||� � S )z$Remove all participants from a room.)�basic_close_room)r r* r s r �
close_roomzManager.close_roomN s � ��$�$�T�9�5�5�5r c �� � d} | j | | }| j | |= n7# t $ r* | � � � � d� � Y nw xY w|� ||� dS dS )zInvoke an application callback.Nz$Unknown callback received, ignoring.)� callbacks�KeyError�_get_logger�warning)r r
r r r, s r �trigger_callbackzManager.trigger_callbackR s� � ��� (��~�c�*�2�.�H�
��s�#�B�'�'�� � O� O� O������&�&�'M�N�N�N�N�N� O����
���H�d�O�O�O�O� �s �&