using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Text.RegularExpressions; using System.Threading.Tasks; namespace Raytheon.Instruments.LSPS { internal class LspsResponse { public enum CommandType { GET, SET } public CommandType commandType_ = CommandType.GET; public readonly bool successful_ = true; // this text_ can be an error message for a SET command or can be a value from a GET command public readonly string text_ = String.Empty; public LspsResponse(string response) { string str = String.Empty; Match regexMatch; regexMatch = Regex.Match(response, @"result=([^\s]+).(.+)", RegexOptions.IgnoreCase | RegexOptions.Singleline); if (regexMatch.Success) { commandType_ = CommandType.SET; if (regexMatch.Groups[1].Value == "0") { successful_ = false; } text_ = regexMatch.Groups[2].Value; } else if (Regex.IsMatch(response, @"error:.+", RegexOptions.IgnoreCase | RegexOptions.Singleline)) { commandType_ = CommandType.SET; successful_ = false; text_ = response; } // process response for SET command text_ = Regex.Replace(text_, @"error:.(.+)", "$1", RegexOptions.IgnoreCase | RegexOptions.Singleline); text_ = Regex.Replace(text_, @"([^\r]+).+", "$1", RegexOptions.IgnoreCase | RegexOptions.Singleline); // process response for GET command if (commandType_ != CommandType.SET) { MatchCollection matches = Regex.Matches(response, @"[^\s=]+=[^\s=,]+", RegexOptions.IgnoreCase | RegexOptions.Singleline); // if there are multiple data points, we return all the data in a string delimited by comma if (matches.Count > 1) { text_ = String.Empty; foreach (Match match in matches) { if (text_.Length > 0) { text_ += ","; } text_ += Regex.Replace(match.Value, @"[^=]+=([^=]+)", "$1", RegexOptions.IgnoreCase | RegexOptions.Singleline); } } else { text_ = Regex.Replace(response, @"[^=]+=([^\r]+).+", "$1", RegexOptions.IgnoreCase | RegexOptions.Singleline); } } } } }