
    ytf!                         d Z ddlZddlmZmZmZ  G d d      Z G d dee      Z G d d	ee      Z G d
 dee      Z	g dZ
y)zProxy classes and functions.    N)DeviceProcessDeviceThreadDevicec                   R    e Zd ZdZej
                  fdZd Zd Zd Z	d Z
d Zd Zy	)
	ProxyBasez"Base class for overriding methods.c                 l    t        j                  | ||       || _        g | _        g | _        g | _        y )N)in_typeout_type)r   __init__mon_type
_mon_binds_mon_connects_mon_sockopts)selfr	   r
   r   s       a/var/www/html/software/conda/envs/higlass/lib/python3.12/site-packages/zmq/devices/proxydevice.pyr   zProxyBase.__init__   s0    gA     c                 :    | j                   j                  |       y)zaEnqueue ZMQ address for binding on mon_socket.

        See zmq.Socket.bind for details.
        N)r   appendr   addrs     r   bind_monzProxyBase.bind_mon   s    
 	t$r   c                 ^     | j                   |g|i |}| j                  d||fz         |S )zEnqueue a random port on the given interface for binding on
        mon_socket.

        See zmq.Socket.bind_to_random_port for details.

        .. versionadded:: 18.0
        z%s:%i)_reserve_random_portr   )r   r   argskwargsports        r   bind_mon_to_random_portz!ProxyBase.bind_mon_to_random_port   s:     )t((???gt,-r   c                 :    | j                   j                  |       y)zgEnqueue ZMQ address for connecting on mon_socket.

        See zmq.Socket.connect for details.
        N)r   r   r   s     r   connect_monzProxyBase.connect_mon)   s    
 	!!$'r   c                 >    | j                   j                  ||f       y)zfEnqueue setsockopt(opt, value) for mon_socket

        See zmq.Socket.setsockopt for details.
        N)r   r   )r   optvalues      r   setsockopt_monzProxyBase.setsockopt_mon0   s    
 	!!3,/r   c                    t        j                  |       \  }}| j                  }|j                  | j                        }| j
                  j                  |       | j                  D ]  \  }}|j                  ||        | j                  D ]  }|j                  |        | j                  D ]  }|j                  |        |||fS N)r   _setup_sockets_contextsocketr   _socketsr   r   
setsockoptr   bindr   connect)r   insoutsctxmonsr!   r"   ifaces           r   r&   zProxyBase._setup_sockets7   s    ))$/	Tmmzz$--(T" ,, 	(JCOOC'	( __ 	EIIe	 '' 	 ELL	  D$r   c                 Z    | j                         \  }}}t        j                  |||       y r%   )r&   zmqproxy)r   r-   r.   r0   s       r   
run_devicezProxyBase.run_deviceI   s&    --/T4		#tT"r   N)__name__
__module____qualname____doc__r3   PUBr   r   r   r   r#   r&   r5    r   r   r   r   
   s/    ,3677  %(0$#r   r   c                       e Zd ZdZy)Proxya  Threadsafe Proxy object.

    See zmq.devices.Device for most of the spec. This subclass adds a
    <method>_mon version of each <method>_{in|out} method, for configuring the
    monitor socket.

    A Proxy is a 3-socket ZMQ Device that functions just like a
    QUEUE, except each message is also sent out on the monitor socket.

    A PUB socket is the most logical choice for the mon_socket, but it is not required.
    Nr6   r7   r8   r9   r;   r   r   r=   r=   N   s    
r   r=   c                       e Zd ZdZy)ThreadProxyz&Proxy in a Thread. See Proxy for more.Nr>   r;   r   r   r@   r@   \   s    0r   r@   c                       e Zd ZdZy)ProcessProxyz'Proxy in a Process. See Proxy for more.Nr>   r;   r   r   rB   rB   `   s    1r   rB   )r=   r@   rB   )r9   r3   zmq.devices.basedevicer   r   r   r   r=   r@   rB   __all__r;   r   r   <module>rE      sQ    "
  F FA# A#HIv 1)\ 129m 2r   