comparison core.lua @ 40:dc3a66688e50

More debug message tweaks. Put comm and loot caches on separate-but-related expirations; comm is now a bit shorter and loot is now a bit longer. Check cache expirations more often (possibly revert this).
author Farmbuyer of US-Kilrogg <farmbuyer@gmail.com>
date Fri, 30 Dec 2011 21:29:44 +0000
parents 8f7ec6ccf5e3
children d6b8858c1b64
comparison
equal deleted inserted replaced
39:8f7ec6ccf5e3 40:dc3a66688e50
84 ['legendary'] = 5, ['orange'] = 5, 84 ['legendary'] = 5, ['orange'] = 5,
85 ['artifact'] = 6, 85 ['artifact'] = 6,
86 --['heirloom'] = 7, 86 --['heirloom'] = 7,
87 } 87 }
88 local my_name = UnitName('player') 88 local my_name = UnitName('player')
89 local comm_cleanup_ttl = 5 -- seconds in the cache 89 local comm_cleanup_ttl = 4 -- seconds in the cache
90 local revision_large = nil -- defaults to 1, possibly changed by revision 90 local revision_large = nil -- defaults to 1, possibly changed by revision
91 local g_LOOT_ITEM_ss, g_LOOT_ITEM_MULTIPLE_sss, g_LOOT_ITEM_SELF_s, g_LOOT_ITEM_SELF_MULTIPLE_ss 91 local g_LOOT_ITEM_ss, g_LOOT_ITEM_MULTIPLE_sss, g_LOOT_ITEM_SELF_s, g_LOOT_ITEM_SELF_MULTIPLE_ss
92 92
93 93
94 ------ Addon member data 94 ------ Addon member data
303 -- this is ass-ugly 303 -- this is ass-ugly
304 for name,c in pairs(caches) do 304 for name,c in pairs(caches) do
305 local fifo = c.fifo 305 local fifo = c.fifo
306 local active = #fifo > 0 306 local active = #fifo > 0
307 while (#fifo > 0) and (now - fifo[1].t > c.ttl) do 307 while (#fifo > 0) and (now - fifo[1].t > c.ttl) do
308 addon.dprint('cache', name, "cache removing",fifo[1].t, fifo[1].m) 308 addon.dprint('cache', name, "cache removing", fifo[1].t, "<", fifo[1].m, ">")
309 tremove(fifo,1) 309 tremove(fifo,1)
310 end 310 end
311 if active and #fifo == 0 and c.func then 311 if active and #fifo == 0 and c.func then
312 addon.dprint('cache', name, "empty, firing cleanup") 312 addon.dprint('cache', name, "empty, firing cleanup")
313 c:func() 313 c:func()
314 end 314 end
315 alldone = alldone and (#fifo == 0) 315 alldone = alldone and (#fifo == 0)
316 end 316 end
317 if alldone then 317 if alldone then
318 addon.dprint('cache',"OnLoop finishing animation group") 318 addon.dprint('cache',"OnLoop FINISHING animation group")
319 cleanup_group:Finish() 319 cleanup_group:Finish()
320 end 320 else
321 addon.dprint('cache',"OnLoop done") 321 addon.dprint('cache',"OnLoop done, not yet finished")
322 end
322 end) 323 end)
323 324
324 local function _add (cache, x) 325 local function _add (cache, x)
325 local datum = { t=time(), m=x } 326 local datum = { t=time(), m=x }
326 cache.hash[x] = datum 327 cache.hash[x] = datum
327 tinsert (cache.fifo, datum) 328 tinsert (cache.fifo, datum)
328 if not cleanup_group:IsPlaying() then 329 if not cleanup_group:IsPlaying() then
329 addon.dprint('cache', cache.name, "STARTING animation group") 330 addon.dprint('cache', cache.name, "with entry", datum.t, "<", datum.x, "> STARTING animation group")
330 cache.cleanup:SetDuration(2) -- hmmm 331 cache.cleanup:SetDuration(1) -- hmmm
331 cleanup_group:Play() 332 cleanup_group:Play()
332 end 333 end
333 end 334 end
334 local function _test (cache, x) 335 local function _test (cache, x)
336 -- FIXME This can return false positives, if called after the onloop
337 -- fifo has been removed but before the GC has removed the weak entry.
338 -- What to do, what to do...
335 return cache.hash[x] ~= nil 339 return cache.hash[x] ~= nil
336 --[[for _,v in ipairs(cache) do
337 if v.m == x then return true end
338 end]]
339 end 340 end
340 341
341 function create_new_cache (name, ttl, on_alldone) 342 function create_new_cache (name, ttl, on_alldone)
342 -- setting OnFinished for cleanup fires at the end of each inner loop, 343 -- setting OnFinished for cleanup fires at the end of each inner loop,
343 -- with no 'requested' argument to distinguish cases. thus, on_alldone. 344 -- with no 'requested' argument to distinguish cases. thus, on_alldone.
719 if addon.display then 720 if addon.display then
720 addon:redisplay() 721 addon:redisplay()
721 end 722 end
722 table.wipe(candidates) 723 table.wipe(candidates)
723 end 724 end
724 addon.recent_loot = create_new_cache ('loot', comm_cleanup_ttl, prefer_local_loots) 725 addon.recent_loot = create_new_cache ('loot', comm_cleanup_ttl+3, prefer_local_loots)
725 726
726 local GetItemInfo, GetItemIcon = GetItemInfo, GetItemIcon 727 local GetItemInfo, GetItemIcon = GetItemInfo, GetItemIcon
727 728
728 -- 'from' and onwards only present if this is triggered by a broadcast 729 -- 'from' and onwards only present if this is triggered by a broadcast
729 function addon:_do_loot (local_override, recipient, itemid, count, from, extratext) 730 function addon:_do_loot (local_override, recipient, itemid, count, from, extratext)
1956 if sender == my_name then return end 1957 if sender == my_name then return end
1957 end 1958 end
1958 self.dprint('comm', ":OCR from", sender, "message is", msg) 1959 self.dprint('comm', ":OCR from", sender, "message is", msg)
1959 1960
1960 if self.recent_messages:test(msg) then 1961 if self.recent_messages:test(msg) then
1961 return self.dprint('cache', "message <",msg,"> already in cache, skipping") 1962 self.dprint('cache', "OCR message <",msg,"> already in cache, skipping")
1963 return
1962 end 1964 end
1963 self.recent_messages:add(msg) 1965 self.recent_messages:add(msg)
1964 1966
1965 -- Nothing is actually returned, just (ab)using tail calls. 1967 -- Nothing is actually returned, just (ab)using tail calls.
1966 return dotdotdot(sender,strsplit('\a',msg)) 1968 return dotdotdot(sender,strsplit('\a',msg))