
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
U
    ¡ê,a@,  ã                   @   s@   d dl Z d dlmZ G dd„ de jƒZG dd„ dƒZdd„ ZdS )	é    N)Údequec                   @   s¦   e Zd ZdZdZdZdZd'dd„Zdd„ Zd	d
„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ ZdS )(Ú
async_chati   r   zlatin-1Nc                 C   s(   d| _ g | _tƒ | _tj | ||¡ d S ©Nó    )Úac_in_bufferÚincomingr   Úproducer_fifoÚasyncoreÚ
dispatcherÚ__init__)ÚselfZsockÚmap© r   ú-/opt/alt/python38/lib64/python3.8/asynchat.pyr   C   s    zasync_chat.__init__c                 C   s   t dƒ‚d S ©Nzmust be implemented in subclass©ÚNotImplementedError©r   Údatar   r   r   Úcollect_incoming_dataQ   s    z async_chat.collect_incoming_datac                 C   s   | j  |¡ d S ©N)r   Úappendr   r   r   r   Ú_collect_incoming_dataT   s    z!async_chat._collect_incoming_datac                 C   s   d  | j¡}| jd d …= |S r   )Újoinr   )r   Údr   r   r   Ú	_get_dataW   s    zasync_chat._get_datac                 C   s   t dƒ‚d S r   r   ©r   r   r   r   Úfound_terminator\   s    zasync_chat.found_terminatorc                 C   sB   t |tƒr| jrt|| jƒ}nt |tƒr8|dk r8tdƒ‚|| _d S )Nr   z-the number of received bytes must be positive)Ú
isinstanceÚstrÚuse_encodingÚbytesÚencodingÚintÚ
ValueErrorÚ
terminator)r   Ztermr   r   r   Úset_terminator_   s
    zasync_chat.set_terminatorc                 C   s   | j S r   )r%   r   r   r   r   Úget_terminatorj   s    zasync_chat.get_terminatorc              
   C   sØ  z|   | j¡}W nD tk
r&   Y d S  tk
rT } z|  ¡  W Y ¢d S d }~X Y nX t|tƒrr| jrrtt| j	ƒ}| j
| | _
| j
�rÔt| j
ƒ}|  ¡ }|s°|  | j
¡ d| _
q~t|tƒ�r|}||k rè|  | j
¡ d| _
| j| | _n2|  | j
d |… ¡ | j
|d … | _
d| _|  ¡  q~t|ƒ}| j
 |¡}|dk�rv|dk�rX|  | j
d |… ¡ | j
|| d … | _
|  ¡  q~t| j
|ƒ}|�rÀ||k�rÔ|  | j
d | … ¡ | j
| d … | _
�qÔq~|  | j
¡ d| _
q~d S )Nr   r   éÿÿÿÿ)ZrecvÚ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   ZwhyZlbr%   ÚnZterminator_lenÚindexr   r   r   Úhandle_readr   sR    

	



zasync_chat.handle_readc                 C   s   |   ¡  d S r   )Úinitiate_sendr   r   r   r   Úhandle_writeº   s    zasync_chat.handle_writec                 C   s   |   ¡  d S r   )Úcloser   r   r   r   Úhandle_close½   s    zasync_chat.handle_closec                 C   sx   t |tttfƒstdt|ƒƒ‚| j}t|ƒ|kr`tdt|ƒ|ƒD ]}| j	 
|||| … ¡ q@n| j	 
|¡ |  ¡  d S )Nz#data argument must be byte-ish (%r)r   )r   r!   Ú	bytearrayÚ
memoryviewÚ	TypeErrorÚtypeÚac_out_buffer_sizer-   Úranger   r   r3   )r   r   ZsabsÚir   r   r   ÚpushÀ   s    ÿzasync_chat.pushc                 C   s   | j  |¡ |  ¡  d S r   )r   r   r3   )r   Zproducerr   r   r   Úpush_with_producerÌ   s    zasync_chat.push_with_producerc                 C   s   dS ©Né   r   r   r   r   r   ÚreadableÐ   s    zasync_chat.readablec                 C   s   | j p| j S r   )r   Ú	connectedr   r   r   r   ÚwritableØ   s    zasync_chat.writablec                 C   s   | j  d ¡ d S r   )r   r   r   r   r   r   Úclose_when_doneÜ   s    zasync_chat.close_when_donec                 C   s  | j �r| j�r| j d }|s:| j d= |d kr:|  ¡  d S | j}z|d |… }W n: tk
rŠ   | ¡ }|rz| j  |¡ n| j d= Y q Y nX t|tƒr¨| j	r¨t
|| jƒ}z|  |¡}W n tk
rÔ   |  ¡  Y d S X |�r|t|ƒk sö|t|ƒk �r
||d … | j d< n| j d= d S d S )Nr   )r   rC   r6   r;   r9   ÚmoreÚ
appendleftr   r   r    r!   r"   Úsendr+   r,   r-   )r   ÚfirstZobsr   Znum_sentr   r   r   r3   à   s8    

zasync_chat.initiate_sendc                 C   s    d| _ | jd d …= | j ¡  d S r   )r   r   r   Úclearr   r   r   r   Údiscard_buffers  s    zasync_chat.discard_buffers)NN)Ú__name__Ú
__module__Ú__qualname__r)   r;   r    r"   r   r   r   r   r   r&   r'   r2   r4   r6   r>   r?   rB   rD   rE   r3   rK   r   r   r   r   r   4   s*   
H(r   c                   @   s   e Zd Zddd„Zdd„ ZdS )Úsimple_produceré   c                 C   s   || _ || _d S r   )r   Úbuffer_size)r   r   rQ   r   r   r   r     s    zsimple_producer.__init__c                 C   sJ   t | jƒ| jkr6| jd | j… }| j| jd … | _|S | j}d| _|S d S r   )r-   r   rQ   )r   Úresultr   r   r   rF     s    zsimple_producer.moreN)rP   )rL   rM   rN   r   rF   r   r   r   r   rO     s   
rO   c                 C   s0   t |ƒd }|r,|  |d |… ¡s,|d8 }q|S r@   )r-   Úendswith)ZhaystackZneedleÚlr   r   r   r/   /  s    
r/   )r	   Úcollectionsr   r
   r   rO   r/   r   r   r   r   Ú<module>0   s
    \ 