+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$rs8s  $ z(_ProactorWritePipeTransport._pipe_closed)r(rKrLr rsr#r#)r"r$rq2s rqc@s.eZdZdZddZddZdS)_ProactorDuplexPipeTransportzTransport for duplex pipes.cCsdS)NFr#)rr#r#r$rnMsz*_ProactorDuplexPipeTransport.can_write_eofcCs tdS)N)NotImplementedError)rr#r#r$roPsz&_ProactorDuplexPipeTransport.write_eofN)r(rKrLrMrnror#r#r#r$rvHs  rvc@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)rrW _stop_servingr5)rrr#r#r$r#s z#BaseProactorEventLoop._stop_serving)r(rKrLr rrrrrr5rrrrrrrrrrrrrr#r#)r"r$rts4          (  )rM__all__rHr6rrrrrr logr Z_FlowControlMixinZ BaseTransportr Z ReadTransportrNZWriteTransportr_rqZ TransportrvrxZ BaseEventLooprr#r#r#r$s0    z M S