Was ist der Lua Hub?
Der Lua Hub ist die interne Laufzeit- und Datenplattform der Control Extension in EEP.
Seine Aufgaben sind:
- Module orchestrieren
- registrierte
CeModuleinitialisieren - zyklische Modulaufrufe in
EEPMain()ausführen - zeitversetzte Aufgaben über den Scheduler abarbeiten
- registrierte
- EEP-Daten erfassen und veröffentlichen
- Discovery und Updates der Hub-Daten ausführen
- bekannte Zustände in Registries halten
- Änderungen als DTOs über den Datenbus veröffentlichen
- Bridge-Anbindung bereitstellen
- Hub- und Modul-Publisher an die Publishing-Infrastruktur anbinden
- Daten für Server und Web App verfügbar machen
Schnellstart
ce.ControlExtension ist der stabile Einstiegspunkt für EEP-Skripte. Darüber bindest Du die Control Extension in Deine Anlage ein und führst sie in EEPMain() zyklisch aus.
local ControlExtension = require("ce.ControlExtension")
function EEPMain()
ControlExtension.runTasks(1)
return 1
end
Öffentliche API
local ControlExtension = require("ce.ControlExtension")
ControlExtension.addModules(...)
Registriert die CeModule, die später ausgeführt werden sollen.
Beispiele für zulässige Module:
require("ce.mods.road.CeRoadModule")require("ce.mods.transit.CeTransitModule")require("ce.hub.CeHubModule").setOptions({ ceTypes = { ... } })
Das Hub-Modul ist bereits eingebaut. Du musst es nur dann explizit an addModules(...) übergeben, wenn Du seine Optionen direkt im Initialisierungscode setzen möchtest.
ControlExtension.initTasks()
Initialisiert die registrierten Module einmalig.
Diese Funktion ist optional. Wenn Du sie nicht selbst aufrufst, geschieht die Initialisierung automatisch beim ersten Aufruf von ControlExtension.runTasks(...).
ControlExtension.runTasks(cycleCount)
Führt die registrierten Module zyklisch aus.
Dieser Aufruf gehört in EEPMain(). Der optionale Parameter cycleCount steuert, in welchem Abstand I/O-nahe Veröffentlichungen erfolgen:
1: bei jedem EEP-Zyklus5: ungefähr einmal pro Sekunde0: bei jedem Zyklus ohne Intervallprüfung
ControlExtension.activateServer()
Aktiviert die Server-Kommunikation wieder, falls sie zuvor deaktiviert wurde.
ControlExtension.deactivateServer()
Deaktiviert die Server-Kommunikation, ohne die übrigen Modulzyklen abzuschalten.
ControlExtension.setDebug(boolean)
Schaltet Debug-Ausgaben für den Laufzeitablauf ein oder aus.
ControlExtension.setPauseEepDuringInitialization(boolean)
Steuert, ob EEP während der ersten Initialisierung der Module kurz pausiert werden soll.
Beispiel mit Hub-Optionen
local ControlExtension = require("ce.ControlExtension")
local CeHubModule = require("ce.hub.CeHubModule")
ControlExtension
.setDebug(true)
.activateServer()
.setPauseEepDuringInitialization(true)
.addModules(
require("ce.mods.road.CeRoadModule"),
CeHubModule.setOptions({
ceTypes = {
trains = {
fieldUpdates = {
speed = "oninterest",
targetSpeed = "oninterest",
},
fieldPublish = {
speed = "always",
targetSpeed = "oninterest",
},
},
},
})
)
function EEPMain()
ControlExtension.runTasks(1)
return 1
end
Architektur
Das Zielbild aus Anwendersicht ist bewusst einfach:
ce.ControlExtensionist die öffentliche Fassade.- Über
addModules(...)registrierst Du die gewünschten Module. EEPMain()ruftrunTasks(...)regelmäßig auf.- Die registrierten Module führen ihre Initialisierung und ihre zyklischen Aufgaben aus.
Wichtig ist dabei:
- Du arbeitest gegen
ce.ControlExtension, nicht gegen interne Hub-Dateien. - Hub-Module dürfen als Argumente an
addModules(...)genannt werden. - Die interne Orchestrierung innerhalb von
ce.hubist kein Teil der öffentlichen API.
Aktiver Hub-Lebenszyklus
Der aktive Hub-Pfad läuft heute in dieser Form:
MainLoopRunnerruftmodule.init()für alle registrierten Module auf.CeHubModule.init()registriert Publisher und Hub-Funktionen und führt die Initial-Discovery und Initial-Updates aus.MainLoopRunnerruft in jedem Zyklusmodule.run()auf.CeHubModule.run()führt Discovery und Updates aus und startet danach den Scheduler.- Die registrierten
*StatePublisherrufen nur nochPublisher.syncState(...)auf und veröffentlichen Änderungen überDataChangeBus.
Damit liegen Discovery und Fetch-Logik heute nicht mehr in den *StatePublisher.lua-Dateien, sondern in CeHubModule, Discovery- und Updater-Klassen.
Bridge-Anbindung
Die Lua-seitige Anbindung des Hubs an den Web-Server liegt in ce.hub.HubBridgeConnector.
Keine öffentliche API
Die Bridge wird indirekt über ControlExtension gesteuert:
ControlExtension.activateServer()- schaltet die Server-Kommunikation einControlExtension.deactivateServer()- schaltet sie aus, ohne die übrigen Module zu stoppen
Direkter Zugriff auf interne Dateien unter ce.hub.* ist nicht vorgesehen.
Unterverzeichnisse
- options/OPTIONS.md - Hub-Optionen fuer Discovery, Update und Publish
- data/README.md - Hub-Daten, CeTypes und Klassenstruktur
- data/DTO.md - aktive CeTypes und DTO-Felder des Hubs
- docs/README.md - ergänzende Architekturdokumente
- eep/README.md - EEP-Simulator für Tests ohne EEP
- scheduler/README.md - zeitbasierter Task-Planer
- util/README.md - technische Hilfsfunktionen
Architekturbeschreibung: README_DEV.md