/// <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> /// 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); } }
private static IEnumerable <DataFrame> ReadFrames(IDataAdapter client, DynamicScriptContainer container, Logger logger, object config) { DataReader reader = new DataReader(new DataAdapterToStream(client)); while (!reader.Eof) { DynamicStreamDataKey2 key = new DynamicStreamDataKey2("Root", container, logger, config); try { key.FromReader(reader); } catch (ThreadAbortException) { throw; } catch (EndOfStreamException) { // End of stream, do nothing } catch (Exception e) { logger.LogException(e); yield break; } // Only fill in the frame if we read something, should this exit if it continues to read nothing? if (reader.ByteCount > 0) { yield return(new DataFrame(key)); } } }
/// <summary> /// Method called when a new frame arraives /// </summary> /// <param name="frame">The frame</param> protected override void OnInput(DataFrame frame) { DataNode[] nodes = frame.SelectNodes(SelectionPath); foreach (DataNode node in nodes) { try { MemoryStream stm = new MemoryStream(node.ToArray()); DataReader reader = new DataReader(stm); string name = node.Name; DataKey parentKey = node.Parent; node.RemoveNode(); while (stm.Position < stm.Length) { DynamicStreamDataKey2 key = new DynamicStreamDataKey2(name, Container, Graph.Logger, State); reader.ByteCount = 0; key.FromReader(reader); // The reader clearly didn't care if (reader.ByteCount == 0) { break; } parentKey.AddSubNode(key); frame.Current = key; } } catch (EndOfStreamException) { } catch (ThreadAbortException) { throw; } catch (Exception ex) { LogException(ex); } } WriteOutput(frame); }
private static IEnumerable<DataFrame> ReadFrames(IDataAdapter client, DynamicScriptContainer container, Logger logger, object config) { DataReader reader = new DataReader(new DataAdapterToStream(client)); while (!reader.Eof) { DynamicStreamDataKey2 key = new DynamicStreamDataKey2("Root", container, logger, config); try { key.FromReader(reader); } catch (ThreadAbortException) { throw; } catch (EndOfStreamException) { // End of stream, do nothing } catch (Exception e) { logger.LogException(e); yield break; } // Only fill in the frame if we read something, should this exit if it continues to read nothing? if (reader.ByteCount > 0) { yield return new DataFrame(key); } } }