using System.Text; namespace Sick.Tim781s.Colab.Commands; /// /// Command to call a method on the scanner (sMN - Method by Name) /// public sealed class MethodCommand : CommandBase { public MethodCommand(string methodName, params string[] parameters) : base($"sMN {methodName} {string.Join(" ", parameters)}") { MethodName = methodName; Parameters = parameters; } public string MethodName { get; } public string[] Parameters { get; } public string? ReplyValue { get; private set; } public override bool ProcessReply(ReadOnlyMemory replyData) { // Parse reply: "sAN " or "sMA " var replyString = Encoding.ASCII.GetString(replyData.Span); // Check if reply starts with "sAN" (Answer) or "sMA" (Method Answer) if (!replyString.StartsWith("sAN", StringComparison.Ordinal) && !replyString.StartsWith("sMA", StringComparison.Ordinal)) { WasSuccessful = false; return false; } // Extract result after method name var parts = replyString.Split(' ', StringSplitOptions.RemoveEmptyEntries); if (parts.Length >= 2 && parts[1] == MethodName) { if (parts.Length > 2) { ReplyValue = string.Join(" ", parts.Skip(2)); } else { ReplyValue = string.Empty; } WasSuccessful = true; return true; } WasSuccessful = false; return false; } }