Mercurial > public > mercurial-scm > hg-stable
diff mercurial/wireprotoframing.py @ 37289:5fadc63ac99f
wireproto: explicit API to create outgoing streams
It is better to create outgoing streams through the reactor so the
reactor knows about what streams are active and can track them
accordingly.
Test output changes slightly because frames from subsequent responses
no longer have the "stream begin" stream flag set because the stream
is now used across all responses.
Differential Revision: https://phab.mercurial-scm.org/D2947
author | Gregory Szorc <gregory.szorc@gmail.com> |
---|---|
date | Mon, 26 Mar 2018 13:59:56 -0700 |
parents | 9bfcbe4f4745 |
children | cc5a040fe150 |
line wrap: on
line diff
--- a/mercurial/wireprotoframing.py Mon Mar 26 11:00:16 2018 -0700 +++ b/mercurial/wireprotoframing.py Mon Mar 26 13:59:56 2018 -0700 @@ -533,9 +533,11 @@ """ self._deferoutput = deferoutput self._state = 'idle' + self._nextoutgoingstreamid = 2 self._bufferedframegens = [] # stream id -> stream instance for all active streams from the client. self._incomingstreams = {} + self._outgoingstreams = {} # request id -> dict of commands that are actively being received. self._receivingcommands = {} # Request IDs that have been received and are actively being processed. @@ -638,6 +640,16 @@ application=True), } + def makeoutputstream(self): + """Create a stream to be used for sending data to the client.""" + streamid = self._nextoutgoingstreamid + self._nextoutgoingstreamid += 2 + + s = stream(streamid) + self._outgoingstreams[streamid] = s + + return s + def _makeerrorresult(self, msg): return 'error', { 'message': msg,