4using System.Threading.Tasks;
37 byte NetworkServiceId = 0;
57 if (ComLayer?.HasSniffers ??
false)
58 await ComLayer.
Error(
"Invalid Network Service Type: " + b.ToString());
70 if (ComLayer?.HasSniffers ??
false)
71 await ComLayer.
Error(
"Invalid Discovery Service: " + b.ToString());
83 if (ComLayer?.HasSniffers ??
false)
84 await ComLayer.
Error(
"Invalid Transducer Access Service: " + b.ToString());
96 if (ComLayer?.HasSniffers ??
false)
97 await ComLayer.
Error(
"Invalid TEDS Access Service: " + b.ToString());
102 NetworkServiceId = b;
109 if (ComLayer?.HasSniffers ??
false)
110 await ComLayer.
Error(
"Invalid Event Notification Service: " + b.ToString());
115 NetworkServiceId = b;
133 TailLength = c - i - Length;
136 if (ComLayer?.HasSniffers ??
false)
137 await ComLayer.
Error(
"Missing data bytes.");
142 Body =
new byte[Length];
143 Tail = TailLength == 0 ? Array.Empty<
byte>() :
new byte[TailLength];
147 else if (TailLength > 0)
177 if (ComLayer?.HasSniffers ??
false)
178 await ComLayer.
Error(
"Invalid Parsing State: " + State.ToString());
186 if (ComLayer?.HasSniffers ??
false)
187 await ComLayer.
Error(
"Unexpected end of message.");
195 if (ComLayer?.HasSniffers ??
false)
205 if (ComLayer?.HasSniffers ??
false)
215 if (ComLayer?.HasSniffers ??
false)
225 if (ComLayer?.HasSniffers ??
false)
235 if (ComLayer?.HasSniffers ??
false)
254 using (MemoryStream ms =
new MemoryStream())
257 ms.WriteByte(NetworkServiceId);
260 int Length = Payload?.Length ?? 0;
261 if (Length > ushort.MaxValue)
262 throw new ArgumentException(
"Payload too large.", nameof(Payload));
264 ms.WriteByte((
byte)(Length >> 8));
265 ms.WriteByte((
byte)Length);
268 ms.Write(Payload, 0, Length);
286 if (!(SnifferOutput is
null))
288 SnifferOutput.AppendLine(
"NetworkServiceType: DiscoveryServices");
289 SnifferOutput.Append(
"NetworkServiceId: ");
290 SnifferOutput.AppendLine(NetworkServiceId.ToString());
291 SnifferOutput.Append(
"MessageType: ");
310 if (!(SnifferOutput is
null))
312 SnifferOutput.AppendLine(
"NetworkServiceType: TransducerAccessServices");
313 SnifferOutput.Append(
"NetworkServiceId: ");
314 SnifferOutput.AppendLine(NetworkServiceId.ToString());
315 SnifferOutput.Append(
"MessageType: ");
335 if (!(SnifferOutput is
null))
337 SnifferOutput.AppendLine(
"NetworkServiceType: TedsAccessServices");
338 SnifferOutput.Append(
"NetworkServiceId: ");
339 SnifferOutput.AppendLine(NetworkServiceId.ToString());
340 SnifferOutput.Append(
"MessageType: ");
360 if (!(SnifferOutput is
null))
362 SnifferOutput.AppendLine(
"NetworkServiceType: EventNotificationServices");
363 SnifferOutput.Append(
"NetworkServiceId: ");
364 SnifferOutput.AppendLine(NetworkServiceId.ToString());
365 SnifferOutput.Append(
"MessageType: ");
Contains methods for simple hash calculations.
static string BinaryToString(byte[] Data)
Converts an array of bytes to a string with their hexadecimal representations (in lower case).
IEEE 1451.0 Discovery Message
IEEE 1451.0 Event Notification Message
IEEE 1451.0 TEDS Access Message
IEEE 1451.0 Transducer Access Message
Static class for IEEE 1451-related parsing tasks.
static Task< Message > TryParseMessage(byte[] Data)
Tries to parse an IEEE 1451.0-encoded data.
static byte[] SerializeMessage(NetworkServiceType NetworkServiceType, byte NetworkServiceId, MessageType MessageType, byte[] Payload)
Creates a binary IEEE 1451.0 message.
static byte[] SerializeMessage(EventNotificationService NetworkServiceId, MessageType MessageType, byte[] Payload, StringBuilder SnifferOutput)
Creates a binary IEEE 1451.0 message.
static byte[] SerializeMessage(TedsAccessService NetworkServiceId, MessageType MessageType, byte[] Payload, StringBuilder SnifferOutput)
Creates a binary IEEE 1451.0 message.
static byte[] SerializeMessage(TransducerAccessService NetworkServiceId, MessageType MessageType, byte[] Payload, StringBuilder SnifferOutput)
Creates a binary IEEE 1451.0 message.
static byte[] SerializeMessage(DiscoveryService NetworkServiceId, MessageType MessageType, byte[] Payload, StringBuilder SnifferOutput)
Creates a binary IEEE 1451.0 message.
static async Task< Message > TryParseMessage(byte[] Data, ICommunicationLayer ComLayer)
Tries to parse an IEEE 1451.0-encoded data.
Task Information(string Comment)
Called to inform the viewer of something.
Task Error(string Error)
Called to inform the viewer of an error state.
Interface for observable classes implementing communication protocols.
EventNotificationService
Event Notification Service
DiscoveryService
Discovery Service
MessageType
Network Service Message Type
TransducerAccessService
Transducer access service
NetworkServiceType
IEEE 1451.0 Network Service Type
TedsAccessService
TEDS Access Service