o
    Zh                     @   sp   d Z ddlZddlmZmZmZ G dd dZG dd deeZG dd	 d	eeZG d
d deeZ	g dZ
dS )zProxy classes and functions.    N)DeviceProcessDeviceThreadDevicec                   @   sN   e Zd ZdZejfddZdd Zdd Zdd	 Z	d
d Z
dd Zdd ZdS )	ProxyBasez"Base class for overriding methods.c                 C   s,   t j| ||d || _g | _g | _g | _d S )N)in_typeout_type)r   __init__mon_type
_mon_binds_mon_connects_mon_sockopts)selfr   r   r	    r   N/var/www/html/lang_env/lib/python3.10/site-packages/zmq/devices/proxydevice.pyr      s
   
zProxyBase.__init__c                 C      | j | dS )zaEnqueue ZMQ address for binding on mon_socket.

        See zmq.Socket.bind for details.
        N)r
   appendr   addrr   r   r   bind_mon      zProxyBase.bind_monc                 O   s0   | j |g|R i |}| | d|  |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_reserve_random_portr   )r   r   argskwargsportr   r   r   bind_mon_to_random_port   s   z!ProxyBase.bind_mon_to_random_portc                 C   r   )zgEnqueue ZMQ address for connecting on mon_socket.

        See zmq.Socket.connect for details.
        N)r   r   r   r   r   r   connect_mon)   r   zProxyBase.connect_monc                 C   s   | j ||f dS )zfEnqueue setsockopt(opt, value) for mon_socket

        See zmq.Socket.setsockopt for details.
        N)r   r   )r   optvaluer   r   r   setsockopt_mon0   s   zProxyBase.setsockopt_monc                 C   s~   t | \}}| j}|| j}| j| | jD ]
\}}||| q| j	D ]}|
| q'| jD ]}|| q2|||fS N)r   _setup_sockets_contextsocketr	   Z_socketsr   r   
setsockoptr
   bindr   connect)r   insoutsctxmonsr   r   Zifacer   r   r   r    7   s   


zProxyBase._setup_socketsc                 C   s    |   \}}}t||| d S r   )r    zmqproxy)r   r&   r'   r)   r   r   r   
run_deviceI   s   zProxyBase.run_deviceN)__name__
__module____qualname____doc__r*   ZPUBr   r   r   r   r   r    r,   r   r   r   r   r   
   s    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r-   r.   r/   r0   r   r   r   r   r2   N       r2   c                   @   r1   )ThreadProxyz&Proxy in a Thread. See Proxy for more.Nr3   r   r   r   r   r5   \   r4   r5   c                   @   r1   )ProcessProxyz'Proxy in a Process. See Proxy for more.Nr3   r   r   r   r   r6   `   r4   r6   )r2   r5   r6   )r0   r*   Zzmq.devices.basedevicer   r   r   r   r2   r5   r6   __all__r   r   r   r   <module>   s    D