a ze9,@s@ddlZddlmZGdddejZGdddZddZdS) N)dequec@seZdZdZdZdZdZd'ddZddZd d Z d d Z d dZ ddZ ddZ ddZddZddZddZddZddZdd Zd!d"Zd#d$Zd%d&ZdS)( async_chatirzlatin-1NcCs(d|_g|_t|_tj|||dSN) ac_in_bufferincomingr producer_fifoasyncore dispatcher__init__)selfsockmapr|YdS0t|tr\|jr\tt|j }|j ||_ |j rt |j }| }|s| |j d|_ qht|tr|}||kr| |j d|_ |j||_n2| |j d||j |d|_ d|_|qht |}|j |}|dkr`|dkrB| |j d||j ||d|_ |qht|j |}|r||kr| |j d| |j | d|_ qqh| |j d|_ qhdS)Nrr)recvac_in_buffer_sizeBlockingIOErrorOSError handle_errorrr r!r"r#rlenr(rr$r&rfindfind_prefix_at_end)r rZlbr&nZterminator_lenindexrrr handle_readrsR                zasync_chat.handle_readcCs |dSr) initiate_sendrrrr handle_writeszasync_chat.handle_writecCs |dSr)closerrrr handle_closeszasync_chat.handle_closecCsxt|tttfstdt||j}t||kr`tdt||D]}|j ||||q@n |j || dS)Nz#data argument must be byte-ish (%r)r) rr" bytearray memoryview TypeErrortypeac_out_buffer_sizer/rangerrr5)r rZsabsirrrpushs  zasync_chat.pushcCs|j||dSr)rrr5)r Zproducerrrrpush_with_producers zasync_chat.push_with_producercCsdSNrrrrrreadableszasync_chat.readablecCs|jp |j Sr)r connectedrrrrwritableszasync_chat.writablecCs|jddSr)rrrrrrclose_when_doneszasync_chat.close_when_donecCs|jr|jr|jd}|s:|jd=|dur:|dS|j}z|d|}Wn8ty|}|rx|j|n|jd=YqYn0t|tr|j rt ||j }z| |}Wnt y|YdS0|r|t|ks|t|kr||d|jd<n|jd=dSdS)Nr)rrEr8r=r;more appendleftrr r!r"r#sendr-r.r/)r firstZobsrZnum_sentrrrr5s8     zasync_chat.initiate_sendcCs d|_|jdd=|jdSr)rrrclearrrrrdiscard_bufferss zasync_chat.discard_buffers)NN)__name__ __module__ __qualname__r+r=r!r#r rrrrr'r(r4r6r8r@rArDrFrGr5rMrrrrr4s*  H (rc@seZdZdddZddZdS)simple_producercCs||_||_dSr)r buffer_size)r rrSrrrr szsimple_producer.__init__cCsJt|j|jkr6|jd|j}|j|jd|_|S|j}d|_|SdSr)r/rrS)r resultrrrrHszsimple_producer.moreN)rR)rNrOrPr rHrrrrrQs rQcCs0t|d}|r,||d|s,|d8}q |SrB)r/endswith)ZhaystackZneedlelrrrr1/s  r1)r collectionsrr rrQr1rrrr0s  \