mirror of
https://github.com/S7NetPlus/s7netplus.git
synced 2026-02-17 14:28:25 +08:00
Add InvalidDataException
This commit is contained in:
43
S7.Net/InvalidDataException.cs
Normal file
43
S7.Net/InvalidDataException.cs
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
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.";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user