diff options
author | TheArcaneBrony <myrainbowdash949@gmail.com> | 2023-05-23 17:19:17 +0200 |
---|---|---|
committer | TheArcaneBrony <myrainbowdash949@gmail.com> | 2023-05-23 17:19:17 +0200 |
commit | f143c8cd3adc23a8f4473fc7cea7d1c58322233b (patch) | |
tree | 0aca8c6b5c694e46d3b713b965e35f7d9e89c322 /MatrixRoomUtils.Core/RuntimeCache.cs | |
parent | Prevent deploy without commit (diff) | |
download | MatrixUtils-f143c8cd3adc23a8f4473fc7cea7d1c58322233b.tar.xz |
idk
Diffstat (limited to 'MatrixRoomUtils.Core/RuntimeCache.cs')
-rw-r--r-- | MatrixRoomUtils.Core/RuntimeCache.cs | 23 |
1 files changed, 19 insertions, 4 deletions
diff --git a/MatrixRoomUtils.Core/RuntimeCache.cs b/MatrixRoomUtils.Core/RuntimeCache.cs index 4a96f50..4e756a7 100644 --- a/MatrixRoomUtils.Core/RuntimeCache.cs +++ b/MatrixRoomUtils.Core/RuntimeCache.cs @@ -14,6 +14,15 @@ public class RuntimeCache // public static Dictionary<string, (DateTime cachedAt, ProfileResponse response)> ProfileCache { get; set; } = new(); public static Dictionary<string, ObjectCache<object>> GenericResponseCache { get; set; } = new(); + + public static Action Save { get; set; } = () => + { + Console.WriteLine("RuntimeCache.Save() was called, but no callback was set!"); + }; + public static Action<string, object> SaveObject { get; set; } = (key, value) => + { + Console.WriteLine($"RuntimeCache.SaveObject({key}, {value}) was called, but no callback was set!"); + }; } @@ -32,17 +41,18 @@ public class HomeServerResolutionResult public class ObjectCache<T> where T : class { public Dictionary<string, GenericResult<T>> Cache { get; set; } = new(); - public TimeSpan DefaultExpiry { get; set; } = new(0, 5, 0); + public TimeSpan DefaultExpiry { get; set; } = new(0, 0, 0); + public string Name { get; set; } = null!; public GenericResult<T> this[string key] { get { if (Cache.ContainsKey(key)) { + Console.WriteLine($"cache.get({key}): hit"); // Console.WriteLine($"Found item in cache: {key} - {Cache[key].Result.ToJson(indent: false)}"); if(Cache[key].ExpiryTime > DateTime.Now) return Cache[key]; - Console.WriteLine($"Expired item in cache: {key} - {Cache[key].Result.ToJson(indent: false)}"); try { @@ -53,13 +63,15 @@ public class ObjectCache<T> where T : class Console.WriteLine($"Failed to remove {key} from cache: {e.Message}"); } } - Console.WriteLine($"No item in cache: {key}"); + Console.WriteLine($"cache.get({key}): miss"); return null; } set { Cache[key] = value; if(Cache[key].ExpiryTime == null) Cache[key].ExpiryTime = DateTime.Now.Add(DefaultExpiry); + Console.WriteLine($"set({key}) = {Cache[key].Result.ToJson(indent:false)}"); + Console.WriteLine($"new_state: {this.ToJson(indent:false)}"); // Console.WriteLine($"New item in cache: {key} - {Cache[key].Result.ToJson(indent: false)}"); // Console.Error.WriteLine("Full cache: " + Cache.ToJson()); } @@ -78,14 +90,17 @@ public class ObjectCache<T> where T : class // Console.WriteLine($"Removing {x.Key} from cache"); Cache.Remove(x.Key); } + RuntimeCache.SaveObject("rory.matrixroomutils.generic_cache:" + Name, this); } }); } + + public bool ContainsKey(string key) => Cache.ContainsKey(key); } public class GenericResult<T> { public T? Result { get; set; } - public DateTime? ExpiryTime { get; set; } + public DateTime? ExpiryTime { get; set; } = DateTime.Now; public GenericResult() { |