3
�
�^@, c @ 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__)�selfZsockZmap� r � /usr/lib64/python3.6/asynchat.pyr
C s zasync_chat.__init__c C � t d��d S �Nzmust be implemented in subclass�ZNotImplementedError�r �datar r r
�collect_incoming_dataQ � z async_chat.collect_incoming_datac C s | j j|� d S �N)r �appendr r r r
�_collect_incoming_dataT r z!async_chat._collect_incoming_datac C s dj | j�}| jd d �= |S r )Zjoinr )r Zdr r r
� _get_dataW s zasync_chat._get_datac C r r r �r r r r
�found_terminator\ r 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�intZ
ValueError�
terminator)r Ztermr r r
�set_terminator_ s
zasync_chat.set_terminatorc C s | j S r )r! r r r r
�get_terminatorj r 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 � i����)Zrecv�ac_in_buffer_sizeZBlockingIOError�OSError�handle_errorr r r r r r �lenr# r r r! r Zfind�find_prefix_at_end)r r ZwhyZlbr! ZnZterminator_lenZindexr r r
�handle_readr sR
zasync_chat.handle_readc C � | j � d S r )�
initiate_sendr r r r
�handle_write� r zasync_chat.handle_writec C r+ r )Zcloser r r r
�handle_close� r 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 Z bytearrayZ
memoryview� TypeErrorZtype�ac_out_buffer_sizer( Zranger r r, )r r ZsabsZir r r
�push� s
zasync_chat.pushc C s | j j|� | j� d S r )r r r, )r Zproducerr r r
�push_with_producer� s zasync_chat.push_with_producerc C s dS �Nr$ r r r r r
�readable� s zasync_chat.readablec C s | j p| j S r )r � connectedr r r r
�writable� � zasync_chat.writablec C s | j jd � d S r )r r r r r r
�close_when_done� r7 zasync_chat.close_when_donec C s �x| j o| j�r| j d }|s<| j d= |d kr<| j� d S | j}y|d |� }W n8 tk
r� |j� }|r|| j j|� n| j d= wY nX t|t�r�| j r�t
|| j�}y| j|�}W n t
k
r� | j� d S X |�r|t|�k s�|t|�k �r||d � | j d<