File: //lib64/python3.6/__pycache__/asynchat.cpython-36.opt-2.pyc
3
  \@,  �               @   s@   d dl Z d dlmZ G dd� de j�ZG dd� d�Zdd� ZdS )	�    N)�dequec               @   s�   e Zd ZdZdZdZdZd'dd�Zdd� Zd	d
� Z	dd� Z
d
d� Zdd� Zdd� Z
dd� Zdd� Zdd� Zdd� Zdd� Zdd� Zdd � Zd!d"� Zd#d$� Zd%d&� ZdS )(�
async_chati   r   zlatin-1Nc             C   s(   d| _ g | _t� | _tjj| ||� d S )N�    )�ac_in_buffer�incomingr   �
producer_fifo�asyncore�
dispatcher�__init__)�selfZsock�map� r
   � /usr/lib64/python3.6/asynchat.pyr
   C   s    zasync_chat.__init__c             C   s   t d��d S )Nzmust be implemented in subclass)�NotImplementedError)r   �datar
   r
   r   �collect_incoming_dataQ   s    z async_chat.collect_incoming_datac             C   s   | j j|� d S )N)r   �append)r   r   r
   r
   r   �_collect_incoming_dataT   s    z!async_chat._collect_incoming_datac             C   s   dj | j�}| jd d �= |S )Nr   )�joinr   )r   �dr
   r
   r   �	_get_dataW   s    zasync_chat._get_datac             C   s   t d��d S )Nzmust be implemented in subclass)r   )r   r
   r
   r   �found_terminator\   s    zasync_chat.found_terminatorc             C   sB   t |t�r| jrt|| j�}nt |t�r8|dk r8td��|| _d S )Nr   z-the number of received bytes must be positive)�
isinstance�str�use_encoding�bytes�encoding�int�
ValueError�
terminator)r   Ztermr
   r
   r   �set_terminator_   s
    zasync_chat.set_terminatorc             C   s   | j S )N)r   )r   r
   r
   r   �get_terminatorj   s    zasync_chat.get_terminatorc             C   s�  y| j | j�}W n: tk
r$   d S  tk
rJ } z| j�  d S d }~X nX t|t�rh| jrhtt| j	�}| j
| | _
�xV| j
�r�t| j
�}| j� }|s�| j
| j
� d| _
qxt|t��r|}||k r�| j
| j
� d| _
| j| | _n2| j
| j
d |� � | j
|d � | _
d| _| j�  qxt|�}| j
j|�}|dk�rp|dk�rR| j
| j
d |� � | j
|| d � | _
| j�  qxt| j
|�}|�r�||k�r�| j
| j
d | � � | j
| d � | _
P qx| j
| j
� d| _
qxW d S )Nr   r   �   ���)Zrecv�ac_in_buffer_size�BlockingIOError�OSError�handle_errorr   r   r   r   r   r   �lenr!   r   r   r   r   �find�find_prefix_at_end)r   r   ZwhyZlbr   �nZterminator_len�indexr
   r
   r   �handle_readr   sR    
	
zasync_chat.handle_readc             C   s   | j �  d S )N)�
initiate_send)r   r
   r
   r   �handle_write�   s    zasync_chat.handle_writec             C   s   | j �  d S )N)�close)r   r
   r
   r   �handle_close�   s    zasync_chat.handle_closec             C   s|   t |tttf�stdt|���| j}t|�|krdx>tdt|�|�D ]}| j	j
|||| � � qBW n| j	j
|� | j�  d S )Nz#data argument must be byte-ish (%r)r   )r   r   �	bytearray�
memoryview�	TypeError�type�ac_out_buffer_sizer(   �ranger   r   r.   )r   r   Zsabs�ir
   r
   r   �push�   s    
zasync_chat.pushc             C   s   | j j|� | j�  d S )N)r   r   r.   )r   Zproducerr
   r
   r   �push_with_producer�   s    zasync_chat.push_with_producerc             C   s   dS )Nr"