Initial commit - Phase 3/4
🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
35
app/backend/websocket/routes.py
Normal file
35
app/backend/websocket/routes.py
Normal file
@@ -0,0 +1,35 @@
|
||||
"""WebSocket endpoint routes."""
|
||||
from fastapi import APIRouter, WebSocket, WebSocketDisconnect
|
||||
from .manager import ws_manager
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
|
||||
@router.websocket("/events")
|
||||
async def websocket_endpoint(websocket: WebSocket):
|
||||
"""WebSocket endpoint for real-time event streaming.
|
||||
|
||||
Events include:
|
||||
- connected: Initial connection confirmation
|
||||
- system_stats: CPU, memory, temperature updates (every 5s)
|
||||
- pm3_devices: Device list on connect/disconnect
|
||||
- pm3_status: PM3 connection status changes
|
||||
- ups_battery: Battery level updates
|
||||
- ups_warning: Low battery warning
|
||||
- ups_critical: Critical battery level
|
||||
- ups_shutdown: Shutdown initiated
|
||||
- ups_config_required: UPS needs configuration
|
||||
- update_available: New version available
|
||||
- update_downloading: Download progress
|
||||
"""
|
||||
await ws_manager.connect(websocket)
|
||||
try:
|
||||
while True:
|
||||
# Keep connection alive by waiting for messages or disconnect
|
||||
# Client doesn't send data, but we need to detect disconnection
|
||||
try:
|
||||
await websocket.receive_text()
|
||||
except WebSocketDisconnect:
|
||||
break
|
||||
finally:
|
||||
await ws_manager.disconnect(websocket)
|
||||
Reference in New Issue
Block a user