feat(03-03): integrate UDPSender into FastAPI lifespan
- Import UDPSender in main.py - Start UDPSender on app boot, assign to app.state.udp_sender - Stop UDPSender cleanly on shutdown (before registry.save) - All existing lifespan behavior unchanged (beats, registry, show_store)
This commit is contained in:
@@ -7,6 +7,7 @@ from fastapi.staticfiles import StaticFiles
|
|||||||
|
|
||||||
from lightsync.devices.registry import DeviceRegistry
|
from lightsync.devices.registry import DeviceRegistry
|
||||||
from lightsync.store.show_store import ShowStore
|
from lightsync.store.show_store import ShowStore
|
||||||
|
from lightsync.protocol.udp_sender import UDPSender
|
||||||
|
|
||||||
# Module-level containers populated in lifespan
|
# Module-level containers populated in lifespan
|
||||||
registry: DeviceRegistry | None = None
|
registry: DeviceRegistry | None = None
|
||||||
@@ -25,9 +26,15 @@ async def lifespan(app: FastAPI):
|
|||||||
# Beat analysis cache: filepath -> {"tempo": float, "beats": [float, ...]}
|
# Beat analysis cache: filepath -> {"tempo": float, "beats": [float, ...]}
|
||||||
app.state.beats = {}
|
app.state.beats = {}
|
||||||
|
|
||||||
|
# UDP sender for device communication (Phase 3)
|
||||||
|
udp_sender = UDPSender()
|
||||||
|
await udp_sender.start()
|
||||||
|
app.state.udp_sender = udp_sender
|
||||||
|
|
||||||
yield
|
yield
|
||||||
|
|
||||||
# Shutdown
|
# Shutdown
|
||||||
|
await app.state.udp_sender.stop()
|
||||||
await registry.save()
|
await registry.save()
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user