using Sick.SafetyScanners.DataStructures; using Sick.SafetyScanners.Helpers; using System.Text; namespace Sick.SafetyScanners.DataProcessing; /// /// Parser for OrderNumber response from COLA2 variable command /// Thread-safe implementation /// public sealed class ParseOrderNumber { /// /// Parses the order number from a TCP sequence (COLA2 response) /// Matches: ParseOrderNumber::parseTCPSequence in C++ /// public OrderNumber ParseTcpSequence(PacketBuffer buffer) { var span = buffer.GetBufferSpan(); return new OrderNumber { Number = ReadOrderNumber(span) }; } /// /// Reads order number from buffer /// Matches: ParseOrderNumber::readOrderNumber in C++ /// private string ReadOrderNumber(ReadOnlySpan span) { ushort stringLength = ReadWriteHelper.ReadUint16LittleEndian(span, 0); var numberBuilder = new StringBuilder(stringLength); for (ushort i = 0; i < stringLength; i++) { ushort ch = ReadWriteHelper.ReadUint8(span, 2 + i); numberBuilder.Append((char)ch); } return numberBuilder.ToString(); } }