Files
2026-02-04 13:58:18 +08:00

72 lines
2.1 KiB
Python

from fastapi import APIRouter, Query
from starlette.websockets import WebSocket, WebSocketDisconnect
from config.security import get_user_id_from_token_from_ws
from db.postgres import get_dept_id_by_user_id
from db.postgres.ws_manager import ConnectionManager
ws_manager = ConnectionManager()
iot_ws_router = APIRouter()
# EMQX 通知在线与否
@iot_ws_router.websocket("/device-status")
async def websocket_device_status(
websocket: WebSocket,
token: str = Query(...),
):
user_id = get_user_id_from_token_from_ws(token)
dept_id = get_dept_id_by_user_id(user_id) # 查数据库或缓存
await ws_manager.connect(websocket, user_id, dept_id, 0)
print("[WS] client connected")
try:
while True:
# 这里不需要接收任何消息
await websocket.receive_text()
except WebSocketDisconnect:
await ws_manager.disconnect(websocket)
print("[WS] client disconnected")
# Vue 牧安云哨
@iot_ws_router.websocket("/sentinel_record")
async def websocket_sentinel_record(
websocket: WebSocket,
token: str = Query(...),
):
user_id = get_user_id_from_token_from_ws(token)
dept_id = get_dept_id_by_user_id(user_id) # 查数据库或缓存
print("user_id:", user_id)
print("dept_id:", dept_id)
print("已接入")
await ws_manager.connect(websocket, user_id, dept_id, 1)
try:
while True:
await websocket.receive_text()
except WebSocketDisconnect:
await ws_manager.disconnect(websocket)
# Vue 牧安云哨 监控大屏 消息通知
@iot_ws_router.websocket("/sentinel_record_notice")
async def websocket_sentinel_record(
websocket: WebSocket,
token: str = Query(...),
):
user_id = get_user_id_from_token_from_ws(token)
dept_id = get_dept_id_by_user_id(user_id) # 查数据库或缓存
print("user_id:", user_id)
print("dept_id:", dept_id)
print("已接入")
await ws_manager.connect(websocket, user_id, dept_id, 2)
try:
while True:
await websocket.receive_text()
except WebSocketDisconnect:
await ws_manager.disconnect(websocket)