DataChangeBus — Entwickler
Zweck
Dieses Paket kapselt die Erzeugung und Verteilung von externen Datenänderungen innerhalb der Lua-Bibliothek.
Es hat vier Kernaufgaben:
- Vereinheitlichung der Änderungsereignisse für externe Daten
- Verteilung dieser Ereignisse an registrierte Listener
- Bereitstellung einer kleinen API für Produzenten von Datenänderungen
- Initiales Auslösen eines vollständigen Resets für nachgelagerte Empfänger
Alle Lua-Dateien in ce/hub/publish
Architekturübersicht
Das Paket ist bewusst klein gehalten:
DataChangeBusdefiniert die EventtypenDataChangeBusnimmt Datenänderungen aus anderen Paketen entgegenDataChangeBusverteilt diese Änderungen an alle registrierten ListenerServerEventBufferausce.databridgezeichnet die verteilten Ereignisse für den späteren Export auf
Wichtig: ce.hub.publish enthält keine Fachdaten und keine Dateiausgabe. Es ist nur die interne Drehscheibe für Änderungsereignisse.
DataChangeBus
Zentrale Ereignisverteiler-Schicht des Pakets.
Verantwortlichkeiten:
- Definition der unterstützten Eventtypen
- Verwaltung registrierter Listener
- Erzeugen einheitlicher Eventobjekte mit
eventCounter,typeundpayload - Verteilung der erzeugten Eventobjekte an alle Listener
- Bereitstellung spezialisierter Hilfsfunktionen für
DataAdded,DataChanged,DataRemovedundListChanged - Auslösen eines initialen
CompleteResetbeim Laden des Moduls
Wichtig:
DataChangeBussoll die Inhalte vonceType,keyId,elementoderlistnicht fachlich kennen oder interpretieren- diese Felder werden nur validiert und an Listener weitergereicht
- der einzige Eventtyp, dessen Bedeutung und Payload hier bewusst bekannt sind, ist
CompleteReset
Laufzeitfluss
Der reguläre Ablauf für eine Datenänderung ist:
- Ein Paket wie
ce.hub.data,ce.mods.roadoderce.mods.transitruft eine derfire*-Methoden vonDataChangeBusauf. DataChangeBusvalidiert die Mindeststruktur der Eingabedaten.DataChangeBuserhöht den interneneventCounter.DataChangeBuserzeugt ein Eventobjekt mit Typ und Payload.- Alle registrierten Listener erhalten dieses Event über
fireEvent(...). ServerEventBufferausce.databridgepuffert das Event für den späteren Export.
Beim Laden des Moduls wird einmal ein CompleteReset erzeugt, damit nachgelagerte Empfänger ihren Zustand vollständig neu aufbauen können.
Design-Entscheidungen
Bus bleibt generisch
DataChangeBus darf keine Fachobjekte interpretieren. Er transportiert, validiert und verteilt nur. Domänenwissen bleibt bei den Produzenten.
Keine Dateiausgabe
Aufzeichnung und Ausgabe liegen außerhalb des Pakets. ServerEventBuffer aus ce.databridge übernimmt das.
Listener werden synchron aufgerufen
Ein fehlerhafter oder langsamer Listener kann den gesamten Änderungsfluss beeinflussen — das ist bewusst einfach gehalten.
Reset-Verhalten beim Start
CompleteReset muss vor dem regulären Eventstrom möglich sein, damit externe Empfänger ihren Zustand sauber initialisieren können. Änderungen hier wirken sich auf Neustarts und Reconnects aus.
Wichtige Invarianten
- Listener müssen eine Methode
fireEvent(event)besitzen. eventCountermuss pro erzeugtem Event genau einmal erhöht werden.ceType,keyId,elementundlistbleiben fachlich opaque.ce.hub.publishverteilt Ereignisse nur weiter; Aufzeichnung und Ausgabe liegen außerhalb.
Relevante Nachbarn
ce.databridge—ServerEventBufferzeichnet die verteilten Ereignisse aufce.hub.data,ce.mods.road,ce.mods.transit— erzeugen Datenänderungence.hub.util.TableUtils— unterstützt die Debug-Ausgabe
Informationen für Anwender: README.md