B
    b
,c†  ã               @   s<   d dl Z d dl mZ d dlZd dlmZ G dd„ deƒZdS )é    N)Úselect)ÚPollerc                   s.   e Zd ZdZdZdd„ Zd‡ fdd„	Z‡  ZS )	Ú_Pollerz„Replacement for :class:`zmq.Poller`

    Ensures that the greened Poller below is used in calls to
    :meth:`zmq.Poller.poll`.
    gHáz®Gõ?c             C   sÖ   g }g }g }x¾| j D ]´\}}t|tjƒr>| | tj¡¡ qnNt|tƒrN|}n>t|dƒr€yt| 	¡ ƒ}W qŒ   t
dƒ‚Y qŒX ntd| ƒ‚|tj@ r | |¡ |tj@ r´| |¡ |tj@ r| |¡ qW |||fS )zdReturns three elements tuple with socket descriptors ready
        for gevent.select.select
        Úfilenoz(fileno() must return an valid integer fdzHSocket must be a 0MQ socket, an integer fd or have a fileno() method: %r)ZsocketsÚ
isinstanceÚzmqZSocketÚappendZ
getsockoptZFDÚintÚhasattrr   Ú
ValueErrorÚ	TypeErrorZPOLLINZPOLLOUTZPOLLERR)ÚselfÚrlistÚwlistÚxlistZsocketÚflagsÚfd© r   ú-lib/python3.7/site-packages/zmq/green/poll.pyÚ_get_descriptors   s0    






z_Poller._get_descriptorséÿÿÿÿc       	   
      s&  |dkrd}|dk rd}d}d}d}|dkr>t j |d ¡}nd}zÊy”|  ¡ \}}}x€tƒ  d¡}|sn|dkrr|S t j | j¡}zFyt |||¡ W n. t jk
rÂ } z||k	r²‚ W dd}~X Y nX W d| ¡  X qVW W n0 t jk
r } z||k	rø‚ g S d}~X Y nX W d|dkr | ¡  X dS )zOverridden method to ensure that the green version of
        Poller is used.

        Behaves the same as :meth:`zmq.core.Poller.poll`
        Nr   r   g     @@)	ÚgeventZTimeoutÚ	start_newr   ÚsuperÚpollÚ_gevent_bug_timeoutr   Zcancel)	r   Ztimeoutr   r   r   ZtoutZeventsZ_bug_timeoutÚt)Ú	__class__r   r   r   3   s:    
z_Poller.poll)r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   Ú__classcell__r   r   )r   r   r      s   "r   )r   r   r   r   Z_original_Pollerr   r   r   r   r   Ú<module>   s   