-- 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