37 lines
1.0 KiB
Python
37 lines
1.0 KiB
Python
from fastapi import FastAPI, WebSocket, WebSocketDisconnect, Request, APIRouter
|
|
from typing import List
|
|
from pydantic import BaseModel
|
|
|
|
router = APIRouter()
|
|
|
|
# 存储 Flask 前端的 WebSocket 连接
|
|
flask_clients: List[WebSocket] = []
|
|
|
|
|
|
@router.websocket("/ws/admin")
|
|
async def admin_websocket_endpoint(websocket: WebSocket):
|
|
await websocket.accept()
|
|
flask_clients.append(websocket)
|
|
try:
|
|
while True:
|
|
# 保持连接开放
|
|
await websocket.receive_text()
|
|
except WebSocketDisconnect:
|
|
flask_clients.remove(websocket)
|
|
|
|
class CallRequest(BaseModel):
|
|
table_name: str
|
|
|
|
@router.post("/call")
|
|
async def receive_call(request: CallRequest):
|
|
table_name = request.table_name
|
|
# 这里简单假设桌号就是桌子名称,实际中可按需转换
|
|
table_number = table_name
|
|
for client in flask_clients:
|
|
try:
|
|
await client.send_text(table_number)
|
|
except Exception as e:
|
|
print(f"Error sending message to client: {e}")
|
|
return {"message": "Call received and forwarded"}
|
|
|