from app.auth.service import AuthService from app.backup.service import BackupService from app.bpm.service import BpmService from app.core.config import get_settings from app.dmx.backends import OlaDmxBackend, SimulatorDmxBackend from app.dmx.engine import DmxEngine from app.dmx.output_service import DmxOutputService from app.effects.service import EffectService from app.fixtures.service import FixtureService from app.homeassistant.service import HomeAssistantService from app.live.service import LiveDeskService from app.midi.service import MidiService from app.mixitup.service import TriggerService from app.patch.service import PatchService from app.scenes.service import SceneService from app.system.service import SystemControlService from app.telemetry.service import TelemetryService class ApplicationState: def __init__(self) -> None: settings = get_settings() self.telemetry = TelemetryService() backend = ( SimulatorDmxBackend(universe=settings.ola_universe) if settings.simulator_enabled else OlaDmxBackend( universe=settings.ola_universe, output_port=settings.ola_output_port, send_timeout_s=settings.ola_send_timeout_ms / 1000, ) ) self.engine = DmxEngine(self.telemetry, backend=backend) self.auth = AuthService() self.fixtures = FixtureService() self.patch = PatchService() self.scenes = SceneService(self.engine) self.bpm = BpmService() self.effects = EffectService(self.engine, self.bpm) self.dmx = DmxOutputService(self.engine) self.home_assistant = HomeAssistantService(self.engine) self.live = LiveDeskService(self.engine, home_assistant=self.home_assistant) self.triggers = TriggerService(self.engine, self.effects, self.scenes) self.midi = MidiService(self.engine, self.scenes, self.effects) self.backups = BackupService(settings.data_dir, settings.backup_dir) self.system = SystemControlService() async def startup(self) -> None: await self.dmx.startup() await self.home_assistant.startup() await self.midi.startup() await self.bpm.startup() await self.engine.start() async def shutdown(self) -> None: await self.effects.shutdown() await self.home_assistant.shutdown() await self.bpm.shutdown() await self.engine.stop() app_state = ApplicationState()