You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

70 lines
1.3 KiB

--[[
@Authors: Ben Dol (BeniS)
@Details: Queue class for event queuing.
]]
Queue = newclass("Queue")
Queue.create = function(callback)
local obj = Queue.internalCreate()
obj.queue = {}
obj.callback = callback
return obj
end
-- gets/sets
function Queue:getQueue()
return self.queue
end
function Queue:setQueue(queue)
self.queue = queue
end
function Queue:getCallback()
return self.callback
end
function Queue:setCallback(callback)
self.callback = callback
end
-- logic
function Queue:add(item)
table.insert(self.queue, item)
end
function Queue:start()
local compiled = function() self:finished() end
for k,event in pairs(self.queue) do
print("Compiling " .. tostring(event:getId()))
local snip = compiled
compiled = function()
local realCallback = event:getCallback()
event:setCallback(function()
print("Event compiled callback called")
realCallback()
-- next queue item
snip()
end)
print("Event started from queue chain")
event:start()
end
end
-- Start the queue chain
print("Start compiled chain")
compiled()
end
function Queue:finished()
print("Queue:finished")
local done = function()
local callback = self:getCallback()
if callback then callback() end
end
done()
end