Hub-Daten - Entwickler
Ziel der Struktur
Die Datenstruktur in ce.hub.data trennt fachlichen Zustand, EEP-Zugriff und Veröffentlichung bewusst voneinander.
Für dynamische CeTypes ist die gewünschte Rollenverteilung:
Domain: Zustand, Getter/Setter, Dirty-TrackingRegistry: zentrale Map der bekannten Objekte nach IDDiscovery: erkennt neue und entfernte ObjekteUpdater: liest EEP-Zustand und schreibt per Setter in die Domain-ObjektePublisher: sendet Add/Change/Remove-Events und wertet Sync-Optionen ausDtoFactory: baut serialisierbare DTOs
Einfachere Singleton-CeTypes wie Zeit, Wetter oder Version nutzen meist nur den kleineren Ausschnitt Registry + Updater + Publisher, folgen aber denselben Zuständigkeitsgrenzen:
- Fetch-Logik liegt im
Updater - Sync-Logik liegt im
Publisher
DTO-Konvention: CeTypes und Listen
Alle Daten werden in eine dreistufige Map-Struktur einsortiert:
ceType : string
└─ dtoId : string | number
└─ dto : table
ceTypeist die stabile Typkennung des Datenbereichs, z. B."ce.hub.Train"oder"ce.hub.Signal".dtoIdist ein eindeutiger Schlüssel innerhalb des CeTypes, z. B. der Zugname oder die Signal-ID.dtoist eine flache serialisierbare Tabelle ohne Funktionen.
Ablauf: Wie kommt ein DTO auf den Bus?
CeHubModule.init()startet Initial-Discovery und Initial-Updates.CeHubModule.run()führt die laufende Discovery und die laufenden Updates aus.- Ein
*Publisherbewertet die Sync-Optionen des CeTypes. - Eine
*DtoFactoryserialisiert Domain-Objekte oder Patches in DTOs. - Der Publisher veröffentlicht Änderungen über
DataChangeBus.fire*().
Die historischen *StatePublisher.lua-Dateien sind auf dem aktiven Pfad nur noch dünne Adapter, die Publisher.syncState(...) mit den zugehörigen Optionen aufrufen.
Optionen und Verantwortlichkeiten
Die Sync- und Fetch-Optionen werden auf drei Ebenen angewendet:
- Feld-Ebene:
collect = falseDerUpdaterliest dieses Feld nicht und dieDtoFactorynimmt es nicht in DTOs auf. - CeType-Ebene:
mode = all | none | selectedDasCeHubModuleund diePublisherentscheiden damit, ob ein CeType vollständig, gar nicht oder nur für selektierte Objekte synchronisiert wird. - Publisher-Ebene:
enabled = true | falseDer jeweiligePublisherkann komplett deaktiviert werden.
Discovery und gekoppelte CeTypes
Nicht jeder CeType scannt die Welt unabhängig. Ein wichtiges Beispiel ist der Zugpfad:
TrainDiscoveryerkennt Tracks, Züge und RollingStock-Existenz gemeinsam.TrainUpdateraktualisiert die bekannten Zugobjekte.RollingStockUpdateraktualisiert die bekannten RollingStock-Objekte.TrackPublisher,TrainPublisherundRollingStockPublisherveröffentlichen anschließend ihre Änderungen getrennt.
Damit bleibt die Discovery-Logik zentral, während Registry, Updater und Publisher weiter je CeType getrennt bleiben.
Vollständige DTO-Strukturen
Alle aktiven CeTypes und ihre DTO-Felder sind in DTO.md dokumentiert.
Informationen für Anwender: README.md