init
This commit is contained in:
@@ -0,0 +1,92 @@
|
||||
-- ------------------------------------------------------------------------------ --
|
||||
-- TradeSkillMaster_ItemTracker --
|
||||
-- http://www.curse.com/addons/wow/tradeskillmaster_itemtracker --
|
||||
-- --
|
||||
-- A TradeSkillMaster Addon (http://tradeskillmaster.com) --
|
||||
-- All Rights Reserved* - Detailed license information included with addon. --
|
||||
-- ------------------------------------------------------------------------------ --
|
||||
|
||||
-- load the parent file (TSM) into a local variable and register this file as a module
|
||||
local TSM = select(2, ...)
|
||||
local Sync = TSM:NewModule("Sync")
|
||||
|
||||
|
||||
function Sync:BroadcastUpdateRequest(timerUp)
|
||||
if not timerUp then
|
||||
TSMAPI:CreateTimeDelay("itemTrackerSyncDelay", 3, function() Sync:BroadcastUpdateRequest(true) end)
|
||||
return
|
||||
end
|
||||
local packet = {characters={}, guilds={}}
|
||||
for player, data in pairs(TSM.characters or {}) do
|
||||
if data.account == TSMAPI.Sync:GetAccountKey() then
|
||||
packet.characters[player] = CopyTable(data.lastUpdate)
|
||||
end
|
||||
end
|
||||
for guild, data in pairs(TSM.guilds or {}) do
|
||||
packet.guilds[guild] = data.lastUpdate
|
||||
end
|
||||
TSMAPI.Sync:BroadcastData("ItemTracker", "REQUEST", packet)
|
||||
end
|
||||
|
||||
function Sync:SendUpdateResponse(target, request)
|
||||
local response = {characters={}, guilds={}}
|
||||
for player, lastUpdate in pairs(request.characters or {}) do
|
||||
for key, updateTime in pairs(lastUpdate) do
|
||||
if not TSM.characters[player] or (TSM.characters[player].lastUpdate[key] or 0) < updateTime then
|
||||
response.characters[player] = response.characters[player] or {}
|
||||
tinsert(response.characters[player], key)
|
||||
end
|
||||
end
|
||||
end
|
||||
for guild, lastUpdate in pairs(request.guilds or {}) do
|
||||
if not TSM.guilds[guild] or (TSM.guilds[guild].lastUpdate or 0) < lastUpdate then
|
||||
tinsert(response.guilds, guild)
|
||||
end
|
||||
end
|
||||
|
||||
if next(response.characters) or #response.guilds > 0 then
|
||||
TSMAPI.Sync:SendData("ItemTracker", "RESPONSE", response, target)
|
||||
end
|
||||
end
|
||||
|
||||
function Sync:SendUpdateData(target, response)
|
||||
local data = {characters={}, guilds={}}
|
||||
for player, keys in pairs(response.characters or {}) do
|
||||
data.characters[player] = {}
|
||||
for _, key in ipairs(keys) do
|
||||
data.characters[player][key] = TSM.characters[player][key]
|
||||
data.characters[player].lastUpdate = data.characters[player].lastUpdate or {}
|
||||
data.characters[player].lastUpdate[key] = TSM.characters[player].lastUpdate[key]
|
||||
end
|
||||
end
|
||||
for _, guild in ipairs(response.guilds or {}) do
|
||||
data.guilds[guild] = TSM.guilds[guild]
|
||||
end
|
||||
|
||||
if next(data) then
|
||||
TSMAPI.Sync:SendData("ItemTracker", "DATA", data, target)
|
||||
end
|
||||
end
|
||||
|
||||
function Sync:ProcessUpdateData(data)
|
||||
for player, info in pairs(data.characters or {}) do
|
||||
TSM.characters[player] = TSM.characters[player] or CopyTable(TSM.characterDefaults)
|
||||
for key, updateTime in pairs(info.lastUpdate or {}) do
|
||||
TSM.characters[player][key] = info[key]
|
||||
TSM.characters[player].lastUpdate[key] = updateTime
|
||||
end
|
||||
end
|
||||
for player, info in pairs(data.guilds or {}) do
|
||||
TSM.guilds[player] = info
|
||||
end
|
||||
end
|
||||
|
||||
function Sync:Callback(key, data, source)
|
||||
if key == "REQUEST" then
|
||||
Sync:SendUpdateResponse(source, data)
|
||||
elseif key == "RESPONSE" then
|
||||
Sync:SendUpdateData(source, data)
|
||||
elseif key == "DATA" then
|
||||
Sync:ProcessUpdateData(data)
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user