using System;
using System.Collections.Generic;
public class ErrorInfoManager
{
private Dictionary<int, (int Min, int Max, string Result)> errorInfoMap = new Dictionary<int, (int, int, string)>();
private List<(int ErrorType, DateTime Timestamp)> activeWarnings = new List<(int, DateTime)>();
public void AddErrorInfo(int errorType, int min, int max, string result)
{
errorInfoMap[errorType] = (min, max, result);
}
public string GetResultForValue(int value)
{
foreach (var kvp in errorInfoMap)
{
int 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 in the last 10 seconds
if (!IsWarningActive(errorType))
{
// Add a new active warning with the current timestamp
activeWarnings.Add((errorType, DateTime.Now));
// Return the result
return $"{errorInfo.Result} (Error Type: {errorType})";
}
}
}
return "Default Error Message"; // Modify as needed
}
private bool IsWarningActive(int errorType)
{
// Check if there is an active warning for the specified error type in the last 10 seconds
DateTime tenSecondsAgo = DateTime.Now.AddSeconds(-10);
return activeWarnings.Exists(warning => warning.ErrorType == errorType && warning.Timestamp > tenSecondsAgo);
}
public void CleanupWarnings()
{
// Remove warnings that are older than 10 seconds
DateTime tenSecondsAgo = DateTime.Now.AddSeconds(-10);
activeWarnings.RemoveAll(warning => warning.Timestamp <= tenSecondsAgo);
}
}
class Program
{
static void Main()
{
var errorInfoManager = new ErrorInfoManager();
// Add error information to the manager
errorInfoManager.AddErrorInfo(1, 10, 20, "Warning 1");
errorInfoManager.AddErrorInfo(2, 30, 40, "Error 1");
errorInfoManager.AddErrorInfo(3, 50, 60, "Warning 2");
// Simulate processing data every 50 ms for a certain value
for (int i = 0; i < 10; i++)
{
int valueToCheck = 15 + i * 5; // Simulating different values
string result = errorInfoManager.GetResultForValue(valueToCheck);
Console.WriteLine($"Value: {valueToCheck}, Result: {result}");
// Simulate waiting 50 ms for the next data point
System.Threading.Thread.Sleep(50);
}
// Wait for more than 10 seconds to see cleanup in action
System.Threading.Thread.Sleep(11000);
// Perform cleanup to remove older warnings
errorInfoManager.CleanupWarnings();
}
}