B
    b
,c"                 @   sr   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	dd	dg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   6lib/python3.7/site-packages/zmq/devices/proxydevice.pyr      s
    zProxyBase.__init__c             C   s   | 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   s    zProxyBase.bind_monc             O   s(   | j |f||}| d||f  |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)Z_reserve_random_portr   )r   r   argskwargsZportr   r   r   bind_mon_to_random_port   s    z!ProxyBase.bind_mon_to_random_portc             C   s   | j | dS )zgEnqueue ZMQ address for connecting on mon_socket.

        See zmq.Socket.connect for details.
        N)r   r   )r   r   r   r   r   connect_mon*   s    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_mon1   s    zProxyBase.setsockopt_monc             C   s   t | \}}| j}|| j}| j| x| jD ]\}}||| q4W x| j	D ]}|
| qTW x| jD ]}|| qnW |||fS )N)r   _setup_socketsZ_contextZsocketr	   Z_socketsr   r   Z
setsockoptr
   Zbindr   Zconnect)r   insoutsZctxmonsr   r   Zifacer   r   r   r   8   s    zProxyBase._setup_socketsc             C   s    |   \}}}t||| d S )N)r   zmqproxy)r   r   r   r   r   r   r   
run_deviceJ   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               @   s   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#   r$   r   r   r   r   r%   O   s   r%   c               @   s   e Zd ZdZdS )ThreadProxyz&Proxy in a Thread. See Proxy for more.N)r!   r"   r#   r$   r   r   r   r   r&   ]   s   r&   c               @   s   e Zd ZdZdS )ProcessProxyz'Proxy in a Process. See Proxy for more.N)r!   r"   r#   r$   r   r   r   r   r'   a   s   r'   )r$   r   Zzmq.devices.basedevicer   r   r   r   r%   r&   r'   __all__r   r   r   r   <module>   s   E