o
    B]                     @   sT   d dl Z d dlZd dlZd dlmZmZ d dlmZ d dlm	Z	 G dd deZ
dS )    N)reactortask)AbstractTransportDispatcher)PySnmpErrorc                   @   s2   e Zd ZdZdd ZdddZdd Zd	d
 ZdS )TwistedDispatcherz5TransportDispatcher based on twisted.internet.reactorc                 O   s>   t |  d| _d|v r| |d  t| fdd| _d S )Nr   timeoutc                 S   s   |  t S )N)ZhandleTimerTicktime)self r
   A/usr/lib/python3/dist-packages/pysnmp/carrier/twisted/dispatch.py<lambda>   s    z,TwistedDispatcher.__init__.<locals>.<lambda>)r   __init__"_TwistedDispatcher__transportCountZsetTimerResolutionr   ZLoopingCallloopingcall)r	   argskwargsr
   r
   r   r      s   


zTwistedDispatcher.__init__        c              
   C   sJ   t js#zt   W d S  ty       tddtjt	   d S )Nzreactor error: %s;)
r   runningrunKeyboardInterruptr   join	tracebackformat_exceptionsysexc_info)r	   r   r
   r
   r   runDispatcher!   s   zTwistedDispatcher.runDispatcherc                 C   sH   | j js|  dkr| j j|  dd t| || |  jd7  _d S )Nr   F)Znow   )r   r   ZgetTimerResolutionstartr   registerTransportr   )r	   tDomainZ	transportr
   r
   r   r   ,   s   z#TwistedDispatcher.registerTransportc                 C   sV   t | |}|d urt | | |  jd8  _| jdkr'| jjr)| j  d S d S d S )Nr   r   )r   ZgetTransportunregisterTransportr   r   r   stop)r	   r    tr
   r
   r   r!   4   s   z%TwistedDispatcher.unregisterTransportN)r   )__name__
__module____qualname____doc__r   r   r   r!   r
   r
   r
   r   r      s    
	r   )r   r   r   Ztwisted.internetr   r   Zpysnmp.carrier.baser   Zpysnmp.errorr   r   r
   r
   r
   r   <module>   s
   