First commit.
Oh my. It's been such a long time since I wrote hook and plugin and general system wankery in Lua. Ah, the good ol' Garry's Mod days. I kind of miss them. Or maybe not.master
commit
d23fb2b07f
|
@ -0,0 +1 @@
|
||||||
|
*swp
|
|
@ -0,0 +1,31 @@
|
||||||
|
hook = {}
|
||||||
|
hook.Hooks = {}
|
||||||
|
|
||||||
|
function hook.Add(event_name, hook_name, callback)
|
||||||
|
if hook.Hooks[event_name] == nil then
|
||||||
|
hook.Hooks[event_name] = {}
|
||||||
|
end
|
||||||
|
hook.Hooks[event_name][hook_name] = callback
|
||||||
|
end
|
||||||
|
|
||||||
|
function hook.Call(event_name, ...)
|
||||||
|
local Args = {...}
|
||||||
|
if hook.Hooks[event_name] == nil then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
for K, Function in pairs(hook.Hooks[event_name]) do
|
||||||
|
if type(Function) == 'function' then
|
||||||
|
local Return = Function(unpack(Args))
|
||||||
|
if Return == false then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function hook.Remove(event_name, hook_name)
|
||||||
|
if hook.Hooks[event_name] == nil then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
hook.Hooks[event_name][hook_name] = nil
|
||||||
|
end
|
|
@ -0,0 +1,41 @@
|
||||||
|
local socket = require('socket')
|
||||||
|
|
||||||
|
reactor = {}
|
||||||
|
|
||||||
|
function reactor:Initialize(quantum)
|
||||||
|
self._read_sockets = {}
|
||||||
|
self._write_sockets = {}
|
||||||
|
self._quantum = quantum or 0.1
|
||||||
|
end
|
||||||
|
|
||||||
|
function reactor:Run()
|
||||||
|
local read = {}
|
||||||
|
for Socket, V in pairs(self._read_sockets) do
|
||||||
|
read[#read+1] = Socket
|
||||||
|
end
|
||||||
|
local write = {}
|
||||||
|
for Socket, V in pairs(self._write_sockets) do
|
||||||
|
read[#read+1] = Socket
|
||||||
|
end
|
||||||
|
|
||||||
|
local r, w, e = socket.select(read, write, self._quantum)
|
||||||
|
if e == nil then
|
||||||
|
-- we actually got something on our sockets
|
||||||
|
for Socket, Data in pairs(self._read_sockets) do
|
||||||
|
if r[Socket] ~= nil then
|
||||||
|
local Callback = Data[1]
|
||||||
|
local Args = Data[2]
|
||||||
|
Callback(unpack(Args))
|
||||||
|
hook.Call('SocketDataReceived', Socket)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
for Socket, Data in pairs(self._write_sockets) do
|
||||||
|
if w[Socket] ~= nil then
|
||||||
|
local Callback = Data[1]
|
||||||
|
local Args = Data[2]
|
||||||
|
Callback(unpack(Args))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
hook.Call('ReactorTick')
|
||||||
|
end
|
Loading…
Reference in New Issue