B
    b
,cc                 @   s^   d Z ddlZddlZddlmZmZ ddlZddlmZ ddl	m
Z
 G dd de
ZdgZdS )	zOZAP Authenticator integrated with the asyncio IO loop.

.. versionadded:: 15.2
    N)AnyOptional)Poller   )Authenticatorc                   s~   e Zd ZU dZee ed< eed< ded< ded ed fd	d
ZddddZ	dd fddZ
dd fddZ  ZS )AsyncioAuthenticatorz1ZAP authentication for use in the asyncio IO loop_AsyncioAuthenticator__poller_AsyncioAuthenticator__taskzzmq.asyncio.Socket
zap_socketNzzmq.Context)contextloopc                s8   t  | |d k	r(t| jj d d | _d | _d S )Nz (loop) is deprecated and ignored)super__init__warningswarn	__class____name__r   r	   )selfr   r   )r    /lib/python3.7/site-packages/zmq/auth/asyncio.pyr      s
    zAsyncioAuthenticator.__init__)returnc                sL   xF| j d k	rF| j  I d H }| jt|kr| j I d H }| | qW d S )N)r   Zpollr
   dictZrecv_multipartZhandle_zap_message)r   Zeventsmsgr   r   r   Z__handle_zap!   s
    z!AsyncioAuthenticator.__handle_zapc                s8   t    t | _| j| jtj t	| 
 | _dS )zStart ZAP authenticationN)r   startr   r   registerr
   zmqZPOLLINasyncioZensure_future!_AsyncioAuthenticator__handle_zapr	   )r   )r   r   r   r   (   s    
zAsyncioAuthenticator.startc                s8   | j r| j   | jr*| j| j d| _t   dS )zStop ZAP authenticationN)r	   Zcancelr   Z
unregisterr
   r   stop)r   )r   r   r   r   /   s    
zAsyncioAuthenticator.stop)NN)r   
__module____qualname____doc__r   r   __annotations__r   r   r   r   r   __classcell__r   r   )r   r   r      s   
r   )r!   r   r   typingr   r   r   Zzmq.asyncior   baser   r   __all__r   r   r   r   <module>   s   &