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