12345678910111213141516171819202122232425262728293031323334353637383940414243 |
- using System;
- namespace S7.Net
- {
- #if NET_FULL
- [Serializable]
- #endif
- public class InvalidDataException : Exception
- {
- public byte[] ReceivedData { get; }
- public int ErrorIndex { get; }
- public byte ExpectedValue { get; }
- public InvalidDataException(string message, byte[] receivedData, int errorIndex, byte expectedValue)
- : base(FormatMessage(message, receivedData, errorIndex, expectedValue))
- {
- ReceivedData = receivedData;
- ErrorIndex = errorIndex;
- ExpectedValue = expectedValue;
- }
- #if NET_FULL
- protected InvalidDataException(System.Runtime.Serialization.SerializationInfo info,
- System.Runtime.Serialization.StreamingContext context) : base(info, context)
- {
- ReceivedData = (byte[]) info.GetValue(nameof(ReceivedData), typeof(byte[]));
- ErrorIndex = info.GetInt32(nameof(ErrorIndex));
- ExpectedValue = info.GetByte(nameof(ExpectedValue));
- }
- #endif
- private static string FormatMessage(string message, byte[] receivedData, int errorIndex, byte expectedValue)
- {
- if (errorIndex >= receivedData.Length)
- throw new ArgumentOutOfRangeException(nameof(errorIndex),
- $"{nameof(errorIndex)} {errorIndex} is outside the bounds of {nameof(receivedData)} with length {receivedData.Length}.");
- return $"{message} Invalid data received. Expected '{expectedValue}' at index {errorIndex}, " +
- $"but received {receivedData[errorIndex]}. See the {nameof(ReceivedData)} property " +
- "for the full message received.";
- }
- }
- }
|