protected override void UpdateInternal(float unscaledDeltaTime)
        {
            if (m_Settings.bypass)
            {
                return;
            }

            lock (m_StreamEvents)
            {
                m_Counter = 0;
                while (m_Counter < m_Settings.limit && m_StreamQueue.TryDequeue(out var stream))
                {
                    if (!m_StreamEvents.TryGetValue(stream, out var eventType))
                    {
                        Debug.LogError($"StreamMessageType not found for {stream.ToString()}");
                    }

                    // do nothing if the original message type has been cancelled, do not count towards limit
                    if (eventType.HasValue)
                    {
                        m_StreamOutput.SendStreamEvent(stream, eventType.Value);
                        ++m_Counter;
                    }

                    m_StreamEvents.Remove(stream);
                }
            }

            if (m_State == State.WaitingToFinish && m_StreamQueue.IsEmpty)
            {
                m_StreamOutput.SendEnd();
                m_State = State.Idle;
            }
        }