3 \@,ã@s@ddlZddlmZGdd„dejƒZGdd„dƒZdd„ZdS) éN)Údequec@s¦eZdZdZdZdZdZd'dd„Zdd„Zd d „Z d d „Z d d„Z dd„Z dd„Z dd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd „Zd!d"„Zd#d$„Zd%d&„ZdS)(Ú async_chatirzlatin-1NcCs(d|_g|_tƒ|_tjj|||ƒdS)Nó)Ú ac_in_bufferÚincomingrÚ producer_fifoÚasyncoreÚ dispatcherÚ__init__)ÚselfZsockÚmap©r ú /usr/lib64/python3.6/asynchat.pyr Cszasync_chat.__init__cCs tdƒ‚dS)Nzmust be implemented in subclass)ÚNotImplementedError)r Údatar r rÚcollect_incoming_dataQsz async_chat.collect_incoming_datacCs|jj|ƒdS)N)rÚappend)r rr r rÚ_collect_incoming_dataTsz!async_chat._collect_incoming_datacCsdj|jƒ}|jdd…=|S)Nr)Újoinr)r Údr r rÚ _get_dataWs  zasync_chat._get_datacCs tdƒ‚dS)Nzmust be implemented in subclass)r)r r r rÚfound_terminator\szasync_chat.found_terminatorcCsBt|tƒr|jrt||jƒ}nt|tƒr8|dkr8tdƒ‚||_dS)Nrz-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_terminatorcCs|jS)N)r)r r r rÚget_terminatorjszasync_chat.get_terminatorcCsÒy|j|jƒ}Wn:tk r$dStk rJ}z |jƒdSd}~XnXt|tƒrh|jrhtt|j ƒ}|j ||_ �xV|j �rÌt |j ƒ}|j ƒ}|sª|j |j ƒd|_ qxt|tƒ�r|}||krâ|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…|_ Pqx|j |j ƒd|_ qxWdS)Nrrééÿÿÿÿ)ZrecvÚac_in_buffer_sizeÚBlockingIOErrorÚOSErrorÚ handle_errorrrrrrrÚlenr!rrrrÚfindÚfind_prefix_at_end)r rZwhyZlbrÚnZterminator_lenÚindexr r rÚ handle_readrsR               zasync_chat.handle_readcCs |jƒdS)N)Ú initiate_send)r r r rÚ handle_writeºszasync_chat.handle_writecCs |jƒdS)N)Úclose)r r r rÚ handle_close½szasync_chat.handle_closecCs|t|tttfƒstdt|ƒƒ‚|j}t|ƒ|krdx>tdt|ƒ|ƒD]}|j j ||||…ƒqBWn |j j |ƒ|j ƒdS)Nz#data argument must be byte-ish (%r)r) rrÚ bytearrayÚ memoryviewÚ TypeErrorÚtypeÚac_out_buffer_sizer(Úrangerrr.)r rZsabsÚir r rÚpushÀs   zasync_chat.pushcCs|jj|ƒ|jƒdS)N)rrr.)r Zproducerr r rÚpush_with_producerÌs zasync_chat.push_with_producercCsdS)Nr"r )r r r rÚreadableÐszasync_chat.readablecCs|jp |j S)N)rÚ connected)r r r rÚwritableØszasync_chat.writablecCs|jjdƒdS)N)rr)r r r rÚclose_when_doneÜszasync_chat.close_when_donecCs�x|jo|j�r|jd}|s<|jd=|dkr<|jƒdS|j}y|d|…}Wn8tk rŠ|jƒ}|r||jj|ƒn|jd=wYnXt|tƒr¨|j r¨t ||j ƒ}y|j |ƒ}Wnt k rÒ|jƒdSX|�r|t|ƒksô|t|ƒk�r||d…|jd<n|jd=dSWdS)Nr)rr<r1r6r4ÚmoreÚ appendleftrrrrrÚsendr&r'r()r ÚfirstZobsrZnum_sentr r rr.às8  zasync_chat.initiate_sendcCs d|_|jdd…=|jjƒdS)Nr)rrrÚclear)r r r rÚdiscard_bufferss zasync_chat.discard_buffers)NN)Ú__name__Ú __module__Ú __qualname__r$r6rrr rrrrr r!r-r/r1r9r:r;r=r>r.rDr r r rr4s*  H (rc@seZdZddd„Zdd„ZdS)Úsimple_producerécCs||_||_dS)N)rÚ buffer_size)r rrJr r rr szsimple_producer.__init__cCsJt|jƒ|jkr6|jd|j…}|j|jd…|_|S|j}d|_|SdS)Nr)r(rrJ)r Úresultr r rr?szsimple_producer.moreN)rI)rErFrGr r?r r r rrHs rHcCs6t|ƒd}x$|r0|j|d|…ƒ r0|d8}qW|S)Nr")r(Úendswith)ZhaystackZneedleÚlr r rr*/s  r*)rÚ collectionsrr rrHr*r r r rÚ0s  \