using System.Text.RegularExpressions; namespace LibMpc { public interface IMpdResponseState { string Status { get; } string ErrorMessage { get; } string MpdError { get; } bool IsError { get; } } public class MpdResponseState : IMpdResponseState { private static readonly Regex ErrorPattern = new Regex("^ACK \\[(?[0-9]*)@(?[0-9]*)] \\{(?[a-z]*)} (?.*)$"); private readonly string _endLine; public MpdResponseState(string endLine) { _endLine = endLine; if (!string.IsNullOrEmpty(_endLine)) { if (_endLine.Equals(Constants.Ok)) { Status = _endLine; IsError = false; } else { ParseErrorResponse(); } } } public bool IsError { get; private set; } = true; public string Status { get; private set; } = "UNKNOWN"; public string ErrorMessage { get; private set; } = string.Empty; public string MpdError { get; private set; } = string.Empty; private void ParseErrorResponse() { Status = "ERROR"; MpdError = _endLine; var match = ErrorPattern.Match(_endLine); if (match.Groups.Count != 5) { ErrorMessage = "Unexpected response from server."; } else { var errorCode = match.Result("${code}"); var commandListItem = match.Result("${nr}"); var commandFailed = match.Result("${command}"); var errorMessage = match.Result("${message}"); ErrorMessage = $"ErrorCode: { errorCode }, CommandListItem: { commandListItem }, CommandFailed: { commandFailed }, ErrorMessage: { errorMessage }"; } } } }