using System;
using System.Collections.Generic;
public class ErrorInfo
{
public string ErrorType { get; }
public double Min { get; }
public double Max { get; }
public string Result { get; }
public ErrorInfo(string errorType, double min, double max, string result)
{
ErrorType = errorType;
Min = min;
Max = max;
Result = result;
}
}
public class ErrorInfoManager
{
private Dictionary<string, ErrorInfo> errorInfoMap = new Dictionary<string, ErrorInfo>();
private List<(string ErrorType, DateTime ExpiryTime)> activeWarnings = new List<(string, DateTime)>();
public void AddErrorInfo(ErrorInfo errorInfo)
{
errorInfoMap[errorInfo.ErrorType] = errorInfo;
}
public string CheckWarning(double value)
{
foreach (var kvp in errorInfoMap)
{
string errorType = kvp.Key;
var errorInfo = kvp.Value;
if (value >= errorInfo.Min && value <= errorInfo.Max)
{
// Check if there is an active warning for this error type
if (!IsWarningActive(errorType))
{
// Add a new active warning with the expiry time (current time + 10 seconds)
activeWarnings.Add((errorType, DateTime.Now.AddSeconds(10)));
// Return the warning result
return $"{errorInfo.Result} (Error Type: {errorType})";
}
else
{
// There is an active warning; check if it has expired
if (DateTime.Now > GetExpiryTime(errorType))
{
// Remove the expired warning
activeWarnings.RemoveAll(warning => warning.ErrorType == errorType);
}
else
{
// Return the warning result
return $"{errorInfo.Result} (Error Type: {errorType})";
}
}
}
}
return "OK"; // No warnings; return OK
}
private bool IsWarningActive(string errorType)
{
// Check if there is an active warning for the specified error type
return activeWarnings.Exists(warning => warning.ErrorType == errorType);
}
private DateTime GetExpiryTime(string errorType)
{
// Get the expiry time for the active warning of the specified error type
return activeWarnings.Find(warning => warning.ErrorType == errorType).ExpiryTime;
}
}
class Program
{
static void Main()
{
var errorInfoManager = new ErrorInfoManager();
// Add error information to the manager
errorInfoManager.AddErrorInfo(new ErrorInfo("Warning1", 10.5, 20.5, "Warning 1"));
errorInfoManager.AddErrorInfo(new ErrorInfo("Error1", 30.5, 40.5, "Error 1"));
errorInfoManager.AddErrorInfo(new ErrorInfo("Warning2", 50.5, 60.5, "Warning 2"));
// Simulate processing data every 50 ms for a certain value
for (int i = 0; i < 10; i++)
{
double valueToCheck = 15.5 + i * 5; // Simulating different values
string result = errorInfoManager.CheckWarning(valueToCheck);
Console.WriteLine($"Value: {valueToCheck}, Result: {result}");
// Simulate waiting 50 ms for the next data point
System.Threading.Thread.Sleep(50);
}
}
}