/// <summary> /// Разбирает последовательность байт в объект со значениями из данной последовательности. /// В случае неверной структуры, длины или ошибок возвращает значение null. /// </summary> /// <param name="bytes">Последовательность байт.</param> public static CommonPacketFormat Parse(List <byte> bytes) { CommonPacketFormat commonPacketFormat = new CommonPacketFormat(); if (bytes == null || bytes.Count <= 2) { return(null); } ushort length = (ushort)(bytes[0] | bytes[1] << 8); List <byte> itemBytes = bytes.GetRange(2, bytes.Count - 2); for (int itemIx = 0; itemIx < length; itemIx++) { CommonPacketItem item = CommonPacketItem.Parse(itemBytes, out itemBytes); commonPacketFormat.Items.Add(item); } if (itemBytes.Count > 0) { return(null); } return(commonPacketFormat); }
/// <summary> /// Разбирает последовательность байт в объект со значениями из данной последовательности. /// В случае неверной структуры, длины или ошибок возвращает значение null. /// </summary> /// <param name="bytes">Последовательность байт.</param> /// <param name="remainBytes">Остаточная последовательность байт.</param> /// <returns></returns> public static CommonPacketItem Parse(List <byte> bytes, out List <byte> remainBytes) { CommonPacketItem commonPacketItem = new CommonPacketItem(); remainBytes = bytes.ToList(); if (bytes == null) { return(null); } if (bytes.Count < 4) { return(null); } ushort typeValue = (ushort)(bytes[0] | bytes[1] << 8); foreach (CommonPacketItemTypeID typeID in Enum.GetValues(typeof(CommonPacketItemTypeID))) { if ((uint)typeID == typeValue) { commonPacketItem.TypeID = typeID; break; } } ushort length = (ushort)(bytes[2] | bytes[3] << 8); if (bytes.Count - 4 < length) { commonPacketItem.Data = bytes.GetRange(4, bytes.Count - 4); remainBytes = new List <byte>(); //return null; } else { commonPacketItem.Data = bytes.GetRange(4, length); remainBytes = bytes.GetRange(4 + length, bytes.Count - (4 + length)); } return(commonPacketItem); }
/// <summary> /// /// </summary> /// <param name="item"></param> public void Add(CommonPacketItem item) { this.Items.Add(item); }