49 lines
1.7 KiB
Lua
49 lines
1.7 KiB
Lua
|
-- Schluessel ist der Callback-Name, Wert ist eine Tabelle mit den Funktionen
|
||
|
local Callbacks = {}
|
||
|
|
||
|
function On(Name, UserFunktion)
|
||
|
-- Das folgende muss nur fuer den ersten Aufruf je Callback gemacht werden
|
||
|
-- Spaetere Aufrufe koennen mit dem exitierenden Eintrag weiterarbeiten
|
||
|
if not Callbacks[Name] then
|
||
|
-- Wenn der User den Callback bereits definiert hat, alles abbrechen
|
||
|
-- Sonst kommt schwer nachzuvollziehende Gruetze raus
|
||
|
assert(_G[Name] == nil, Name.." bereits definiert")
|
||
|
-- Bei Weichen und Signalen muss der Callback registriert werden
|
||
|
-- Item ist entweder "Switch" oder "Signal"
|
||
|
local Item, Number = string.match(Name, 'EEPOn(.+)_(%d+)')
|
||
|
if Number ~= nil then
|
||
|
local RegisterFunc="EEPRegister"..Item
|
||
|
local ok = _G[RegisterFunc](Number)
|
||
|
if (ok==0) then print(RegisterFunc.."("..Number..") fehlgeschlagen") end
|
||
|
end
|
||
|
-- Tabelleneintrag fuer diesen Callback eroeffnen
|
||
|
Callbacks[Name] = {}
|
||
|
-- Hier erstellen wir den echten Callback, welcher dann von EEP aufgerufen wird
|
||
|
-- und der jede in unserer Tabelle eingetragene Funktion aufruft
|
||
|
_G[Name] = function(...)
|
||
|
for _, UserFunktion in pairs(Callbacks[Name]) do
|
||
|
UserFunktion(...)
|
||
|
end
|
||
|
-- Wir sind vielleicht die EEPMain und muessen daher 1 zurueckgeben
|
||
|
return 1
|
||
|
end
|
||
|
end
|
||
|
-- Die uns gegebene Funktion an unseren Tabelleneintrag anhaengen
|
||
|
table.insert(Callbacks[Name], UserFunktion)
|
||
|
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
|