<div><span class="gmail_quote">On 7/11/05, <b class="gmail_sendername">Jp Calderone</b> <<a href="mailto:exarkun@divmod.com">exarkun@divmod.com</a>> wrote:</span>
<blockquote class="gmail_quote" style="PADDING-LEFT: 1ex; MARGIN: 0px 0px 0px 0.8ex; BORDER-LEFT: #ccc 1px solid">On Mon, 11 Jul 2005 12:16:35 -0500, Justin Johnson <<a href="mailto:justinjohnson@gmail.com">justinjohnson@gmail.com
</a>> wrote:<br>>On 7/11/05, Jp Calderone <<a href="mailto:exarkun@divmod.com">exarkun@divmod.com</a>> wrote:<br>>><br>> [snip]<br>><br>>> 3. Notify the ProcessProtocol via protocol.makeConnection
(not sure<br>>> > why, looking at win32eventreactor)<br>>><br>>> makeConnection is the method that's actually part of IProtocol (even<br>>> though ProcessProtocol doesn't implement IProtocol, it still adheres to its
<br>>> API in this regard). Generally, all it does is set the .transport attribute<br>>> on the protocol instance and then call connectionMade. This might seem<br>>> pointless in the case of processes, but since it maintains consistency with
<br>>> other kinds of transports, it is useful.<br>><br>> So the Process class is the transport? In win32eventreactor, 3 threads are<br>>started that loop on reading stdout and stderr and writing data from the
<br>>outQueue to stdin. It seems to me that I would not use these threads, but<br>>instead have each of these 3 file handles associated with the IOCP. Then the<br>>methods defined in ops.py would be used to handle events on those handles,
<br>>resulting in transport methods being called. These transport methods would<br>>be methods on the Process class, which would result in methods on a single<br>>instance of the ProcessProtocol being called. This single instance of the
<br>>ProcessProtocol would be shared by all of the 3 file handles. Am I<br>>understanding correctly? Are write and loseConnection the only methods the<br>>Process would need to implement from ITransport?<br><br>That mostly sounds correct, except the last bit. What makes it a transport is that it implements /all/ of ITransport. Moreover, ProcessProtocols expect their transport to be an IProcessTransport, which adds several methods on top of ITransport. Everything in each of those interfaces needs to be implemented.
</blockquote>
<div> </div>
<div>Ahh... I missed those interfaces because I was starting with win32eventreactor.Process, which doesn't implement either ITransport or IProcessTransport (either with an implements() or by defining all of those methods).
</div>
<div> </div>
<div>After some more thought about this I think I will have to define new xxxOps methods for stdout and stderr (and maybe stdin as well). These ops' ovDone methods will call the methods on the transport (Process) appropriate for ProcessProtocols.
</div><br>
<blockquote class="gmail_quote" style="PADDING-LEFT: 1ex; MARGIN: 0px 0px 0px 0.8ex; BORDER-LEFT: #ccc 1px solid">For reference, <<a href="http://twistedmatrix.com/documents/current/api/twisted.internet.interfaces.ITransport.html">
http://twistedmatrix.com/documents/current/api/twisted.internet.interfaces.ITransport.html</a>> and <<a href="http://twistedmatrix.com/documents/current/api/twisted.internet.interfaces.IProcessTransport.html">http://twistedmatrix.com/documents/current/api/twisted.internet.interfaces.IProcessTransport.html
</a>>.<br><br>Jp<br><br>_______________________________________________<br>Twisted-Python mailing list<br><a href="mailto:Twisted-Python@twistedmatrix.com">Twisted-Python@twistedmatrix.com</a><br><a href="http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python">
http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python</a><br></blockquote></div><br>