o
    `                     @   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   1/usr/lib/python3/dist-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u 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u r2|jtjd|jtjd|jtj	df}| j
|d}|dur2||j dS |jtjd}| j|d}|durb|jtju rS||j dS |jtju rb|t| dS | jrl| | dS dS )z#Route an incoming message.
        N)r   r   r   signalfieldsgetr   r   r    r!   r   bodyreply_serialr   popmethod_return
set_resulterrorset_exceptionr   r   )r   r   hdrkeycbr(   reply_handler   r   r   incoming0   s,   
zRouter.incomingr   )__name__
__module____qualname____doc__r   propertyr   setterr   r"   r2   r   r   r   r   r      s    



r   N)warningsr   	low_levelr   r   wrappersr   r   r   r   r   r   <module>   s    