|
|
|
@ -9,11 +9,11 @@ |
|
|
|
-- Channel sync for sharing AuctionDB scan data between players. |
|
|
|
-- Channel sync for sharing AuctionDB scan data between players. |
|
|
|
|
|
|
|
|
|
|
|
local TSM = select(2, ...) |
|
|
|
local TSM = select(2, ...) |
|
|
|
local ChannelSync = TSM:NewModule("ChannelSync", "AceComm-3.0", "AceEvent-3.0") |
|
|
|
local ChannelSync = TSM:NewModule("ChannelSync", "AceEvent-3.0") |
|
|
|
|
|
|
|
|
|
|
|
local CHANNEL_NAME = "TSM_AuctionDB" |
|
|
|
local CHANNEL_NAME = "TSM_AuctionDB" |
|
|
|
local COMM_PREFIX = "TSMAuctionDB" |
|
|
|
local COMM_PREFIX = "TSMAuctionDB" |
|
|
|
local CHUNK_SIZE = 220 |
|
|
|
local CHUNK_SIZE = 180 |
|
|
|
local BUNDLE_TIMEOUT = 45 |
|
|
|
local BUNDLE_TIMEOUT = 45 |
|
|
|
|
|
|
|
|
|
|
|
local private = { |
|
|
|
local private = { |
|
|
|
@ -27,7 +27,7 @@ local strbyte = string.byte |
|
|
|
|
|
|
|
|
|
|
|
local libS = LibStub:GetLibrary("AceSerializer-3.0") |
|
|
|
local libS = LibStub:GetLibrary("AceSerializer-3.0") |
|
|
|
local libC = LibStub:GetLibrary("LibCompress") |
|
|
|
local libC = LibStub:GetLibrary("LibCompress") |
|
|
|
local libCE = libC:GetAddonEncodeTable() |
|
|
|
local libCE = libC:GetChatEncodeTable("", "\031") |
|
|
|
|
|
|
|
|
|
|
|
local function HashString(str) |
|
|
|
local function HashString(str) |
|
|
|
local hash = 0 |
|
|
|
local hash = 0 |
|
|
|
@ -49,15 +49,15 @@ end |
|
|
|
|
|
|
|
|
|
|
|
local function ChatFilter(_, _, msg, _, _, _, _, _, channelName) |
|
|
|
local function ChatFilter(_, _, msg, _, _, _, _, _, channelName) |
|
|
|
if channelName ~= CHANNEL_NAME then return end |
|
|
|
if channelName ~= CHANNEL_NAME then return end |
|
|
|
if strsub(msg, 1, #COMM_PREFIX) == COMM_PREFIX then |
|
|
|
if strsub(msg, 1, #COMM_PREFIX + 1) == COMM_PREFIX .. "|" then |
|
|
|
return true |
|
|
|
return true |
|
|
|
end |
|
|
|
end |
|
|
|
end |
|
|
|
end |
|
|
|
|
|
|
|
|
|
|
|
function ChannelSync:OnEnable() |
|
|
|
function ChannelSync:OnEnable() |
|
|
|
self:RegisterComm(COMM_PREFIX) |
|
|
|
|
|
|
|
self:RegisterEvent("PLAYER_ENTERING_WORLD", "OnPlayerEnteringWorld") |
|
|
|
self:RegisterEvent("PLAYER_ENTERING_WORLD", "OnPlayerEnteringWorld") |
|
|
|
self:RegisterEvent("CHAT_MSG_CHANNEL_NOTICE", "OnChannelNotice") |
|
|
|
self:RegisterEvent("CHAT_MSG_CHANNEL_NOTICE", "OnChannelNotice") |
|
|
|
|
|
|
|
self:RegisterEvent("CHAT_MSG_CHANNEL", "OnChannelMessage") |
|
|
|
if ChatFrame_AddMessageEventFilter then |
|
|
|
if ChatFrame_AddMessageEventFilter then |
|
|
|
ChatFrame_AddMessageEventFilter("CHAT_MSG_CHANNEL", ChatFilter) |
|
|
|
ChatFrame_AddMessageEventFilter("CHAT_MSG_CHANNEL", ChatFilter) |
|
|
|
end |
|
|
|
end |
|
|
|
@ -105,7 +105,7 @@ function ChannelSync:BroadcastScanData(scanType) |
|
|
|
return |
|
|
|
return |
|
|
|
end |
|
|
|
end |
|
|
|
EnsureChannel() |
|
|
|
EnsureChannel() |
|
|
|
if not private.channelName then return end |
|
|
|
if not private.channelName or not private.channelId then return end |
|
|
|
|
|
|
|
|
|
|
|
TSM:Serialize() |
|
|
|
TSM:Serialize() |
|
|
|
local payload = { |
|
|
|
local payload = { |
|
|
|
@ -123,7 +123,7 @@ function ChannelSync:BroadcastScanData(scanType) |
|
|
|
for i = 1, total do |
|
|
|
for i = 1, total do |
|
|
|
local chunk = strsub(encoded, (i - 1) * CHUNK_SIZE + 1, i * CHUNK_SIZE) |
|
|
|
local chunk = strsub(encoded, (i - 1) * CHUNK_SIZE + 1, i * CHUNK_SIZE) |
|
|
|
local msg = strjoin("|", COMM_PREFIX, hash, i .. "/" .. total, chunk) |
|
|
|
local msg = strjoin("|", COMM_PREFIX, hash, i .. "/" .. total, chunk) |
|
|
|
self:SendCommMessage(COMM_PREFIX, msg, "CHANNEL", private.channelName) |
|
|
|
SendChatMessage(msg, "CHANNEL", nil, private.channelId) |
|
|
|
end |
|
|
|
end |
|
|
|
end |
|
|
|
end |
|
|
|
|
|
|
|
|
|
|
|
@ -151,7 +151,10 @@ local function MergeIncomingData(payload) |
|
|
|
TSM:Serialize() |
|
|
|
TSM:Serialize() |
|
|
|
end |
|
|
|
end |
|
|
|
|
|
|
|
|
|
|
|
function ChannelSync:OnCommReceived(_, msg, _, source) |
|
|
|
function ChannelSync:OnChannelMessage(_, msg, source, _, _, _, _, _, channelName) |
|
|
|
|
|
|
|
if channelName ~= CHANNEL_NAME then return end |
|
|
|
|
|
|
|
if strsub(msg or "", 1, #COMM_PREFIX + 1) ~= COMM_PREFIX .. "|" then return end |
|
|
|
|
|
|
|
|
|
|
|
source = ("-"):split(source or "") |
|
|
|
source = ("-"):split(source or "") |
|
|
|
if strlower(source or "") == strlower(UnitName("player") or "") then return end |
|
|
|
if strlower(source or "") == strlower(UnitName("player") or "") then return end |
|
|
|
|
|
|
|
|
|
|
|
|