U
    [e                     @   s:   d dl mZ ddlmZmZ ddlmZ G dd dZdS )    )warn   )MessageTypeHeaderFields)DBusErrorResponsec                   @   sL   e Zd ZdZdddZedd Zejdd Zdd	 Zd
d Z	dd Z
dS )Routera[  Routing for messages coming back to a client application.
    
    :param handle_factory: Constructor for an object like asyncio.Future,
        with methods *set_result* and *set_exception*. Outgoing method call
        messages will get a handle associated with them.
    :param on_unhandled: Callback for messages not otherwise dispatched.
    Nc                 C   s"   || _ || _d| _i | _i | _d S )Nr   )handle_factory_on_unhandledoutgoing_serialawaiting_replysignal_callbacks)selfr   on_unhandled r   Q/var/www/html/services/stratfitenv/lib/python3.8/site-packages/jeepney/routing.py__init__   s
    zRouter.__init__c                 C   s   | j S )N)r	   )r   r   r   r   r      s    zRouter.on_unhandledc                 C   s   t ddd || _d S )NzeSetting on_unhandled is deprecated. Please use the filter() method or simple receive() calls instead.   
stacklevel)r   r	   )r   valuer   r   r   r      s    c                 C   sD   |  j d7  _ | j |j_|jjtjkr@|   | j|jj< }|S dS )zNSet the serial number in the message & make a handle if a method call
        r   N)r
   headerserialmessage_typer   method_callr   r   )r   msghandler   r   r   outgoing   s
    
zRouter.outgoingc                 C   s    t ddd || j|||f< dS )z%Add a callback for a signal.
        zQThe subscribe_signal() method is deprecated. Please use the filter() API instead.r   r   N)r   r   )r   callbackpath	interfacememberr   r   r   subscribe_signal)   s    zRouter.subscribe_signalc                 C   s   |j }|jtjkrd|jtjd|jtjd|jtj	df}| j
|d}|dk	rd||j dS |jtjd}| j|d}|dk	r|jtjkr||j dS |jtjkr|t| dS | jr| | dS )z#Route an incoming message.
        N)r   r   r   signalfieldsgetr   r   r   r    r   bodyreply_serialr   popZmethod_return
set_resulterrorset_exceptionr   r   )r   r   hdrkeycbr'   Zreply_handler   r   r   incoming0   s*    
zRouter.incoming)N)__name__
__module____qualname____doc__r   propertyr   setterr   r!   r/   r   r   r   r   r      s   



r   N)warningsr   Z	low_levelr   r   Zwrappersr   r   r   r   r   r   <module>   s   