/// <summary> /// Tries to parse what had been collected before a new message starts. /// </summary> /// <param name="segmentContext">The current segment.</param> /// <param name="tag">The start new message tag.</param> /// <returns>If flushed.</returns> internal bool Flush(SegmentContext segmentContext, SegmentTags tag) { if ((segmentContext.IsControl || segmentContext.Tag == tag) && CurrentMessage.Any()) { foreach (var c in segmentContext.Value) { Buffer.Enqueue(c); } Buffer.Enqueue(Separators.Segment); try { if (CurrentGroupHeader != null) { CurrentMessage.Add(CurrentGroupHeader); } Item = CurrentMessage.Analyze(Separators, BuildContext()); } finally { CurrentMessage.Clear(); } return(true); } return(false); }
internal override void ProcessSegment(string segment) { if (string.IsNullOrEmpty(segment) || Separators == null) { return; } var segmentContext = new SegmentContext(segment, Separators); if (Flush(segmentContext, SegmentId.UNH)) { return; } switch (segmentContext.Tag) { case SegmentId.UNA: break; case SegmentId.UNB: Item = segmentContext.Value.ParseSegment <S_UNB>(Separators); break; case SegmentId.UNG: Item = segmentContext.Value.ParseSegment <S_UNG>(Separators); break; case SegmentId.UNH: CurrentMessage.Add(segmentContext); break; case SegmentId.UNT: try { CurrentMessage.Add(segmentContext); Item = CurrentMessage.Analyze(Separators, BuildContext()); } finally { CurrentMessage.Clear(); } break; case SegmentId.UNE: Item = segmentContext.Value.ParseSegment <S_UNE>(Separators); break; case SegmentId.UNZ: Item = segmentContext.Value.ParseSegment <S_UNZ>(Separators); break; default: CurrentMessage.Add(segmentContext); break; } }
internal override void ProcessSegment(string segment) { if (string.IsNullOrEmpty(segment) || Separators == null) { return; } var segmentContext = new SegmentContext(segment, Separators); if (Flush(segmentContext, SegmentId.ST)) { return; } switch (segmentContext.Tag) { case SegmentId.ISA: Item = segmentContext.Value.ParseSegment <S_ISA>(Separators); break; case SegmentId.TA1: Item = segmentContext.Value.ParseSegment <S_TA1>(Separators); break; case SegmentId.GS: Item = segmentContext.Value.ParseSegment <S_GS>(Separators); CurrentGroupHeader = segmentContext; break; case SegmentId.ST: CurrentMessage.Add(segmentContext); break; case SegmentId.SE: try { CurrentMessage.Add(segmentContext); Item = CurrentMessage.Analyze(Separators, BuildContext()); } finally { CurrentMessage.Clear(); } break; case SegmentId.GE: Item = segmentContext.Value.ParseSegment <S_GE>(Separators); break; case SegmentId.IEA: Item = segmentContext.Value.ParseSegment <S_IEA>(Separators); break; default: CurrentMessage.Add(segmentContext); break; } if (segmentContext.IsControl) { if (segmentContext.Tag != SegmentId.GS) { CurrentGroupHeader = null; } } }