refactoring
This commit is contained in:
+25
-33
@@ -1,6 +1,6 @@
|
|||||||
aux 'core'
|
aux 'core'
|
||||||
|
|
||||||
event_frame = CreateFrame('Frame')
|
local event_frame = CreateFrame('Frame')
|
||||||
|
|
||||||
local listeners, threads = t, t
|
local listeners, threads = t, t
|
||||||
|
|
||||||
@@ -13,52 +13,47 @@ function LOAD()
|
|||||||
end
|
end
|
||||||
|
|
||||||
function EVENT()
|
function EVENT()
|
||||||
for _, listener in listeners do
|
for id, listener in listeners do
|
||||||
if event == listener.event and not listener.killed then
|
if listener.killed then
|
||||||
|
listeners[id] = nil
|
||||||
|
elseif event == listener.event then
|
||||||
listener.cb(listener.kill)
|
listener.cb(listener.kill)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function UPDATE()
|
do
|
||||||
for _, listener in listeners do
|
function UPDATE()
|
||||||
if not any(listeners, function(l) return not l.killed and l.event == listener.event end) then
|
for _, listener in listeners do
|
||||||
event_frame:UnregisterEvent(listener.event)
|
local event, needed = listener.event, false
|
||||||
|
for _, listener in listeners do needed = needed or listener.event == event and not listener.killed end
|
||||||
|
if not needed then event_frame:UnregisterEvent(event) end
|
||||||
end
|
end
|
||||||
end
|
|
||||||
|
|
||||||
filter(listeners, function(l) return not l.killed end)
|
for id, thread in threads do
|
||||||
filter(threads, function(th) return not th.killed end)
|
if thread.killed or not thread.k then
|
||||||
|
threads[id] = nil
|
||||||
for id, thread in threads do
|
else
|
||||||
if not thread.killed then
|
local k = thread.k
|
||||||
local k = thread.k
|
thread.k = nil
|
||||||
thread.k = nil
|
thread_id = id
|
||||||
thread_id = id
|
k()
|
||||||
k()
|
thread_id = nil
|
||||||
thread_id = nil
|
|
||||||
if not thread.k then
|
|
||||||
thread.killed = true
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
do
|
do local id = 0
|
||||||
local id = 0
|
|
||||||
function private.id.get() id = id + 1; return id end
|
function private.id.get() id = id + 1; return id end
|
||||||
end
|
end
|
||||||
|
|
||||||
function public.kill_listener(listener_id)
|
function public.kill_listener(listener_id)
|
||||||
for listener in present(listeners[listener_id]) do
|
for listener in present(listeners[listener_id]) do listener.killed = true end
|
||||||
listener.killed = true
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
function public.kill_thread(thread_id)
|
function public.kill_thread(thread_id)
|
||||||
for thread in present(threads[thread_id]) do
|
for thread in present(threads[thread_id]) do thread.killed = true end
|
||||||
thread.killed = true
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
function public.event_listener(event, cb)
|
function public.event_listener(event, cb)
|
||||||
@@ -69,15 +64,12 @@ function public.event_listener(event, cb)
|
|||||||
end
|
end
|
||||||
|
|
||||||
function public.on_next_event(event, callback)
|
function public.on_next_event(event, callback)
|
||||||
event_listener(event, function(kill)
|
event_listener(event, function(kill) callback(); kill() end)
|
||||||
callback()
|
|
||||||
kill()
|
|
||||||
end)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
function public.thread(k, ...) temp=arg
|
function public.thread(k, ...) temp=arg
|
||||||
local thread_id = id
|
local thread_id = id
|
||||||
threads[thread_id] = {k = L(k, unpack(arg))}
|
threads[thread_id] = T('k', L(k, unpack(arg)))
|
||||||
return thread_id
|
return thread_id
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user