43 lines
1.7 KiB
C#
43 lines
1.7 KiB
C#
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.";
|
|
}
|
|
}
|
|
} |