3
ò\ð]"  ã               @   s4   d dl Z ddlmZ d dlmZ G dd„ deƒZdS )é    Né   )Úpacket)Úurllibc               @   s0   e Zd ZdZdZddd„Zddd„Zd	d
„ ZdS )ÚPayloadzEngine.IO payload.é   Nc             C   s    |pg | _ |d k	r| j|ƒ d S )N)ÚpacketsÚdecode)Úselfr   Úencoded_payload© r   ú;/tmp/pip-build-mqc4i71p/python-engineio/engineio/payload.pyÚ__init__   s    
zPayload.__init__Fc             C   sÐ   d}xš| j D ]�}|j|d�}t|ƒ}|rD|t|ƒjdƒd | 7 }qd}x*|dkrrtj|d ƒ| }t|d ƒ}qJW |js„|d7 }n|d7 }||d	 | 7 }qW |d
k	rÌdt|ƒjƒ  d |jddƒ d }|S )z$Encode the payload for transmission.ó    )Úb64zutf-8ó   :r   é
   ó    ó   ó   ÿNs   ___eio[s   ]("ó   "s   \"s   ");)	r   ÚencodeÚlenÚstrÚsixÚint2byteÚintÚbinaryÚreplace)r	   r   Zjsonp_indexr
   ÚpktÚencoded_packetÚ
packet_lenZ
binary_lenr   r   r   r      s&    


zPayload.encodec             C   s”  g | _ t|ƒdkrdS |jdƒr4tjj|ƒd d }d}tj|dd… ƒdk�rx®|t|ƒk rþt| j ƒ| jkrvt	dƒ‚d}|d7 }xDtj|||d … ƒdkrÆ|d tj|||d … ƒ }|d7 }q„W | j j
tj||d |d | … d	�ƒ ||d 7 }qRW nŽ|jd
ƒ}x‚|t|ƒk �rŽt| j ƒ| jk�r6t	dƒ‚|jd|ƒ}t|||… ƒ}||d |d | … }| j j
tj|d	�ƒ |d | }�qW dS )zDecode a transmitted payload.r   Ns   d=ó   dr   zToo many packets in payloadéÿ   r   )r   zutf-8ú:)r   r   Ú
startswithr   ÚparseÚparse_qsr   Úbyte2intÚmax_decode_packetsÚ
ValueErrorÚappendr   ZPacketr   Úfindr   )r	   r
   Úir    Újr   r   r   r   r   ,   s:    



zPayload.decode)NN)FN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r(   r   r   r   r   r   r   r   r      s
   

r   )r   Ú r   Z	six.movesr   Úobjectr   r   r   r   r   Ú<module>   s   