local addonname, shared = ... ---@cast shared HeimdallShared ---@cast addonname string local ModuleName = "StinkyCache" ---@diagnostic disable-next-line: missing-fields shared.StinkyCache = {} function shared.StinkyCache.Init() shared.stinkyCache = { stinkies = {}, } ---@param name string local function AskCommander(name) if Heimdall_Data.config.stinkyCache.debug then print(string.format("[%s] Asking commander %s about %s", ModuleName, Heimdall_Data.config.stinkyCache.commander, name)) end local messageParts = { "isstinky", name } local message = table.concat(messageParts, "|") SendAddonMessage(Heimdall_Data.config.addonPrefix, message, "WHISPER", Heimdall_Data.config.stinkyCache.commander) return end local addonMessageFrame = CreateFrame("Frame") addonMessageFrame:RegisterEvent("CHAT_MSG_ADDON") addonMessageFrame:SetScript("OnEvent", function(self, event, msg, sender, ...) if sender == Heimdall_Data.config.stinkyCache.commander then if Heimdall_Data.config.stinkyCache.debug then print(string.format("[%s] Received stinky from commander %s: %s", ModuleName, Heimdall_Data.config.stinkyCache.commander, msg)) end local name, value = {strsplit("|", msg)} shared.stinkyCache.stinkies[name] = { value = value, timestamp = time() } else if Heimdall_Data.config.stinkyCache.debug then print(string.format("[%s] Received stinky from non-commander %s: %s", ModuleName, sender, msg)) end local parts = {strsplit("|", msg)} local command, name = parts[1], parts[2] if parts[1] == "isstinky" then local res = Heimdall_Data.config.stinkies[parts[2]] end end end) setmetatable(shared.stinkyCache.stinkies, { __index = function(self, key) local value = rawget(self, key) local now = GetTime() if value == nil or now - value.timestamp > Heimdall_Data.config.stinkyCache.ttl then AskCommander(key) end return rawget(self, key) end }) print("[Heimdall] StinkyCache module loaded") end