/// <summary> /// Parses a packet /// </summary> public static ParsedPacket ParsePacket(JSONPacketWrapper wrapper, Packet p) { var pack = new ParsedPacket(); pack.PacketID = p.ID; pack.PacketName = wrapper.PacketName; pack.PayloadLength = p.DecryptedPayload.Length; var parsedFields = new List <ParsedField <object> >(); using (var br = new BinaryReader(new MemoryStream(p.DecryptedPayload))) { foreach (var field in wrapper.Fields) { try { if (field.FieldType == FieldType.Bytes) { int toRead = 0; string replaced = ReplaceWildcards(field.BytesToRead, parsedFields); if (replaced != null) { if (IsNumber(replaced)) { toRead = Convert.ToInt32(replaced); } } else { if (IsNumber(field.BytesToRead)) { toRead = Convert.ToInt32(field.BytesToRead); } } if (toRead > 0) { var value = br.ReadBytes(toRead); parsedFields.Add(new ParsedField <object>() { FieldLength = value.Length, FieldName = field.FieldName, FieldType = FieldType.Bytes, FieldValue = BitConverter.ToString(value) }); } } else { var value = br.ReadField(field.FieldType); parsedFields.Add(new ParsedField <object> { FieldLength = GetObjectSize(value), FieldName = field.FieldName, FieldType = field.FieldType, FieldValue = value }); } } catch (Exception ex) { Logger.Log("Exception occured while Parsing Packet: " + ex); } } } pack.ParsedFields = parsedFields.Count > 0 ? parsedFields : null; return(pack); }