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