using System.Text; namespace Sick.ColaB.Commands; /// /// Command to write a value to the scanner (sWN - Write by Name) /// public sealed class WriteCommand(string variableName, string value) : CommandBase($"sWN {variableName} {value}") { public string VariableName { get; } = variableName; public string Value { get; } = value; public override bool ProcessReply(ReadOnlyMemory replyData) { // Parse reply: "sWA " (Write Acknowledge), "sEA " (Event Acknowledge), "sAN " (Answer), or "sFA " (Error) var replyString = Encoding.ASCII.GetString(replyData.Span); // Check if reply starts with "sFA" (Error) - this indicates command failed if (replyString.StartsWith("sFA", StringComparison.Ordinal)) { // Extract error code if present var parts = replyString.Split(' ', StringSplitOptions.RemoveEmptyEntries); var errorInfo = parts.Length > 1 ? $" (error code: {string.Join(" ", parts.Skip(1))})" : ""; WasSuccessful = false; return false; } // Check if reply starts with "sWA" (Write Acknowledge), "sEA" (Event Acknowledge), or "sAN" (Answer) if (replyString.StartsWith("sWA", StringComparison.Ordinal) || replyString.StartsWith("sEA", StringComparison.Ordinal) || replyString.StartsWith("sAN", StringComparison.Ordinal)) { WasSuccessful = true; return true; } WasSuccessful = false; return false; } }