+eN@s_dZdgZddlZddlZddlmZddlmZddlmZddlmZdd lm Z dd lm Z dd l m Z Gd d d e j e jZGdddee jZGdddee jZGdddeZGdddeee jZGdddeee jZGdddejZdS)zEvent 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. BaseProactorEventLoopN) base_events)compat) constants)futures)sslproto) transports)loggercseZdZdZdddfddZddZddZd d Zd d Ze j rud dZ ndddZ ddZ ddZddZS)_ProactorBasePipeTransportz*Base class for pipe and socket transports.Ncstj|||j|||_||_||_d|_d|_d|_d|_ d|_ d|_ d|_ |jdk r|jj n|jj|jj||dk r|jjtj|dndS)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)selfloopsockprotocolwaiterextraserver) __class__ ) r"__name__rappendrfilenorrrlenrjoin)rinfobufsizer#r#r$__repr__/s"   z#_ProactorBasePipeTransport.__repr__cCs||jdr5)rr\r#r#r$rr8s   z(_ProactorWritePipeTransport._pipe_closed)r(rKrLr rrr#r#)r"r$rp2s rpc@s.eZdZdZddZddZdS)_ProactorDuplexPipeTransportzTransport for duplex pipes.cCsdS)NFr#)rr#r#r$rmMsz*_ProactorDuplexPipeTransport.can_write_eofcCs tdS)N)NotImplementedError)rr#r#r$rnPsz&_ProactorDuplexPipeTransport.write_eofN)r(rKrLrMrmrnr#r#r#r$ruHs  ruc@s:eZdZdZddZddZddZdS) _ProactorSocketTransportz Transport for connected sockets.cCs||jd            "z2BaseProactorEventLoop._start_serving..loop)r)rrrrr!r#)rrrr!rrr$_start_servings$$z$BaseProactorEventLoop._start_servingcCsdS)Nr#)rZ event_listr#r#r$_process_eventssz%BaseProactorEventLoop._process_eventscCs5x!|jjD]}|jqW|jjdS)N)r}valuesr4clear)rZfuturer#r#r$rsz*BaseProactorEventLoop._stop_accept_futurescCs(|j|jj||jdS)N)rrV _stop_servingr5)rrr#r#r$r#s z#BaseProactorEventLoop._stop_serving)r(rKrLr rrrrrr5rrrrrrr~rrrrrrr#r#)r"r$rts4          (  )rM__all__rHr6rrrrrr logr Z_FlowControlMixinZ BaseTransportr Z ReadTransportrNZWriteTransportr^rpZ TransportrurwZ BaseEventLooprr#r#r#r$s0    z M S