95 lines
2.6 KiB
C#
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();
|
|
}
|
|
}
|
|
}
|