Rework radar system
This commit is contained in:
@@ -99,6 +99,13 @@ async def post_remove_last(request: Request) -> dict:
|
||||
return controller.status()
|
||||
|
||||
|
||||
@router.post("/api/clear_history")
|
||||
async def post_clear_history(request: Request) -> dict:
|
||||
controller = _controller(request)
|
||||
await _run_action(controller.clear_history)
|
||||
return controller.status()
|
||||
|
||||
|
||||
@router.get("/api/configs")
|
||||
async def get_configs(request: Request) -> dict:
|
||||
return {"names": _controller(request).list_configs()}
|
||||
@@ -157,18 +164,14 @@ async def ws(websocket: WebSocket) -> None:
|
||||
"""Stream frames and status to one client until it disconnects."""
|
||||
await websocket.accept()
|
||||
broadcaster: RingBroadcaster = websocket.app.state.broadcaster
|
||||
queue: asyncio.Queue[dict] = asyncio.Queue(maxsize=1)
|
||||
broadcaster.register(queue)
|
||||
client = broadcaster.register()
|
||||
logger.info("Web UI client connected")
|
||||
try:
|
||||
frame = await asyncio.to_thread(websocket.app.state.controller.peek_frame)
|
||||
if frame is not None:
|
||||
await websocket.send_json(frame)
|
||||
while True:
|
||||
await websocket.send_json(await queue.get())
|
||||
await websocket.send_json(await client.get())
|
||||
except WebSocketDisconnect:
|
||||
logger.info("Web UI client disconnected")
|
||||
finally:
|
||||
broadcaster.unregister(queue)
|
||||
broadcaster.unregister(client)
|
||||
with contextlib.suppress(Exception):
|
||||
await websocket.close()
|
||||
|
||||
Reference in New Issue
Block a user