tbf/SharedComponents/LiveLogCache.cs

95 lines
2.6 KiB
C#

namespace SharedComponents
{
public class LiveLogCache
{
// Statická inštancia pre singleton
private static readonly LiveLogCache _instance = new LiveLogCache();
// Uzamykací objekt pre bezpečný prístup z viacerých vlákien
private static readonly object _lock = new object();
// Zoznam na ukladanie logov
private readonly List<string> _logs = new List<string>();
// Udalosť pre notifikáciu pri zmene logov
public event Action<string> LogAdded;
// Súkromný konštruktor (singleton pattern)
private LiveLogCache() { }
// Metóda na získanie počtu logov
public int GetCount()
{
return _logs.Count;
}
// Statická metóda na získanie inštancie
public static LiveLogCache Instance
{
get
{
lock (_lock)
{
return _instance;
}
}
}
// Verejná vlastnosť na získanie logov
public IReadOnlyList<string> Logs
{
get
{
lock (_lock)
{
return _logs.AsReadOnly();
}
}
}
// Metóda na pridanie logu
public void AddLog(string log)
{
// Získanie aktuálneho času v požadovanom formáte
string timeStamp = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:");
// Vytvorenie nového logu s časovou pečiatkou na začiatku
string logWithTimeStamp = $"{timeStamp} {log}";
// Pridanie logu do zoznamu
lock (_lock)
{
_logs.Add(logWithTimeStamp);
}
// Spustenie udalosti pre notifikáciu
LogAdded?.Invoke(logWithTimeStamp);
}
// Metóda na vyčistenie logov
public void ClearLogs()
{
lock (_lock)
{
_logs.Clear();
}
// Voliteľné: Spusti udalosť, ak by sme chceli notifikovať aj o vymazaní logov
LogAdded?.Invoke("Logs were cleared.");
}
// Získanie všetkých logov
public List<string> GetAllLogs()
{
return new List<string>(_logs); // Vrátime kópiu logov
}
// Získanie logov medzi určitou pozíciou (s úpraveným indexovaním)
public List<string> GetLogs(int startIndex, int count)
{
// Zabezpečí, že indexy nebudú mimo rozsahu
return _logs.Skip(startIndex).Take(count).ToList();
}
}
}