U
    Ïþe	  ã                   @   sR   d dl mZmZ d dlmZmZ d dlmZ G dd„ deƒZG dd„ dejƒZ	dS )	é    )Ú
TProcessorÚTMessageType)ÚTProtocolDecoratorÚTMultiplexedProtocol)ÚTProtocolExceptionc                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚTMultiplexedProcessorc                 C   s   d | _ i | _d S ©N)ÚdefaultProcessorÚservices©Úself© r   ú /thrift/TMultiplexedProcessor.pyÚ__init__   s    zTMultiplexedProcessor.__init__c                 C   s
   || _ dS )a)  
        If a non-multiplexed processor connects to the server and wants to
        communicate, use the given processor to handle it.  This mechanism
        allows servers to upgrade from non-multiplexed to multiplexed in a
        backwards-compatible way and still handle old clients.
        N)r	   )r   Ú	processorr   r   r   ÚregisterDefault   s    z%TMultiplexedProcessor.registerDefaultc                 C   s   || j |< d S r   )r
   )r   ÚserviceNamer   r   r   r   ÚregisterProcessor'   s    z'TMultiplexedProcessor.registerProcessorc                 C   s$   | j  ¡ D ]}| j |  |¡ q
d S r   )r
   ÚkeysÚon_message_begin)r   ÚfuncÚkeyr   r   r   r   *   s    z&TMultiplexedProcessor.on_message_beginc           
      C   sà   |  ¡ \}}}|tjkr.|tjkr.ttjdƒ‚| tj¡}|dk rz| j	rb| j	 
t||||fƒ|¡S ttjd| d d ƒ‚|d|… }||ttjƒ d … }|| jkr¾ttjd| d d ƒ‚|||f}	| j|  
t||	ƒ|¡S )Nz0TMultiplexedProtocol only supports CALL & ONEWAYr   z(Service name not found in message name: z.  z:Did you forget to use TMultiplexedProtocol in your client?zService name not found: z+Did you forget to call registerProcessor()?)ÚreadMessageBeginr   ÚCALLZONEWAYr   ZNOT_IMPLEMENTEDÚfindr   Z	SEPARATORr	   ÚprocessÚStoredMessageProtocolÚlenr
   )
r   ZiprotZoprotÚnameÚtypeZseqidÚindexr   ÚcallZstandardMessager   r   r   r   .   sB    þ ÿ
ÿþ

ÿþ

 ÿzTMultiplexedProcessor.processN)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r   r   r   r   r      s
   	r   c                   @   s   e Zd Zdd„ Zdd„ ZdS )r   c                 C   s
   || _ d S r   ©ÚmessageBegin)r   Zprotocolr&   r   r   r   r   N   s    zStoredMessageProtocol.__init__c                 C   s   | j S r   r%   r   r   r   r   r   Q   s    z&StoredMessageProtocol.readMessageBeginN)r"   r#   r$   r   r   r   r   r   r   r   M   s   r   N)
Zthrift.Thriftr   r   Zthrift.protocolr   r   Zthrift.protocol.TProtocolr   r   r   r   r   r   r   Ú<module>   s   4