§
    !ß·iä  ã                   óh   — d dl Z d dlZd dlZd dlmZmZ  ej        d¦  «        Z G d„ d¦  «        ZdS )é    N)ÚbidictÚValueDuplicationErrorÚsocketioc                   óv   — 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dS )ÚBaseManagerc                 ór   — d | _         d | _        i | _        i | _        i | _        i | _        t          | _        d S ©N)ÚloggerÚserverÚroomsÚ
eio_to_sidÚ	callbacksÚpending_disconnectÚjson©Úselfs    úZ/home/mmwave/public_html/mmwave/venv/lib/python3.11/site-packages/socketio/base_manager.pyÚ__init__zBaseManager.__init__   s8   € ØˆŒØˆŒØˆŒ
ØˆŒØˆŒØ"$ˆÔÝˆŒ	ˆ	ˆ	ó    c                 ó@   — || _         | j         j        j        | _        d S r	   )r   Úpacket_classr   )r   r   s     r   Ú
set_serverzBaseManager.set_server   s   € ØˆŒØ”KÔ,Ô1ˆŒ	ˆ	ˆ	r   c                 ó   — dS )zqInvoked before the first request is received. Subclasses can add
        their initialization code here.
        N© r   s    r   Ú
initializezBaseManager.initialize   s	   € ð 	ˆr   c                 ó4   — | j                              ¦   «         S )z3Return an iterable with the active namespace names.)r   Úkeysr   s    r   Úget_namespaceszBaseManager.get_namespaces   s   € àŒz�ŠÑ Ô Ð r   c              #   óÒ  K  — | j                              |i ¦  «        }t          |d¦  «        rzt          |t          ¦  «        se|d         |v r%||d                  j                             ¦   «         ni }|dd…         D ](}|                     ||v r||         j        ni ¦  «         Œ)n%||v r||         j                             ¦   «         ni }|                     ¦   «         E d{V —† dS )aJ  Return an iterable with the active participants in a room.

        Note that in a multi-server scenario this method only returns the
        participants connect to the server in which the method is called. There
        is currently no functionality to assemble a complete list of users
        across multiple servers.
        Ú__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  è è € ð ŒZ�^Š^˜I rÑ*Ô*ˆÝ�4˜Ñ#Ô#ð 	G­J°t½SÑ,AÔ,Að 	GØ7;¸A´wÀ"°}°}˜2˜d 1œgœ;Ô,×1Ò1Ñ3Ô3Ð3È"ˆLØ˜!˜"˜"”Xð Dð D�Ø×#Ò#°1¸°7°7 B q¤E¤K KÀÑCÔCÐCÐCðDð 59¸B°J°J˜2˜dœ8œ>×.Ò.Ñ0Ô0Ð0ÀBˆLØ×%Ò%Ñ'Ô'Ð'Ð'Ð'Ð'Ð'Ð'Ð'Ð'Ð'r   c                 óÌ   — | j         j                             ¦   «         }	 |                      ||d|¬¦  «         n# t          $ r Y dS w xY w|                      ||||¬¦  «         |S )z,Register a client connection to a namespace.N)Úeio_sid)r   ÚeioÚgenerate_idÚbasic_enter_roomr   )r   r1   r*   Úsids       r   ÚconnectzBaseManager.connect3   s‚   € àŒkŒo×)Ò)Ñ+Ô+ˆð	Ø×!Ò! # y°$ÀÐ!ÑHÔHÐHÐHøÝ$ð 	ð 	ð 	à�4�4ð	øøøð 	×Ò˜c 9¨c¸7ÐÑCÔCÐCØˆ
s    : º
AÁAc                 ó’   — || j         v r|| j         |         v rdS 	 | j        |         d          |         d uS # t          $ r Y nw xY wdS )NF)r   r   ÚKeyError©r   r5   r*   s      r   Úis_connectedzBaseManager.is_connected>   sn   € Ø˜Ô/Ð/Ð/Ø�tÔ.¨yÔ9Ð9Ð9à�5ð	Ø”:˜iÔ(¨Ô.¨sÔ3¸4Ð?Ð?øÝð 	ð 	ð 	ØˆDð	øøøàˆus   œ7 ·
AÁAc                 ób   — 	 | j         |         d          j        |         S # t          $ r Y d S w xY wr	   )r   Ú_invmr8   )r   r1   r*   s      r   Úsid_from_eio_sidzBaseManager.sid_from_eio_sidI   sC   € ð	Ø”:˜iÔ(¨Ô.Ô4°WÔ=Ð=øÝð 	ð 	ð 	ØˆDˆDð	øøøs   ‚   
.­.c                 ód   — || j         v r&| j         |         d                               |¦  «        S d S r	   )r   r"   r9   s      r   Úeio_sid_from_sidzBaseManager.eio_sid_from_sidO   s7   € Ø˜œ
Ð"Ð"Ø”:˜iÔ(¨Ô.×2Ò2°3Ñ7Ô7Ð7ð #Ð"r   c                 ó´   — || j         vr
g | j         |<   | j         |                              |¦  «         | j        |         d                              |¦  «        S )zïPut 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"   r9   s      r   Úpre_disconnectzBaseManager.pre_disconnectS   s[   € ð ˜DÔ3Ð3Ð3Ø13ˆDÔ# IÑ.ØÔ 	Ô*×1Ò1°#Ñ6Ô6Ð6ØŒz˜)Ô$ TÔ*×.Ò.¨sÑ3Ô3Ð3r   c                 óâ  — || j         vrd S g }| j         |                              ¦   «                              ¦   «         D ]\  }}||v r|                     |¦  «         Œ|D ]}|                      |||¦  «         Œ|| j        v r| j        |= || j        v rW|| j        |         v rJ| j        |                              |¦  «         t          | j        |         ¦  «        dk    r| j        |= d S d S d S d S ©Nr   )	r   r'   r)   rA   Úbasic_leave_roomr   r   ÚremoveÚlen)r   r5   r*   Úkwargsr   Ú	room_namer+   s          r   Úbasic_disconnectzBaseManager.basic_disconnect_   s%  € Ø˜DœJÐ&Ð&ØˆFØˆØ#œz¨)Ô4×9Ò9Ñ;Ô;×AÒAÑCÔCð 	(ð 	(‰OˆI�tØ�dˆ{ˆ{Ø—’˜YÑ'Ô'Ð'øØð 	8ð 	8ˆDØ×!Ò! # y°$Ñ7Ô7Ð7Ð7Ø�$”.Ð Ð Ø”˜sÐ#Ø˜Ô/Ð/Ð/Ø�tÔ.¨yÔ9Ð9Ð9ØÔ# IÔ.×5Ò5°cÑ:Ô:Ð:Ý�4Ô*¨9Ô5Ñ6Ô6¸!Ò;Ð;ØÔ+¨IÐ6Ð6Ð6ð	 0Ð/Ø9Ð9à;Ð;r   Nc                 ó  — |€|| j         vrt          d¦  «        ‚|| j         vr
i | j         |<   || j         |         vrt          ¦   «         | j         |         |<   |€| j         |         d          |         }|| j         |         |         |<   d S )Nz+sid is not connected to requested namespace)r   Ú
ValueErrorr   )r   r5   r*   r+   r1   s        r   r4   zBaseManager.basic_enter_roomp   s™   € Øˆ?˜y°´
Ð:Ð:ÝÐJÑKÔKÐKØ˜DœJÐ&Ð&Ø$&ˆDŒJ�yÑ!Ø�t”z )Ô,Ð,Ð,Ý*0©(¬(ˆDŒJ�yÔ! $Ñ'Øˆ?Ø”j Ô+¨DÔ1°#Ô6ˆGØ+2ˆŒ
�9Ô˜dÔ# CÑ(Ð(Ð(r   c                 ó
  — 	 | j         |         |         |= t          | j         |         |         ¦  «        dk    r6| j         |         |= t          | j         |         ¦  «        dk    r| j         |= d S d S d S # t          $ r Y d S w xY wrD   )r   rG   r8   )r   r5   r*   r+   s       r   rE   zBaseManager.basic_leave_room{   s£   € ð	Ø”
˜9Ô% dÔ+¨CÐ0Ý�4”:˜iÔ(¨Ô.Ñ/Ô/°1Ò4Ð4Ø”J˜yÔ)¨$Ð/Ý�t”z )Ô,Ñ-Ô-°Ò2Ð2Øœ
 9Ð-Ð-Ð-ð 5Ð4à2Ð2øåð 	ð 	ð 	ØˆDˆDð	øøøs   ‚A,A4 Á4
BÂBc                 ó�   — 	 |                       ||¦  «        D ]\  }}|                      |||¦  «         Œd S # t          $ r Y d S w xY wr	   )r/   rE   r8   )r   r+   r*   r5   Ú_s        r   Úbasic_close_roomzBaseManager.basic_close_room…   sq   € ð	Ø×/Ò/°	¸4Ñ@Ô@ð <ð <‘��QØ×%Ò% c¨9°dÑ;Ô;Ð;Ð;ð<ð <øåð 	ð 	ð 	ØˆDˆDð	øøøs   ‚37 ·
AÁAc                 ó®   — g }	 | j         |                              ¦   «         D ] \  }}|�||v r|                     |¦  «         Œ!n# t          $ r Y nw xY w|S )z Return the rooms a client is in.)r   r)   rA   r8   )r   r5   r*   r.   rI   r+   s         r   Ú	get_roomszBaseManager.get_roomsŒ   s   € àˆð	Ø#'¤:¨iÔ#8×#>Ò#>Ñ#@Ô#@ð (ð (‘�	˜4ØÐ(¨S°D¨[¨[Ø—H’H˜YÑ'Ô'Ð'øð(øõ ð 	ð 	ð 	ØˆDð	øøøàˆs   „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   r5   ÚcallbackÚids       r   Ú_generate_ack_idzBaseManager._generate_ack_id—   sY   € à�d”nÐ$Ð$Ø#$¥i¤o°aÑ&8Ô&8Ð"9ˆDŒN˜3ÑÝ�$”. Ô% aÔ(Ñ)Ô)ˆØ"*ˆŒ�sÔ˜BÑØˆ	r   c                 óR   — | 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Ÿ   s1   € ð Œ;ð 	"Ø”;ÐØŒ[ð 	"Ø”;Ô%Ð%å!Ð!r   r	   )Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r/   r6   r:   r=   r?   rB   rJ   r4   rE   rP   rR   rY   r\   r   r   r   r   r   
   s  € € € € € ðð ð ð2ð 2ð 2ðð ð ð!ð !ð !ð(ð (ð (ð"	ð 	ð 	ð	ð 	ð 	ðð ð ð8ð 8ð 8ð
4ð 
4ð 
4ð7ð 7ð 7ð"	3ð 	3ð 	3ð 	3ðð ð ðð ð ð	ð 	ð 	ðð ð ð"ð "ð "ð "ð "r   r   )rT   Úloggingr   r   r   Ú	getLoggerr[   r   r   r   r   ú<module>rb      s‰   ðØ Ð Ð Ð Ø €€€Ø €€€à 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0à"�Ô" :Ñ.Ô.€ð`"ð `"ð `"ð `"ð `"ñ `"ô `"ð `"ð `"ð `"r   