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 _logs = new List(); // Udalosť pre notifikáciu pri zmene logov public event Action 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 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 GetAllLogs() { return new List(_logs); // Vrátime kópiu logov } // Získanie logov medzi určitou pozíciou (s úpraveným indexovaním) public List GetLogs(int startIndex, int count) { // Zabezpečí, že indexy nebudú mimo rozsahu return _logs.Skip(startIndex).Take(count).ToList(); } } }