Implement distributed messenger
This commit is contained in:
		@@ -31,6 +31,7 @@ function shared.Network.Init()
 | 
				
			|||||||
		end
 | 
							end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		shared.networkNodes = {}
 | 
							shared.networkNodes = {}
 | 
				
			||||||
 | 
							if false then shared.networkNodes[#shared.networkNodes+1] = UnitName("player") end
 | 
				
			||||||
		for _, player in ipairs(Heimdall_Data.config.network.members) do
 | 
							for _, player in ipairs(Heimdall_Data.config.network.members) do
 | 
				
			||||||
			if friends[player] then
 | 
								if friends[player] then
 | 
				
			||||||
				shared.networkNodes[#shared.networkNodes + 1] = player
 | 
									shared.networkNodes[#shared.networkNodes + 1] = player
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -67,7 +67,7 @@ function shared.NetworkMessenger.Init()
 | 
				
			|||||||
					message.channel,
 | 
										message.channel,
 | 
				
			||||||
					message.data))
 | 
										message.data))
 | 
				
			||||||
			end
 | 
								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
 | 
								if Heimdall_Data.config.networkMessenger.debug then
 | 
				
			||||||
				print(string.format("[%s] Payload: %s", ModuleName, payload))
 | 
									print(string.format("[%s] Payload: %s", ModuleName, payload))
 | 
				
			||||||
			end
 | 
								end
 | 
				
			||||||
@@ -91,29 +91,10 @@ function shared.NetworkMessenger.Init()
 | 
				
			|||||||
		Tick()
 | 
							Tick()
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	local testMessage = {
 | 
						-- If we are the leader then we delegate messages (dmessage)
 | 
				
			||||||
		channel = "WHISPER",
 | 
						-- If we get a "message" command from leader then we send the message
 | 
				
			||||||
		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 nextIdx = 1
 | 
				
			||||||
	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)
 | 
				
			||||||
@@ -163,6 +144,22 @@ function shared.NetworkMessenger.Init()
 | 
				
			|||||||
				data = target
 | 
									data = target
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			table.insert(shared.messenger.queue, msg)
 | 
								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
 | 
				
			||||||
	end)
 | 
						end)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user