public void Reset()
 {
     IsReassembled = false;
     Reassembled.Clear();
     packetBuffer.Clear();
     segBuffer.Clear();
 }
        /// <summary>
        /// If the given TPKT packet doesn't contain segments, it will be added into <see cref="IEC61850Packet.TpktPacketBuffer.Reassembled"/>,
        /// </summary>
        /// <param name="packet"></param>
        public void Add(TpktPacket packet)
        {
            if (!packet.HasSegments)
            {
                Reassembled.Add(packet);

                IsReassembled = true;
            }
            else
            {
                packetBuffer.Add(packet);
                if (packet.LastSegment)
                {
                    Reassemble();
                }
            }
        }
 private void Reassemble(List <TpktSegment> segments, int index)
 {
     foreach (var i in segments)
     {
         if (i.StartWithHeader && segBuffer.Count > 0)
         {
             if (segments.Count > 1 || packetBuffer[index].Length > 0)
             {
                 Reassembled.Add(new TpktPacket(segBuffer.ToArray(), packetBuffer[0].ParentPacket));
                 segBuffer.Clear();
             }
             else
             {
                 return;
             }
         }
         segBuffer.AddRange(i.Segment.ActualBytes());
     }
 }