diff --git a/Modules/NetworkMessenger.lua b/Modules/NetworkMessenger.lua index 59a7064..aab8863 100644 --- a/Modules/NetworkMessenger.lua +++ b/Modules/NetworkMessenger.lua @@ -6,61 +6,59 @@ local ModuleName = "NetworkMessenger" ---@diagnostic disable-next-line: missing-fields shared.NetworkMessenger = {} function shared.NetworkMessenger.Init() - local updateTime = 0 + RegisterAddonMessagePrefix(Heimdall_Data.config.addonPrefix) - local friendsFrame = CreateFrame("Frame") - friendsFrame:RegisterEvent("FRIENDLIST_UPDATE") - friendsFrame:SetScript("OnEvent", function(self, event, ...) - ---@type table - local friends = {} - for i = 1, GetNumFriends() do - local name, level, class, area, connected, status, note, RAF = GetFriendInfo(i) - friends[name] = connected - if Heimdall_Data.config.network.debug then - print(string.format("[%s] Friend %s is %s", ModuleName, name, connected and "online" or "offline")) + local addonMsgFrame = CreateFrame("Frame") + addonMsgFrame:RegisterEvent("CHAT_MSG_ADDON") + addonMsgFrame:SetScript("OnEvent", function(self, event, prefix, message, channel, source) + if not Heimdall_Data.config.networkMessenger.enabled then return end + if prefix ~= Heimdall_Data.config.addonPrefix then return end + source = string.match(source, "[^%-]+") + + if Heimdall_Data.config.networkMessenger.debug then + print(string.format("[%s] Received message from %s: %s", ModuleName, source, message)) + end + if #shared.networkNodes == 0 then + if Heimdall_Data.config.networkMessenger.debug then + print(string.format("[%s] No network nodes found, wtf????", ModuleName)) end + return end - for _, member in ipairs(Heimdall_Data.config.network.members) do - if friends[member] == nil then - if Heimdall_Data.config.network.debug then - print(string.format("[%s] Adding friend %s", ModuleName, member)) - end - AddFriend(member) + -- There should always be at least one network node ergo should always exist a leader + -- Because the us, the player, is also a node + local networkLeader = shared.networkNodes[1] + if source ~= networkLeader then + if Heimdall_Data.config.networkMessenger.debug then + print(string.format("[%s] Message from %s is not from the network leader (%s)", ModuleName, source, + networkLeader)) end + return end + --/run SendAddonMessage("HEIMDALL", "message|hello|WHISPER|PrĂ­mus", "WHISPER", UnitName("player")) - shared.networkNodes = {} - for _, player in ipairs(Heimdall_Data.config.network.members) do - if friends[player] then - shared.networkNodes[player] = true - if Heimdall_Data.config.network.debug then - print(string.format("[%s] Adding network node %s", ModuleName, player)) - end - end + local parts = shared.Split(message, "|") + if Heimdall_Data.config.networkMessenger.debug then + print(string.format("[%s] Received message parts:", ModuleName)) + shared.dumpTable(parts) end - if Heimdall_Data.config.network.debug then - print(string.format("[%s] Network nodes:", ModuleName)) - shared.dumpTable(shared.networkNodes) + local command = strtrim(parts[1]) + if command == "message" then + local message = strtrim(parts[2]) + local channel = strtrim(parts[3]) + local target = strtrim(parts[4]) + if Heimdall_Data.config.networkMessenger.debug then + print(string.format("[%s] Received message command: %s %s %s", ModuleName, message, channel, target)) + end + ---@type Message + local msg = { + channel = channel, + message = message, + data = target + } + table.insert(shared.messenger.queue, msg) end end) - local function Update() - if not Heimdall_Data.config.network.enabled then return end - if Heimdall_Data.config.network.debug then - print("Network module is updating.") - end - ShowFriends() - end - - local networkFrame = CreateFrame("Frame") - networkFrame:SetScript("OnUpdate", function(self, elapsed) - if not Heimdall_Data.config.network.enabled then return end - updateTime = updateTime + elapsed - if updateTime >= Heimdall_Data.config.network.updateInterval then - Update() - updateTime = 0 - end - end) print("[Heimdall] NetworkMessenger module loaded") end