From a069cfd6a0f7c53b902607e79037ffd90681a7b9 Mon Sep 17 00:00:00 2001 From: TheArcaneBrony Date: Thu, 11 May 2023 20:56:16 +0200 Subject: Add state cache --- MatrixRoomUtils.Core/Room.cs | 41 ++++++++++++++++++++++++++++++++++++++--- 1 file changed, 38 insertions(+), 3 deletions(-) (limited to 'MatrixRoomUtils.Core/Room.cs') diff --git a/MatrixRoomUtils.Core/Room.cs b/MatrixRoomUtils.Core/Room.cs index be470fa..3ef6ffa 100644 --- a/MatrixRoomUtils.Core/Room.cs +++ b/MatrixRoomUtils.Core/Room.cs @@ -16,17 +16,52 @@ public class Room public async Task GetStateAsync(string type, string state_key="", bool logOnFailure = false) { - var url = $"/_matrix/client/r0/rooms/{RoomId}/state"; + var url = $"/_matrix/client/v3/rooms/{RoomId}/state"; if (!string.IsNullOrEmpty(state_key)) url += $"/{type}/{state_key}"; else if (!string.IsNullOrEmpty(type)) url += $"/{type}"; - + var cache_key = "room_states_"+type; + if (!RuntimeCache.GenericResponseCache.ContainsKey(cache_key)) + { + Console.WriteLine($"[!!] No cache for {cache_key}, creating..."); + RuntimeCache.GenericResponseCache.Add(cache_key, new ObjectCache() + { + DefaultExpiry = type switch + { + "m.room.name" => TimeSpan.FromMinutes(15), + _ => TimeSpan.FromMinutes(5) + } + }); + } + + if (RuntimeCache.GenericResponseCache[cache_key][url] != null) + { + if(RuntimeCache.GenericResponseCache[cache_key][url].ExpiryTime > DateTime.Now) + { + Console.WriteLine($"[:3] Found cached state: {RuntimeCache.GenericResponseCache[cache_key][url].Result}"); + return (JsonElement?)RuntimeCache.GenericResponseCache[cache_key][url].Result; + } + else + { + Console.WriteLine($"[!!] Cached state expired at {RuntimeCache.GenericResponseCache[cache_key][url].ExpiryTime}: {RuntimeCache.GenericResponseCache[cache_key][url].Result}"); + } + } + else + { + Console.WriteLine($"[!!] No cached state for {url}"); + } + var res = await _httpClient.GetAsync(url); if (!res.IsSuccessStatusCode) { if(logOnFailure) Console.WriteLine($"{RoomId}/{state_key}/{type} - got status: {res.StatusCode}"); return null; } - return await res.Content.ReadFromJsonAsync(); + var result = await res.Content.ReadFromJsonAsync(); + RuntimeCache.GenericResponseCache[cache_key][url] = new GenericResult() + { + Result = result + }; + return result; } public async Task GetNameAsync() { -- cgit 1.4.1