void _tryDispatch()

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;
      }
    }
  }