using System; namespace ArchestrAServices.Contract; public static class ASBSerializer { public static ASBStatus ASBStatusFromArray(ASBStatusElement[] status) { ASBStatus result = new ASBStatus { Count = 0 }; if (status == null) { return result; } ushort num = 0; ASBStatusElement[] array = status; for (int i = 0; i < array.Length; i++) { num = ((array[i].statusValue != 0) ? ((ushort)(num + 3)) : ((ushort)(num + 1))); } if (num > 255) { throw new IndexOutOfRangeException("Too many ASBStatusElements in ASBStatusFromArray"); } byte[] array2 = new byte[num]; num = 0; array = status; for (int i = 0; i < array.Length; i++) { ASBStatusElement aSBStatusElement = array[i]; if (aSBStatusElement.statusValue == 0) { array2[num++] = (byte)(((byte)aSBStatusElement.statusType & 0x7F) | 0x80); continue; } array2[num++] = (byte)((byte)aSBStatusElement.statusType & 0x7F); byte[] array3 = new byte[2]; array3 = BitConverter.GetBytes(aSBStatusElement.statusValue); array2[num++] = array3[0]; array2[num++] = array3[1]; } result.Count = (byte)num; result.Payload = array2; return result; } public static ASBStatusElement[] ASBStatusToArray(ASBStatus status) { if (status.Payload == null) { return new ASBStatusElement[0]; } byte[] payload = status.Payload; ushort num = 0; ushort num2 = 0; while (num2 < status.Count) { num2 = (((payload[num2] & 0x80) == 0) ? ((ushort)(num2 + 3)) : ((ushort)(num2 + 1))); num++; } ASBStatusElement[] array = new ASBStatusElement[num]; num2 = 0; for (ushort num3 = 0; num3 < num; num3++) { if ((payload[num2] & 0x80) != 0) { array[num3].statusType = (ASBStatusType)(payload[num2] & 0x7F); array[num3].statusValue = 0; num2++; } else { array[num3].statusType = (ASBStatusType)payload[num2++]; array[num3].statusValue = BitConverter.ToUInt16(payload, num2); num2 += 2; } } return array; } }