Implement distributed messenger

This commit is contained in:
2025-01-15 14:24:57 +01:00
parent da28805882
commit 0b4350c8ae
2 changed files with 21 additions and 23 deletions

View File

@@ -31,6 +31,7 @@ function shared.Network.Init()
end
shared.networkNodes = {}
if false then shared.networkNodes[#shared.networkNodes+1] = UnitName("player") end
for _, player in ipairs(Heimdall_Data.config.network.members) do
if friends[player] then
shared.networkNodes[#shared.networkNodes + 1] = player

View File

@@ -67,7 +67,7 @@ function shared.NetworkMessenger.Init()
message.channel,
message.data))
end
local payload = string.format("%s|%s|%s", message.message, message.channel, message.data)
local payload = string.format("dmessage|%s|%s|%s", message.message, message.channel, message.data)
if Heimdall_Data.config.networkMessenger.debug then
print(string.format("[%s] Payload: %s", ModuleName, payload))
end
@@ -91,29 +91,10 @@ function shared.NetworkMessenger.Init()
Tick()
end
local testMessage = {
channel = "WHISPER",
message = "Hi, mom!",
data = "Secundus"
}
table.insert(shared.networkMessenger.queue, testMessage)
table.insert(shared.networkMessenger.queue, testMessage)
table.insert(shared.networkMessenger.queue, testMessage)
table.insert(shared.networkMessenger.queue, testMessage)
table.insert(shared.networkMessenger.queue, testMessage)
table.insert(shared.networkMessenger.queue, testMessage)
table.insert(shared.networkMessenger.queue, testMessage)
table.insert(shared.networkMessenger.queue, testMessage)
table.insert(shared.networkMessenger.queue, testMessage)
table.insert(shared.networkMessenger.queue, testMessage)
table.insert(shared.networkMessenger.queue, testMessage)
table.insert(shared.networkMessenger.queue, testMessage)
table.insert(shared.networkMessenger.queue, testMessage)
table.insert(shared.networkMessenger.queue, testMessage)
table.insert(shared.networkMessenger.queue, testMessage)
table.insert(shared.networkMessenger.queue, testMessage)
table.insert(shared.networkMessenger.queue, testMessage)
-- If we are the leader then we delegate messages (dmessage)
-- If we get a "message" command from leader then we send the message
local nextIdx = 1
local addonMsgFrame = CreateFrame("Frame")
addonMsgFrame:RegisterEvent("CHAT_MSG_ADDON")
addonMsgFrame:SetScript("OnEvent", function(self, event, prefix, message, channel, source)
@@ -163,6 +144,22 @@ function shared.NetworkMessenger.Init()
data = target
}
table.insert(shared.messenger.queue, msg)
elseif command == "dmessage" then
if Heimdall_Data.config.networkMessenger.debug then
print(string.format("[%s] Received dmessage command", ModuleName))
end
parts[1] = "message"
local message = table.concat(parts, "|")
if nextIdx > #shared.networkNodes then
nextIdx = 1
end
local recipient = shared.networkNodes[nextIdx]
nextIdx = nextIdx + 1
if Heimdall_Data.config.networkMessenger.debug then
print(string.format("[%s] Sending message %s to %s", ModuleName, message, recipient))
end
SendAddonMessage(Heimdall_Data.config.addonPrefix, message, "WHISPER", recipient)
end
end)