ñÕYf¥Nã@s_dZdgZddlZddlZddlmZddlmZddlmZddlmZdd lm Z dd lm Z dd l m Z Gd d „d e j e jƒZGdd„dee jƒZGdd„dee jƒZGdd„deƒZGdd„deee jƒZGdd„deee jƒZGdd„dejƒZdS)z¦Event loop using a proactor and related classes. A proactor is a "notify-on-completion" multiplexer. Currently a proactor is only implemented on Windows with IOCP. ÚBaseProactorEventLoopéNé)Ú base_events)Úcompat)Ú constants)Úfutures)Ússlproto)Ú transports)ÚloggercsÁeZdZdZddd‡fdd†Zdd„Zdd„Zd d „Zd d „Zd d„Z dd„Z e j rŠdd„Z ddd„Zdd„Zdd„Zdd„Z‡S)Ú_ProactorBasePipeTransportz*Base class for pipe and socket transports.NcsØtƒj||ƒ|j|ƒ||_||_||_d|_d|_d|_d|_ d|_ d|_ d|_ |jdk r–|jj ƒ|jj|jj|ƒ|dk rÔ|jjtj|dƒdS)NrF)ÚsuperÚ__init__Ú _set_extraÚ_sockÚ _protocolÚ_serverÚ_bufferÚ _read_futÚ _write_futÚ_pending_writeÚ _conn_lostÚ_closingÚ _eof_writtenZ_attachÚ_loopÚ call_soonZconnection_maderZ_set_result_unless_cancelled)ÚselfÚloopÚsockÚprotocolÚwaiterÚextraÚserver)Ú __class__©úú ) r"Ú__name__rÚappendrÚfilenorrrÚlenrÚjoin)rÚinfoÚbufsizer#r#r$Ú__repr__/s"     z#_ProactorBasePipeTransport.__repr__cCs||jdr) rVrWrXr•rr\Ú ExceptionrBr€r]r˜)rrorDr#r#r$r˜Üs    z(BaseProactorEventLoop._loop_self_readingcCs|jjdƒdS)Ns)r–rm)rr#r#r$Ú_write_to_selfîsz$BaseProactorEventLoop._write_to_selfédcs5d‡‡‡‡‡‡fdd†‰ˆjˆƒdS)Ncs�yÈ|dk r¥|jƒ\}}ˆjr@tjdˆ||ƒˆƒ}ˆdk rƒˆj||ˆdddd|idˆƒn"ˆj||dd|idˆƒˆjƒrµdSˆjjˆƒ}Wn t k rL}zbˆj ƒdkrˆj dd d |d ˆiƒˆj ƒnˆjr:tjd ˆd dƒWYdd}~Xn?t jk rjˆj ƒYn!X|ˆjˆj ƒ<|jˆƒdS)Nz#%r got a new connection from %r: %rr„Tr r|r!rr=zAccept failed on a socketr>rHzAccept failed on socket %rr<éÿÿÿÿ)rVZ_debugr rAr‡rƒr‹rWr’r[r*rBr7rr\r�r])roZconnZaddrrrD)rÚprotocol_factoryrr!rr†r#r$rôs>            z2BaseProactorEventLoop._start_serving..loop)r)rr�rr†r!Zbacklogr#)rr�rr!rr†r$Ú_start_servingñs$$z$BaseProactorEventLoop._start_servingcCsdS)Nr#)rZ event_listr#r#r$Ú_process_eventssz%BaseProactorEventLoop._process_eventscCs5x!|jjƒD]}|jƒqW|jjƒdS)N)r�Úvaluesr6Úclear)rZfuturer#r#r$rŒsz*BaseProactorEventLoop._stop_accept_futurescCs(|jƒ|jj|ƒ|jƒdS)N)rŒrWÚ _stop_servingr7)rrr#r#r$r¢#s z#BaseProactorEventLoop._stop_serving)r(rKrLr rƒr‡rˆr‰rŠr7r�r�r‘r“r”r�r‚r˜ršržrŸrŒr¢r#r#)r"r$r{s4           (  )rMÚ__all__rHr8Úrrrrrr Úlogr Z_FlowControlMixinZ BaseTransportr Z ReadTransportrNZWriteTransportr`rsZ Transportryr{Z BaseEventLooprr#r#r#r$Ús0    € M T