in lib/src/flowcontrol/stream_queues.dart [286:323]
void _tryDispatch() {
while (!wasTerminated && _pendingMessages.isNotEmpty) {
var handled = wasCancelled;
var message = _pendingMessages.first;
if (wasCancelled) {
_pendingMessages.removeFirst();
} else if (message is HeadersMessage || message is DataMessage) {
assert(!_incomingMessagesC.isClosed);
if (_incomingMessagesC.hasListener && !_incomingMessagesC.isPaused) {
_pendingMessages.removeFirst();
if (message is HeadersMessage) {
// NOTE: Header messages do not affect flow control - only
// data messages do.
_incomingMessagesC.add(HeadersStreamMessage(message.headers,
endStream: message.endStream));
} else if (message is DataMessage) {
if (message.bytes.isNotEmpty) {
_incomingMessagesC.add(DataStreamMessage(message.bytes,
endStream: message.endStream));
windowHandler.dataProcessed(message.bytes.length);
}
} else {
// This can never happen.
assert(false);
}
handled = true;
}
}
if (handled) {
if (message.endStream) {
onCloseCheck();
}
} else {
break;
}
}
}