й¼]Ã.ã@skddlZddlmZGdd„dejƒZGdd„dƒZGdd„dƒZd d „ZdS) éN)Údequec@súeZdZdZdZdZdZdddd„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-1NcCs8d|_g|_tƒ|_tjj|||ƒdS)Nó)Ú ac_in_bufferÚincomingrÚ producer_fifoÚasyncoreÚ dispatcherÚ__init__)ÚselfÚsockÚmap©rú-/opt/alt/python35/lib64/python3.5/asynchat.pyr Cs   zasync_chat.__init__cCstdƒ‚dS)Nzmust be implemented in subclass)ÚNotImplementedError)r ÚdatarrrÚcollect_incoming_dataQsz async_chat.collect_incoming_datacCs|jj|ƒdS)N)rÚappend)r rrrrÚ_collect_incoming_dataTsz!async_chat._collect_incoming_datacCs&dj|jƒ}|jdd…=|S)Nr)Újoinr)r ÚdrrrÚ _get_dataWszasync_chat._get_datacCstdƒ‚dS)Nzmust be implemented in subclass)r)r rrrÚfound_terminator\szasync_chat.found_terminatorcCsat|tƒr-|jr-t||jƒ}n't|tƒrT|dkrTtdƒ‚||_dS)Nrz-the number of received bytes must be positive)Ú isinstanceÚstrÚ use_encodingÚbytesÚencodingÚintÚ ValueErrorÚ terminator)r ZtermrrrÚset_terminator_s  zasync_chat.set_terminatorcCs|jS)N)r )r rrrÚget_terminatorjszasync_chat.get_terminatorcCsiy|j|jƒ}WnHtk r.dSYn3tk r`}z|jƒdSWYdd}~XnXt|tƒr‹|jr‹tt|j ƒ}|j ||_ xÇ|j rdt |j ƒ}|j ƒ}|sä|j |j ƒd|_ qžt|tƒrw|}||kr1|j |j ƒd|_ |j||_qa|j |j d|…ƒ|j |d…|_ d|_|jƒqžt |ƒ}|j j|ƒ}|dkrî|dkrÇ|j |j d|…ƒ|j ||d…|_ |jƒqžt|j |ƒ}|rH||krD|j |j d| …ƒ|j | d…|_ Pqž|j |j ƒd|_ qžWdS)Nrrééÿÿÿÿ)ÚrecvÚac_in_buffer_sizeÚBlockingIOErrorÚOSErrorÚ handle_errorrrrrrrÚlenr"rrr rÚfindÚfind_prefix_at_end)r rÚwhyZlbr ÚnZterminator_lenÚindexrrrÚ handle_readrsR             zasync_chat.handle_readcCs|jƒdS)N)Ú initiate_send)r rrrÚ handle_writeºszasync_chat.handle_writecCs|jƒdS)N)Úclose)r rrrÚ handle_close½szasync_chat.handle_closecCsªt|tttfƒs-tdt|ƒƒ‚|j}t|ƒ|krŒxQtdt|ƒ|ƒD]$}|j j ||||…ƒqaWn|j j |ƒ|j ƒdS)Nz#data argument must be byte-ish (%r)r) rrÚ bytearrayÚ memoryviewÚ TypeErrorÚtypeÚac_out_buffer_sizer*Úrangerrr1)r rZsabsÚirrrÚpushÀs %zasync_chat.pushcCs|jj|ƒ|jƒdS)N)rrr1)r ZproducerrrrÚpush_with_producerÌszasync_chat.push_with_producercCsdS)Nr#r)r rrrÚreadableÐszasync_chat.readablecCs|jp|j S)N)rÚ connected)r rrrÚwritableØszasync_chat.writablecCs|jjdƒdS)N)rr)r rrrÚclose_when_doneÜszasync_chat.close_when_donecCsgx`|jrb|jrb|jd}|sL|jd=|dkrL|jƒdS|j}y|d|…}WnDtk r¯|jƒ}|rž|jj|ƒn |jd=wYnXt|tƒrÚ|j rÚt ||j ƒ}y|j |ƒ}Wn t k r|jƒdSYnX|r^|t|ƒks:|t|ƒkrT||d…|jdr@rAr1rGrrrrr4s*       H       (rc@s+eZdZddd„Zdd„ZdS)Úsimple_producericCs||_||_dS)N)rÚ buffer_size)r rrLrrrr s zsimple_producer.__init__cCset|jƒ|jkrK|jd|j…}|j|jd…|_|S|j}d|_|SdS)Nr)r*rrL)r ÚresultrrrrBs  zsimple_producer.moreN)rHrIrJr rBrrrrrKs rKc@s[eZdZddd„Zdd„Zdd„Zdd „Zd d „Zd d „ZdS)ÚfifoNcCsJddl}|jdtddƒ|s7tƒ|_nt|ƒ|_dS)Nrz(fifo class will be removed in Python 3.6Ú stacklevelé)ÚwarningsÚwarnÚDeprecationWarningrÚlist)r rTrQrrrr !s    z fifo.__init__cCs t|jƒS)N)r*rT)r rrrÚ__len__*sz fifo.__len__cCs|j S)N)rT)r rrrÚis_empty-sz fifo.is_emptycCs |jdS)Nr)rT)r rrrrE0sz fifo.firstcCs|jj|ƒdS)N)rTr)r rrrrr<3sz fifo.pushcCs$|jrd|jjƒfSdSdS)Nr#r)rN)rTÚpopleft)r rrrÚpop6s zfifo.pop) rHrIrJr rUrVrEr<rXrrrrrN s     rNcCsEt|ƒd}x.|r@|j|d|…ƒ r@|d8}qW|S)Nr#)r*Úendswith)ZhaystackZneedleÚlrrrr,Ls#r,)rÚ collectionsrr rrKrNr,rrrrÚ0s Û,