How maximebrison/multitrack works
Multitrack routes radio messages and commands between serial-connected plugin devices and a tracking/dispatch core, with a browser dashboard for entity locations, status, and plugin settings. The main flow is radio data through the plugin’s serial bridge and WebSocket connection to the core, then to browser clients; operator commands travel back through plugin HTTP endpoints to the radio. The graph also preserves discovery, plugin UI elements, mapping, and persistence. Several frontend and core relationships are documented or indexed but not sampled in detail, so uncertain links are omitted.
Main entry points: MultitrackAPI.py Plugin API · app.ts Core dispatcher · App.tsx Dashboard app · MultitrackServer.ts WebSocket server
Components 23
Radio plugin
- Plugin API
src/plugin_demo/multitrack/MultitrackAPI.py - Control elements
src/plugin_demo/multitrack/Elements.py - Plugin models
src/plugin_demo/multitrack/models.py - Serial bridge
src/plugin_demo/multitrack/SerialBridge.py - Serial driver
src/plugin_demo/multitrack/SerialDriver.py - UDP discovery
src/plugin_demo/multitrack/UDPListener.py
Core services
- Core dispatcher
src/app/app.ts - WebSocket server
src/app/modules/MultitrackServer.ts - Plugin discovery
src/app/modules/Discoverer.ts - Authentication
src/app/modules/Authenticator.ts - Plugin registry
src/app/modules/Database.ts
Operator dashboard
- Dashboard app
src/app/frontend/src/App.tsx - Controller context
src/app/frontend/src/ctx/AppContext.tsx - UI controllers
src/app/frontend/src/controllers/_ContextController.ts - Socket messaging
src/app/frontend/src/controllers/SocketController.ts - Entity map
src/app/frontend/src/controllers/MapController.ts - Map and sidebar
src/app/frontend/src/parts/Mainframe.tsx - Plugin settings
src/app/frontend/src/parts/SettingsDiscover.tsx
Domain state
- SQLite database
src/app/ctx/database.ts - Entity state
src/app/app.ts - Core data access
src/app/modules/Database.ts
Other components
- Radio device
- Operator
Connections 27
- Plugin API → Serial bridge: creates
src/plugin_demo/multitrack/MultitrackAPI.py - Plugin API → Serial driver: configures
src/plugin_demo/multitrack/MultitrackAPI.py - Plugin API → Control elements: registers routes
src/plugin_demo/multitrack/MultitrackAPI.py - Plugin API → UDP discovery: starts
src/plugin_demo/multitrack/MultitrackAPI.py - Control elements → Plugin models: builds endpoints
src/plugin_demo/multitrack/models.py - Serial bridge → Serial driver: delegates parsing
src/plugin_demo/multitrack/SerialBridge.py - Radio device → Serial driver: sends serial data
- Serial bridge → Plugin API: queues data
src/plugin_demo/multitrack/MultitrackAPI.py - Plugin API → WebSocket server: streams plugin data
- Core dispatcher → Plugin discovery: dispatches discovery
src/app/app.ts - Core dispatcher → WebSocket server: dispatches callbacks
src/app/app.ts - Core dispatcher → Entity state: updates entities
src/app/app.ts - Core dispatcher → Plugin registry: loads plugins
src/app/app.ts - WebSocket server → Authentication: authenticates clients
src/app/modules/MultitrackServer.ts - Plugin registry → SQLite database: accesses database
- Core data access → SQLite database: opens database
src/app/modules/Database.ts - Operator → Dashboard app: uses dashboard
- Dashboard app → Controller context: consumes context
src/app/frontend/src/App.tsx - Controller context → UI controllers: creates controllers
src/app/frontend/src/ctx/AppContext.tsx - UI controllers → Socket messaging: owns socket
src/app/frontend/src/controllers/_ContextController.ts - UI controllers → Entity map: owns map
src/app/frontend/src/controllers/_ContextController.ts - Dashboard app → Map and sidebar: renders
src/app/frontend/src/App.tsx - Dashboard app → Plugin settings: renders
src/app/frontend/src/App.tsx - Map and sidebar → Entity map: displays map
- Socket messaging → WebSocket server: exchanges envelopes
- Core dispatcher → Socket messaging: broadcasts entity updates
- Plugin API → Core dispatcher: sends plugin data