
    Zd!                         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
dS )zProxy classes and functions.    N)DeviceProcessDeviceThreadDevicec                   J    e Zd ZdZej        fdZd Zd Zd Z	d Z
d Zd Zd	S )
	ProxyBasez"Base class for overriding methods.c                 l    t          j        | ||           || _        g | _        g | _        g | _        d S )N)in_typeout_type)r   __init__mon_type
_mon_binds_mon_connects_mon_sockopts)selfr	   r
   r   s       7lib/python3.11/site-packages/zmq/devices/proxydevice.pyr   zProxyBase.__init__   s=    gAAAA     c                 :    | j                             |           dS )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|R i |}|                     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   sF     )t(??????gt,---r   c                 :    | j                             |           dS )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                             ||f           dS )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                 r   t          j        |           \  }}| j        }|                    | j                  }| j                            |           | j        D ]\  }}|                    ||           | j	        D ]}|
                    |           | j        D ]}|                    |           |||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mzz$-((T""" , 	( 	(JCOOC''''_ 	 	EIIe' 	  	 ELLD$r   c                 b    |                                  \  }}}t          j        |||           d S r%   )r&   zmqproxy)r   r-   r.   r0   s       r   
run_devicezProxyBase.run_deviceI   s3    --//T4	#tT"""""r   N)__name__
__module____qualname____doc__r3   PUBr   r   r   r   r#   r&   r5    r   r   r   r   
   s        ,,367        % % %  ( ( (0 0 0  $# # # # #r   r   c                       e Zd ZdZdS )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dS )ThreadProxyz&Proxy in a Thread. See Proxy for more.Nr>   r;   r   r   r@   r@   \   s        0000r   r@   c                       e Zd ZdZdS )ProcessProxyz'Proxy in a Process. See Proxy for more.Nr>   r;   r   r   rB   rB   `   s        1111r   rB   )r=   r@   rB   )r9   r3   zmq.devices.basedevicer   r   r   r   r=   r@   rB   __all__r;   r   r   <module>rE      s    " "
 


 F F F F F F F F F FA# A# A# A# A# A# A# A#H    Iv   1 1 1 1 1)\ 1 1 12 2 2 2 29m 2 2 2  r   