public override void Parse(PacketParser parser, ParsedSegment parent) { var list = new List <ParsedSegment>(); while (parser.Packet.Position < parser.Packet.Length) { var element = new ParsedSegment(this, null); list.Add(element); foreach (var segment in Segments) { segment.Parse(parser, element); } } var parsedSegment = new ParsedSegment(this, list.Count); parsedSegment.List.AddRange(list); parent.AddChild(parser, parsedSegment); }
public virtual void Parse(PacketParser parser, ParsedSegment parent) { var reader = SimpleTypes.GetReader(Type); var value = reader(this, parser); if (SegmentType != null) { try { value = Utility.ChangeType(value, SegmentType, true); } catch (OverflowException e) { throw new Exception(string.Format("Wrong underlying type {0} for Enum {1} in PacketDefinition {2} in Segment {3}", Type, m_segmentType, parser.Packet, Name), e); } catch (Exception e) { Console.WriteLine("Could not parse value " + value + " in Segment \"" + this + "\": " + e); } } parent.AddChild(parser, new ParsedSegment(this, value)); }