Hmm. lovely addon, blizzard should add something like this by default. CJ 07:57, 5 October 2006 (EDT)

Yes. Or at least tell me what the actual limits are when I ask :-P   --Mikk (T) 11:10, 5 October 2006 (EDT)

Bug fix and request for tweakability


I like your library and use it for one of my guild addon I keep up to date, but in the last version there is a little bug in ChatThrottleStats on the line 26 who need to be:
for _,Prio in pairs(ChatThrottleLib.Prio) do
and not:
for _,Prio in ChatThrottleLib.Prio do
to work correctly.

Plus in ChatThrottleLib I have understood that the CPS and BURST value are from the lowest common denominator from experience of some servers. Could I suggest you some modification to have the possibility to change them from outside ChatThrottleLib to adapt the value by the powerusers (for the risk to themself to be disconected) ?

here my modifications:

file: ChatThrottleLib.lua
031: --local MAX_CPS = 800
034: --local BURST = 4000
051: ChatThrottleLib.MAX_CPS = 800;
052: ChatThrottleLib.BURST = 4000;
254: local newavail = ChatThrottleLib.MAX_CPS * (now - self.LastAvailUpdate)
258: self.avail = math_min(self.avail + (newavail*0.1), ChatThrottleLib.MAX_CPS*0.5)
261: self.avail = math_min(ChatThrottleLib.MAX_CPS, self.avail + newavail)
264: self.avail = math_min(ChatThrottleLib.BURST, self.avail + newavail)
268: self.avail = math_max(self.avail, 0-(ChatThrottleLib.MAX_CPS*2))

It is a modification I have done on your addon, but to be sure that this modified version is used everywhere I need to always have a bigger version number than yours to have all the others addon use my version :(. One other mod I will try to do is to save those 2 values per server. But first I need to learn a little bit more about LUA programming and WoW interface programming :)

—The preceding unsigned comment was added by Cabu (talk · contr).

I've moved all the constant values from locals to "ChatThrottleLib." member variables in the latest version. Note that ChatThrottleLib itself cannot really keep these values saved, as it is an embeddable library. It will have to be up to (one of) the embedding addon(s) to make the values tweakable.   --Mikk (T) 07:28, 9 April 2007 (EDT)


Is there a list of addons that are known to use this library ? User:CrazyJack/Sig 06:37, 6 April 2007 (EDT)

Not to my knowledge. All addons using AceComm / Telepathy for comms will be using it implicitly though. I also know that CraftList uses it because I put it in there :-)   --Mikk (T) 08:32, 8 April 2007 (EDT)

New tests confirm it has nothing to do with buffer sizes at the server

(by Mikk (T))   »   So... I got this bright idea that I could create a 100% safe disconnect guard by injecting a "ping" in the stream every so often and watch for returned pongs, and hence know for sure that the server buffer had despooled. (Except using a moving window with several pings in flight etc... standard network protocol stuff, no need to expound on this.)

So I wrote this little test:

MY_Frame = MY_Frame or CreateFrame("Frame")

local function print(msg)

local BUFSIZE = 1000
local me = UnitName("player")

local sent=0
local rcvd=0

local pad = strrep("AAAAAAAAAA",20)

local function myfunc(this,event,arg1,arg2,arg3)
  if arg1=="MYTEST" then
    local n=tonumber(strmatch(arg2,"(%d+)"))

MY_Frame:SetScript("OnEvent", myfunc)

local function myonupdate(this)
  if sent>200000 then
    if sent-rcvd<BUFSIZE then
      local msg=format("%08d", sent)..pad
      SendAddonMessage("MYTEST", msg, "WHISPER", me)

MY_Frame:SetScript("OnUpdate", myonupdate)

Now... there's no way in h*ll the buffer size on the receiving side is as small as 1000 bytes. Yet this disconnects me.

I tried as small as 500 bytes, and THAT worked. But given my average RTT and the message size used, that simply amounts to the ~3000 CPS that I'd already established earlier that my server (Bloodhoof EU) will handle.

So.. yeah.. I guess there's a hardcoded check serverside for clients that transmit "too much data". And we don't get to know what that limit is :-/

--Mikk (T) 01:17, 29 April 2008 (UTC)