Implement networkmessenger distributioning
This commit is contained in:
@@ -21,6 +21,7 @@ local function init()
|
|||||||
---@field stinkyTracker HeimdallStinkyTrackerData
|
---@field stinkyTracker HeimdallStinkyTrackerData
|
||||||
---@field networkNodes string[]
|
---@field networkNodes string[]
|
||||||
---@field network HeimdallNetworkData
|
---@field network HeimdallNetworkData
|
||||||
|
---@field networkMessenger HeimdallNetworkMessengerData
|
||||||
---@field _L Localization
|
---@field _L Localization
|
||||||
---@field VERSION string
|
---@field VERSION string
|
||||||
---@field dumpTable fun(table: any, depth?: number): nil
|
---@field dumpTable fun(table: any, depth?: number): nil
|
||||||
@@ -229,12 +230,17 @@ local function init()
|
|||||||
---@class HeimdallNetworkMessengerConfig
|
---@class HeimdallNetworkMessengerConfig
|
||||||
---@field enabled boolean
|
---@field enabled boolean
|
||||||
---@field debug boolean
|
---@field debug boolean
|
||||||
|
---@field interval number
|
||||||
|
|
||||||
--- Data ---
|
--- Data ---
|
||||||
---@class HeimdallMessengerData
|
---@class HeimdallMessengerData
|
||||||
---@field queue table<string, Message>
|
---@field queue table<string, Message>
|
||||||
---@field ticker number?
|
---@field ticker number?
|
||||||
|
|
||||||
|
---@class HeimdallNetworkMessengerData
|
||||||
|
---@field queue table<string, Message>
|
||||||
|
---@field ticker number?
|
||||||
|
|
||||||
---@class HeimdallWhoData
|
---@class HeimdallWhoData
|
||||||
---@field updateTicker number?
|
---@field updateTicker number?
|
||||||
---@field whoTicker number?
|
---@field whoTicker number?
|
||||||
@@ -458,6 +464,7 @@ local function init()
|
|||||||
networkMessenger = {
|
networkMessenger = {
|
||||||
enabled = shared.GetOrDefault(Heimdall_Data, { "config", "networkMessenger", "enabled" }, false),
|
enabled = shared.GetOrDefault(Heimdall_Data, { "config", "networkMessenger", "enabled" }, false),
|
||||||
debug = shared.GetOrDefault(Heimdall_Data, { "config", "networkMessenger", "debug" }, false),
|
debug = shared.GetOrDefault(Heimdall_Data, { "config", "networkMessenger", "debug" }, false),
|
||||||
|
interval = shared.GetOrDefault(Heimdall_Data, { "config", "networkMessenger", "interval" }, 0.01),
|
||||||
},
|
},
|
||||||
addonPrefix = shared.GetOrDefault(Heimdall_Data, { "config", "addonPrefix" }, "HEIMDALL"),
|
addonPrefix = shared.GetOrDefault(Heimdall_Data, { "config", "addonPrefix" }, "HEIMDALL"),
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1959,7 +1959,7 @@ function shared.Config.Init()
|
|||||||
local networkMessengerConfigFrame = GridFrame.new("HeimdallNetworkMessengerConfig",
|
local networkMessengerConfigFrame = GridFrame.new("HeimdallNetworkMessengerConfig",
|
||||||
UIParent, 12, 20)
|
UIParent, 12, 20)
|
||||||
networkMessengerConfigFrame.frame:SetBackdropColor(r, g, b, 0.3)
|
networkMessengerConfigFrame.frame:SetBackdropColor(r, g, b, 0.3)
|
||||||
configFrame:Add(networkMessengerConfigFrame, 3, 3)
|
configFrame:Add(networkMessengerConfigFrame, 5, 3)
|
||||||
|
|
||||||
local title = CreateFancyText("HeimdallNetworkMessengerConfigTitle", networkMessengerConfigFrame.frame,
|
local title = CreateFancyText("HeimdallNetworkMessengerConfigTitle", networkMessengerConfigFrame.frame,
|
||||||
shared.L[Heimdall_Data.config.locale].config.networkMessenger,
|
shared.L[Heimdall_Data.config.locale].config.networkMessenger,
|
||||||
@@ -1980,7 +1980,22 @@ function shared.Config.Init()
|
|||||||
return Heimdall_Data.config.networkMessenger.enabled
|
return Heimdall_Data.config.networkMessenger.enabled
|
||||||
end)
|
end)
|
||||||
enableButton:UpdateColor(Heimdall_Data.config.networkMessenger.enabled)
|
enableButton:UpdateColor(Heimdall_Data.config.networkMessenger.enabled)
|
||||||
networkMessengerConfigFrame:Add(enableButton, 1, 12)
|
networkMessengerConfigFrame:Add(enableButton, 2, 6)
|
||||||
|
|
||||||
|
local interval = CreateBasicSmallEditBox("HeimdallNetworkMessengerConfigInterval",
|
||||||
|
networkMessengerConfigFrame.frame, shared.L[Heimdall_Data.config.locale].config.interval,
|
||||||
|
tostring(Heimdall_Data.config.networkMessenger.interval),
|
||||||
|
function(self)
|
||||||
|
local text = self:GetText()
|
||||||
|
if string.match(text, "^%d+%.?%d*$") then
|
||||||
|
Heimdall_Data.config.networkMessenger.interval = tonumber(text)
|
||||||
|
print("Interval set to", tostring(text))
|
||||||
|
else
|
||||||
|
print("Invalid interval", text)
|
||||||
|
self:SetText(tostring(Heimdall_Data.config.networkMessenger.interval))
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
networkMessengerConfigFrame:Add(interval, 2, 6)
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Addon prefix
|
-- Addon prefix
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ local ModuleName = "Network"
|
|||||||
---@diagnostic disable-next-line: missing-fields
|
---@diagnostic disable-next-line: missing-fields
|
||||||
shared.Network = {}
|
shared.Network = {}
|
||||||
function shared.Network.Init()
|
function shared.Network.Init()
|
||||||
local updateTime = 0
|
if not shared.network then shared.network = {} end
|
||||||
|
|
||||||
local friendsFrame = CreateFrame("Frame")
|
local friendsFrame = CreateFrame("Frame")
|
||||||
friendsFrame:RegisterEvent("FRIENDLIST_UPDATE")
|
friendsFrame:RegisterEvent("FRIENDLIST_UPDATE")
|
||||||
|
|||||||
@@ -8,6 +8,112 @@ shared.NetworkMessenger = {}
|
|||||||
function shared.NetworkMessenger.Init()
|
function shared.NetworkMessenger.Init()
|
||||||
RegisterAddonMessagePrefix(Heimdall_Data.config.addonPrefix)
|
RegisterAddonMessagePrefix(Heimdall_Data.config.addonPrefix)
|
||||||
|
|
||||||
|
if not shared.networkMessenger then shared.networkMessenger = {} end
|
||||||
|
if not shared.networkMessenger.queue then shared.networkMessenger.queue = {} end
|
||||||
|
if not shared.networkMessenger.ticker then
|
||||||
|
local function DoMessage()
|
||||||
|
if Heimdall_Data.config.networkMessenger.debug then
|
||||||
|
print(string.format("[%s] Processing network message queue", ModuleName))
|
||||||
|
end
|
||||||
|
if not Heimdall_Data.config.networkMessenger.enabled then
|
||||||
|
if Heimdall_Data.config.networkMessenger.debug then
|
||||||
|
print(string.format("[%s] Module disabled, skipping network message processing", ModuleName))
|
||||||
|
end
|
||||||
|
return
|
||||||
|
end
|
||||||
|
---@type Message
|
||||||
|
local message = shared.networkMessenger.queue[1]
|
||||||
|
if not message then
|
||||||
|
if Heimdall_Data.config.networkMessenger.debug then
|
||||||
|
print(string.format("[%s] Network message queue empty", ModuleName))
|
||||||
|
end
|
||||||
|
return
|
||||||
|
end
|
||||||
|
if not message.message or message.message == "" then
|
||||||
|
if Heimdall_Data.config.networkMessenger.debug then
|
||||||
|
print(string.format("[%s] Invalid network message: empty content", ModuleName))
|
||||||
|
end
|
||||||
|
return
|
||||||
|
end
|
||||||
|
if not message.channel or message.channel == "" then
|
||||||
|
if Heimdall_Data.config.networkMessenger.debug then
|
||||||
|
print(string.format("[%s] Invalid network message: no channel specified", ModuleName))
|
||||||
|
end
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
table.remove(shared.networkMessenger.queue, 1)
|
||||||
|
if not message.message or message.message == "" then
|
||||||
|
if Heimdall_Data.config.networkMessenger.debug then
|
||||||
|
print(string.format("[%s] Skipping empty network message", ModuleName))
|
||||||
|
end
|
||||||
|
return
|
||||||
|
end
|
||||||
|
if not message.channel or message.channel == "" then
|
||||||
|
if Heimdall_Data.config.networkMessenger.debug then
|
||||||
|
print(string.format("[%s] Skipping network message with no channel", ModuleName))
|
||||||
|
end
|
||||||
|
return
|
||||||
|
end
|
||||||
|
if not message.data or message.data == "" then
|
||||||
|
if Heimdall_Data.config.networkMessenger.debug then
|
||||||
|
print(string.format("[%s] Skipping network message with no data", ModuleName))
|
||||||
|
end
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
if Heimdall_Data.config.networkMessenger.debug then
|
||||||
|
print(string.format("[%s] Sending network message: '%s' to %s:%s", ModuleName, message.message,
|
||||||
|
message.channel,
|
||||||
|
message.data))
|
||||||
|
end
|
||||||
|
local payload = string.format("%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
|
||||||
|
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
|
||||||
|
local target = shared.networkNodes[1]
|
||||||
|
SendAddonMessage(Heimdall_Data.config.addonPrefix, payload, "WHISPER", target)
|
||||||
|
end
|
||||||
|
local function Tick()
|
||||||
|
if Heimdall_Data.config.networkMessenger.debug then
|
||||||
|
local queueSize = #shared.networkMessenger.queue
|
||||||
|
print(string.format("[%s] Queue check - Network messages pending: %d", ModuleName, queueSize))
|
||||||
|
end
|
||||||
|
DoMessage()
|
||||||
|
shared.networkMessenger.ticker = C_Timer.NewTimer(Heimdall_Data.config.networkMessenger.interval, Tick, 1)
|
||||||
|
end
|
||||||
|
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)
|
||||||
|
|
||||||
local addonMsgFrame = CreateFrame("Frame")
|
local addonMsgFrame = CreateFrame("Frame")
|
||||||
addonMsgFrame:RegisterEvent("CHAT_MSG_ADDON")
|
addonMsgFrame:RegisterEvent("CHAT_MSG_ADDON")
|
||||||
addonMsgFrame:SetScript("OnEvent", function(self, event, prefix, message, channel, source)
|
addonMsgFrame:SetScript("OnEvent", function(self, event, prefix, message, channel, source)
|
||||||
|
|||||||
Reference in New Issue
Block a user