Ejemplo n.º 1
0
        /// <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);
        }
Ejemplo n.º 2
0
        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;
            }
        }
Ejemplo n.º 3
0
        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;
                }
            }
        }