§
    !ß·i¨  ã                   óð   — d dl Z d dlmZ 	 d dlm Z d dlmZ n&# e$ r 	 d dlZd dlmZ n# e$ r dZdZY nw xY wY nw xY w	 d dl	m Z
 d dlmZ n# e$ r dZ
dZY nw xY wddlmZ ddlmZ  G d	„ d
e¦  «        ZdS )é    N)Úurlparse)Úasyncio)Ú
RedisError)ÚValkeyErroré   )ÚAsyncPubSubManager)Úparse_redis_sentinel_urlc                   óJ   ‡ — e Zd ZdZdZ	 	 dˆ fd„	Zd„ Zd	„ Zd
„ Zd„ Z	d„ Z
ˆ xZS )ÚAsyncRedisManageraÉ  Redis based client manager for asyncio servers.

    This class implements a Redis backend for event sharing across multiple
    processes.

    To use a Redis backend, initialize the :class:`AsyncServer` instance as
    follows::

        url = 'redis://hostname:port/0'
        server = socketio.AsyncServer(
            client_manager=socketio.AsyncRedisManager(url))

    :param url: The connection URL for the Redis server. For a default Redis
                store running on the same host, use ``redis://``.  To use a
                TLS connection, use ``rediss://``. To use Redis Sentinel, use
                ``redis+sentinel://`` with a comma-separated list of hosts
                and the service name after the db in the URL path. Example:
                ``redis+sentinel://user:pw@host1:1234,host2:2345/0/myredis``.
    :param channel: The channel name on which the server sends and receives
                    notifications. Must be the same in all the servers.
    :param write_only: If set to ``True``, only initialize to emit events. The
                       default of ``False`` initializes the class for emitting
                       and receiving. A write-only instance can be used
                       independently of the server to emit to clients from an
                       external process.
    :param logger: a custom logger to log it. If not given, the server logger
                   is used.
    :param json: An alternative JSON module to use for encoding and decoding
                 packets. Custom json modules must have ``dumps`` and ``loads``
                 functions that are compatible with the standard library
                 versions. This setting is only used when ``write_only`` is set
                 to ``True``. Otherwise the JSON module configured in the
                 server is used.
    :param redis_options: additional keyword arguments to be passed to
                          ``Redis.from_url()`` or ``Sentinel()``.
    Úaioredisúredis://localhost:6379/0ÚsocketioFNc                 óü   •— t           r)t          t           j        d¦  «        st          d¦  «        ‚t	          ¦   «                              ||||¬¦  «         || _        |pi | _        d| _        d | _	        d | _
        d S )NÚfrom_urlz*Version 2 of aioredis package is required.)ÚchannelÚ
write_onlyÚloggerÚjsonF)r   ÚhasattrÚRedisÚRuntimeErrorÚsuperÚ__init__Ú	redis_urlÚredis_optionsÚ	connectedÚredisÚpubsub)ÚselfÚurlr   r   r   r   r   Ú	__class__s          €úa/home/mmwave/public_html/mmwave/venv/lib/python3.11/site-packages/socketio/async_redis_manager.pyr   zAsyncRedisManager.__init__A   s‡   ø€ åð 	MÝ�HœN¨JÑ7Ô7ð	MåÐKÑLÔLÐLÝ‰Œ×Ò °ZÈØ"ð 	ñ 	$ô 	$ð 	$àˆŒØ*Ð0¨bˆÔØˆŒØˆŒ
ØˆŒˆˆó    c                 ó  — t          | j        ¦  «        }|j                             dd¦  «        d                              ¦   «         }|dv r+t
          �t          €t          d¦  «        ‚t
          t          fS |dv r+t          �t          €t          d¦  «        ‚t          t          fS |dk    rGt
          �t          €+t          �t          €t          d	¦  «        ‚t          t          fS t
          t          fS d
|› �}t          |¦  «        ‚)Nú+r   r   )r   ÚredisszLRedis package is not installed (Run "pip install redis" in your virtualenv).)ÚvalkeyÚvalkeyszNValkey package is not installed (Run "pip install valkey" in your virtualenv).ÚunixzdRedis package is not installed (Run "pip install redis" or "pip install valkey" in your virtualenv).zUnsupported Redis URL scheme: )r   r   ÚschemeÚsplitÚlowerr   r   r   Ú	aiovalkeyr   Ú
ValueError)r   Ú
parsed_urlr*   Ú	error_msgs       r"   Ú_get_redis_module_and_errorz-AsyncRedisManager._get_redis_module_and_errorN   s  € Ý˜dœnÑ-Ô-ˆ
ØÔ"×(Ò(¨¨aÑ0Ô0°Ô3×9Ò9Ñ;Ô;ˆØÐ(Ð(Ð(ÝÐ¥:Ð#5Ý"ð $:ñ ;ô ;ð ;õ �ZÐ'Ð'ØÐ*Ð*Ð*ÝÐ ¥KÐ$7Ý"ð $:ñ ;ô ;ð ;õ �kÐ)Ð)Ø�VÒÐÝÐ¥:Ð#5ÝÐ$­Ð(;Ý&ð (>ñ ?ô ?ð ?õ
 %¥kÐ1Ð1å¥Ð+Ð+Ø=°VÐ=Ð=ˆ	Ý˜Ñ#Ô#Ð#r#   c                 óÒ  — |                       ¦   «         \  }}t          | j        ¦  «        }|j        dv rit	          | j        ¦  «        \  }}}| j        }|                     |¦  «          |j        j        |fi |¤Ž}| 	                    |p| j
        ¦  «        | _        n" |j        j        | j        fi | j        ¤Ž| _        | j                             d¬¦  «        | _        d| _        d S )N>   úredis+sentinelúvalkey+sentinelT)Úignore_subscribe_messages)r1   r   r   r*   r	   r   ÚupdateÚsentinelÚSentinelÚ
master_forr   r   r   r   r   r   )	r   ÚmoduleÚ_r/   Ú	sentinelsÚservice_nameÚconnection_kwargsÚkwargsr7   s	            r"   Ú_redis_connectz AsyncRedisManager._redis_connectk   sø   € Ø×4Ò4Ñ6Ô6‰	ˆ�Ý˜dœnÑ-Ô-ˆ
ØÔÐ EÐEÐEå(¨¬Ñ8Ô8ñ 7ˆI�|Ð%6àÔ'ˆFØ�MŠMÐ+Ñ,Ô,Ð,Ø/�v”Ô/°	ÐDÐD¸VÐDÐDˆHØ!×,Ò,¨\Ð-I¸T¼\ÑJÔJˆDŒJˆJà.˜œÔ.¨t¬~ð Eð EØ15Ô1CðEð EˆDŒJà”j×'Ò'À$Ð'ÑGÔGˆŒØˆŒˆˆr#   c           	   ƒ   óD  K  — |                       ¦   «         \  }}t          ddd¦  «        D ]ô}	 | j        s|                      ¦   «          | j                             | j        | j                             |¦  «        ¦  «        ƒ d {V —†c S # |$ r�}|dk    r@|  	                    ¦   «          
                    ddt          |¦  «        i¬¦  «         d| _        n?|  	                    ¦   «          
                    ddt          |¦  «        i¬¦  «         Y d }~ d S Y d }~Œíd }~ww xY wd S )	Nr   éÿÿÿÿr   z#Cannot publish to redis... retryingÚredis_exception©ÚextraFz$Cannot publish to redis... giving up)r1   Úranger   r@   r   Úpublishr   r   ÚdumpsÚ_get_loggerÚerrorÚstr)r   Údatar;   rJ   Úretries_leftÚexcs         r"   Ú_publishzAsyncRedisManager._publish{   sƒ  è è € Ø×3Ò3Ñ5Ô5‰ˆˆ5Ý! ! R¨Ñ,Ô,ð 	ð 	ˆLðØ”~ð *Ø×'Ò'Ñ)Ô)Ð)Ø!œZ×/Ò/Ø”L $¤)§/¢/°$Ñ"7Ô"7ñ9ô 9ð 9ð 9ð 9ð 9ð 9ð 9ð 9ð 9ð 9øàð ð ð Ø !Ò#Ð#Ø×$Ò$Ñ&Ô&×,Ò,ð#à0µ#°c±(´(Ð;ð -ñ =ô =ð =ð &+�D”N�Nà×$Ò$Ñ&Ô&×,Ò,ð$à0µ#°c±(´(Ð;ð -ñ =ô =ð =ð
 �E�E�E�E�E�Eð #�N�N�N�Nøøøøðøøøð	ð 	s   ®AB	Â	DÂA>DÄDc                óú  K  — |                       ¦   «         \  }}d}d}	 	 |s;|                      ¦   «          | j                             | j        ¦  «        ƒ d {V —† d}| j                             ¦   «         2 3 d {V —†}|W V — Œ6 nw# |$ ro}|                      ¦   «                              d|› d�dt          |¦  «        i¬¦  «         d}t          j
        |¦  «        ƒ d {V —† |dz  }|d	k    rd	}Y d }~nd }~ww xY wŒÞ)
Nr   FTz)Cannot receive from redis... retrying in z secsrC   rD   é   é<   )r1   r@   r   Ú	subscriber   ÚlistenrI   rJ   rK   r   Úsleep)r   r;   rJ   Úretry_sleepÚ
subscribedÚmessagerN   s          r"   Ú_redis_listen_with_retriesz,AsyncRedisManager._redis_listen_with_retries’   sƒ  è è € Ø×3Ò3Ñ5Ô5‰ˆˆ5ØˆØˆ
ð	%ð%Ø!ð $Ø×'Ò'Ñ)Ô)Ð)Øœ+×/Ò/°´Ñ=Ô=Ð=Ð=Ð=Ð=Ð=Ð=Ð=Ø"#�KØ%)¤[×%7Ò%7Ñ%9Ô%9ð "ð "ð "ð "ð "ð "ð "˜'Ø!�M�M�M�M�Mð &:Ð%9øàð 	%ð 	%ð 	%Ø× Ò Ñ"Ô"×(Ò(ð *?à,7ð*?ð *?ð *?ð 1BÅ3ÀsÁ8Ä8Ð/Lð )ñ Nô Nð Nð #�
Ý”m KÑ0Ô0Ð0Ð0Ð0Ð0Ð0Ð0Ð0Ø˜qÑ �Ø Ò#Ð#Ø"$�Køøøøøøøøøð	%øøøð	%s%    AB Á6BÁ<B ÂC9Â
A%C4Ã4C9c                ó  K  — | j                              d¦  «        }|                      ¦   «         2 3 d {V —†}|d         |k    r|d         dk    rd|v r|d         W V — Œ/6 | j                             | j         ¦  «        ƒ d {V —† d S )Nzutf-8r   ÚtyperX   rL   )r   ÚencoderY   r   Úunsubscribe)r   r   rX   s      r"   Ú_listenzAsyncRedisManager._listen©   sÃ   è è € Ø”,×%Ò% gÑ.Ô.ˆØ!×<Ò<Ñ>Ô>ð 	&ð 	&ð 	&ð 	&ð 	&ð 	&ð 	&�'Ø�yÔ! WÒ,Ð,Ø˜F”O yÒ0Ð0°V¸wÐ5FÐ5FØ˜f”oÐ%Ð%Ð%Ð%øð ?ð Œk×%Ò% d¤lÑ3Ô3Ð3Ð3Ð3Ð3Ð3Ð3Ð3Ð3Ð3s   ±A )r   r   FNNN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Únamer   r1   r@   rO   rY   r^   Ú__classcell__)r!   s   @r"   r   r      s    ø€ € € € € ð#ð #ðH €Dà?IØIMðð ð ð ð ð ð$ð $ð $ð:ð ð ð ð ð ð.%ð %ð %ð.4ð 4ð 4ð 4ð 4ð 4ð 4r#   r   )r   Úurllib.parser   r   r   Úredis.exceptionsr   ÚImportErrorÚaioredis.exceptionsr'   r-   Úvalkey.exceptionsr   Úasync_pubsub_managerr   Úredis_managerr	   r   © r#   r"   ú<module>rm      so  ðØ €€€Ø !Ð !Ð !Ð !Ð !Ð !ð	Ø)Ð)Ð)Ð)Ð)Ð)Ø+Ð+Ð+Ð+Ð+Ð+Ð+øØð ð ð ðØˆˆˆØ2Ð2Ð2Ð2Ð2Ð2Ð2øØð ð ð ØˆØˆ
ˆ
ˆ
ðøøøøøð	øøøðØ+Ð+Ð+Ð+Ð+Ð+Ø-Ð-Ð-Ð-Ð-Ð-Ð-øØð ð ð Ø€IØ€K€K€Kðøøøð 5Ð 4Ð 4Ð 4Ð 4Ð 4Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3ðU4ð U4ð U4ð U4ð U4Ð*ñ U4ô U4ð U4ð U4ð U4s6   Œ ™<Ÿ
*©<ª	6³<µ6¶<»<Á A Á	AÁA