63 lines
2.0 KiB
Markdown
63 lines
2.0 KiB
Markdown
# Architecture
|
|
|
|
## High-Level Overview
|
|
|
|
The application is a Java Swing desktop client that:
|
|
|
|
1. subscribes to MQTT prediction events,
|
|
2. stores accepted events in SQLite,
|
|
3. computes risk ratios,
|
|
4. updates UI state and visualization,
|
|
5. exports animation state for Unreal integration.
|
|
|
|
## Layers
|
|
|
|
- `bootstrap`
|
|
- builds and wires all services in `ApplicationInitializer`
|
|
- handles orderly shutdown in `ApplicationShutdownManager`
|
|
- `service`
|
|
- integration and business logic (MQTT, DB, stats, evaluation, external processes)
|
|
- `model`
|
|
- simple state and value objects (`AppState`, `ProblemLevel`, `DatabaseEntry`, `RatioPoint`)
|
|
- `controller`
|
|
- UI orchestration between state/services and Swing views
|
|
- `ui`
|
|
- window and visual components (tabs, chart, browser, status widgets)
|
|
- `util`
|
|
- shared helpers for config and logging
|
|
|
|
## Runtime Data Flow
|
|
|
|
1. `App.main` initializes look-and-feel and context.
|
|
2. `MqttClientService` connects to `tcp://localhost:1883`.
|
|
3. Subscription on configured topic routes payloads into `BinaryEventService`.
|
|
4. `BinaryEventService` validates JSON and stores `prediction` values.
|
|
5. `EvaluationService` gets ratio from `StatisticsService`.
|
|
6. `AppState` is updated with the new `ProblemLevel`.
|
|
7. Controllers listen to `AppState` and refresh UI (`DashboardView`, status bar).
|
|
8. `AnimationFileService` writes the animation JSON consumed by Unreal side logic.
|
|
|
|
## Main Components
|
|
|
|
- `vassistent.App`
|
|
- process entry point and shutdown hook registration
|
|
- `ApplicationContext`
|
|
- in-memory service container
|
|
- `DataPersistenceService`
|
|
- SQLite schema init and data access
|
|
- `MqttClientService`
|
|
- MQTT connect/subscribe/publish callbacks
|
|
- `StatisticsService`
|
|
- ratio and rolling-average computations
|
|
- `EvaluationService`
|
|
- ratio-to-level mapping
|
|
- `ProcessManagerService`
|
|
- optional startup/shutdown of simulator/Unreal helper processes
|
|
|
|
## UI Structure
|
|
|
|
- Main window: `AppWindow`
|
|
- Tab 1: `PixelStreamingView` (JCEF browser)
|
|
- Tab 2: `DashboardView` (JFreeChart + `ProblemLevelBar`)
|
|
- Footer status bar: MQTT status + current level
|