52 lines
1.4 KiB
Lua
52 lines
1.4 KiB
Lua
|
local Callbacks = {}
|
||
|
|
||
|
function On(Name, Funktion)
|
||
|
-- Nur Strings erlaubt!
|
||
|
if type(Name) ~= "string" then
|
||
|
error("Ungueltiger Callback-Name "..tostring(Name))
|
||
|
return
|
||
|
end
|
||
|
if not Callbacks[Name] then
|
||
|
-- Bestehende globale Funktionen duerfen nicht ueberschrieben werden
|
||
|
if _G[Name] ~= nil then
|
||
|
error(Name.."() bereits definiert")
|
||
|
return
|
||
|
end
|
||
|
-- Bei Weichen und Signalen muss EEP vorher informiert werden
|
||
|
-- Item ist normal "Switch" oder "Signal"
|
||
|
local Item, Number = string.match(Name, 'EEPOn(.+)_(%d+)')
|
||
|
if Number ~= nil then
|
||
|
local Registration = "EEPRegister"..Item
|
||
|
if _G[Registration](Number) == 0 then
|
||
|
error(Registration.."("..tostring(Number)..") fehlgeschlagen")
|
||
|
end
|
||
|
end
|
||
|
-- Lambda-Untertabelle fuer diesen EEP Callback eroeffnen
|
||
|
Callbacks[Name] = {}
|
||
|
-- Handler installieren, der alle Lambdas ausfuehrt
|
||
|
_G[Name] = function(...)
|
||
|
for cnt = 1, #Callbacks[Name] do
|
||
|
Callbacks[Name][cnt](...)
|
||
|
end
|
||
|
-- EEPMain stoppt, geben wir hier nicht 1 zurueck
|
||
|
return 1
|
||
|
end
|
||
|
end
|
||
|
table.insert(Callbacks[Name], Funktion)
|
||
|
end
|
||
|
|
||
|
-- EEPMain-Callback registrieren
|
||
|
function Main(Funktion)
|
||
|
On("EEPMain", Funktion)
|
||
|
end
|
||
|
|
||
|
-- Signal-Callback registrieren
|
||
|
function OnSignal(Signal, Funktion)
|
||
|
On("EEPOnSignal_"..tostring(Signal), Funktion)
|
||
|
end
|
||
|
|
||
|
-- Weichen-Callbacks registrieren
|
||
|
function OnSwitch(Switch, Funktion)
|
||
|
On("EEPOnSwitch_"..tostring(Switch), Funktion)
|
||
|
end
|