Function definition for queue and group re-form
Sasky [08-12-14 - 06:39]
Function definition for queue and group re-form
diff --git a/AutoInvite.lua b/AutoInvite.lua
index 75df7f1..37d8842 100644
--- a/AutoInvite.lua
+++ b/AutoInvite.lua
@@ -173,6 +173,95 @@ function AutoInvite.kickCheck()
end
------------------------------------------------
+--- Invite queue
+------------------------------------------------
+
+-- FIFO invite queue
+AutoInvite.toInvite = {
+ vals = {},
+ front = 1,
+ back = 1,
+}
+local queue = AutoInvite.toInvite
+function queue:size()
+ return queue.back - queue.front
+end
+
+function queue:push(val)
+ local back = self.back
+ self.vals[back] = val
+ queue.back = back + 1
+end
+
+function queue:pop()
+ if self:size() == 0 then
+ return nil
+ end
+ local front = self.front
+ local retval = self.vals[front]
+ self.vals[front] = nil
+ self.front = front + 1
+ return retval
+end
+
+function queue:reset()
+ self.vals = {}
+ self.front = 1
+ self.back = 1
+end
+
+-- Key: name / Value: timestamp
+AutoInvite.sentInvite = {}
+-- sentInvite not array form, so maintain count
+AutoInvite.sentInvites = 0
+
+function AutoInvite:processQueue()
+ local now = GetTimeStamp()
+ local effectiveCount = GetGroupSize() + self.sentInvites
+ local numInvites = math.min(queue:size(), self.cfg.maxSize - effectiveCount)
+ for _ = 1,numInvites do
+ local name = queue:pop()
+ self.sentInvites = self.sentInvites + 1
+ self.sentInvite[name] = now
+ GroupInviteByName(name)
+ end
+end
+
+function AutoInvite:checkSentInvites()
+ local now = GetTimeStamp()
+
+ local members = {}
+ for i=1,GetGroupSize() do
+ local tag = GetGroupUnitTagByIndex(i)
+ members[GetUnitName(tag)] = true
+ end
+
+ for name, time in pairs(self.sentInvite) do
+ if members[name] or GetDiffBetweenTimeStamps(now, time) < 15 then
+ self.sentInvite[name] = nil
+ AutoInvite.sentInvites = AutoInvite.sentInvites - 1
+ end
+ end
+end
+
+function AutoInvite:resetQueues()
+ self.toInvite = {}
+ queue:reset()
+end
+
+
+function AutoInvite:resetGroup()
+ self:resetQueues()
+ for i=1,GetGroupSize() do
+ local tag = GetGroupUnitTagByIndex(i)
+ local name = GetUnitName(tag)
+ table.insert(self.toInvite, name)
+ GroupDisband()
+ GroupLeave() --for group leader bug
+ end
+end
+
+------------------------------------------------
--- Main interface
------------------------------------------------
AutoInvite.disable = function()