
    2BfM                     d    d dl Z d dlZ	 d dlmc mZ ddlmZ  G d de      Zy# e$ r dZY w xY w)    N   )PubSubManagerc                   B     e Zd ZdZdZ	 	 	 	 d fd	Zd Zd Zd Z xZ	S )
ZmqManagera?  zmq based client manager.

    NOTE: this zmq implementation should be considered experimental at this
    time. At this time, eventlet is required to use zmq.

    This class implements a zmq backend for event sharing across multiple
    processes. To use a zmq backend, initialize the :class:`Server` instance as
    follows::

        url = 'zmq+tcp://hostname:port1+port2'
        server = socketio.Server(client_manager=socketio.ZmqManager(url))

    :param url: The connection URL for the zmq message broker,
                which will need to be provided and running.
    :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 zmq message broker must be running for the zmq_manager to work.
    you can write your own or adapt one from the following simple broker
    below::

        import zmq

        receiver = zmq.Context().socket(zmq.PULL)
        receiver.bind("tcp://*:5555")

        publisher = zmq.Context().socket(zmq.PUB)
        publisher.bind("tcp://*:5556")

        while True:
            publisher.send(receiver.recv())
    zmqc                    t         t        d      t        j                  d      }|j	                  d      r|j                  |      st        d|z         |j                  dd      }|j                  d      \  }}|j                  d      d	   }|j                  ||      }	t        j                         j                  t         j                        }
|
j                  |       t        j                         j                  t         j                        }|j                  t         j                  d       |j                  |	       |
| _        || _        || _        t$        t&        | S  |||
       y )NzJzmq package is not installed (Run "pip install pyzmq" in your virtualenv).z
:\d+\+\d+$z
zmq+tcp://zunexpected connection string: zzmq+ +:)channel
write_onlylogger)r   RuntimeErrorrecompile
startswithsearchreplacesplitContextsocketPUSHconnectSUBsetsockopt_string	SUBSCRIBEsinksubr   superr   __init__)selfurlr   r   r   rsink_urlsub_port	sink_portsub_urlr   r   	__class__s               T/var/www/highfloat_scraper/venv/lib/python3.12/site-packages/socketio/zmq_manager.pyr!   zZmqManager.__init__2   s+    ;  . / / JJ}%|,#?#EFFkk&"%"yy~8NN3'+	""9h7{{}##CHH-Xkkm""377+cmmS1G	j$(4>06 	) 	8    c                 ~    t        j                  d| j                  |d      }| j                  j	                  |      S )Nmessage)typer   data)pickledumpsr   r   send)r"   r/   pickled_datas      r*   _publishzZmqManager._publishR   s7    ||!<<
 yy~~l++r+   c              #   N   K   	 | j                   j                         }|| !w)N)r   recv)r"   responses     r*   
zmq_listenzZmqManager.zmq_listen\   s(     xx}}H# s   #%c              #     K   | j                         D ]a  }t        |t              r	 t        j                  |      }t        |t              s:|d   dk(  sC|d   | j                  k(  sVd|v s[|d    c y # t
        $ r Y Gw xY ww)Nr.   r-   r   r/   )r8   
isinstancebytesr0   loads	Exceptiondictr   )r"   r-   s     r*   _listenzZmqManager._listenb   s     ( 
	&G'5)$ll73G '4(FOy0I&$,,6g%fo%
	& 	 ! s?   $BA8BBB)B.
B8	BBBB)zzmq+tcp://localhost:5555+5556socketioFN)
__name__
__module____qualname____doc__namer!   r4   r8   r?   __classcell__)r)   s   @r*   r   r      s1    "F D:#!8@,r+   r   )	r0   r   eventlet.green.zmqgreenr   ImportErrorpubsub_managerr   r    r+   r*   <module>rL      s?     	$$ *b b  
Cs   	% //