/// <summary>
        /// Function called to handle the reading of the stream
        /// </summary>
        /// <param name="stm">The reading stream</param>
        protected override void OnRead(PipelineStream stm)
        {
            try
            {
                while (!stm.Eof)
                {
                    DynamicStreamDataKey2 key = new DynamicStreamDataKey2("Root", Container, Graph.Logger, State);

                    DataReader reader = new DataReader(stm);

                    key.FromReader(reader);

                    // Only fill in the frame if we read something, should this exit if it continues to read nothing?
                    if (reader.ByteCount > 0)
                    {
                        WriteOutput(new DataFrame(key));
                    }
                }
            }
            catch (ThreadAbortException)
            {
                throw;
            }
            catch (EndOfStreamException)
            {
                // End of stream, do nothing
            }
            catch (Exception e)
            {
                LogException(e);
            }
        }
 /// <summary>
 /// Default constructor
 /// </summary>
 protected BaseStreamPipelineNode()
 {
     _input = new PipelineStream();
     _lockObject = new object();
 }
 /// <summary>
 /// Function called by the thread
 /// </summary>
 /// <param name="stm">Reading stream</param>
 protected abstract void OnRead(PipelineStream stm);