feat: MAA调度初步上线

This commit is contained in:
DLmaster361
2025-08-09 22:17:19 +08:00
parent 135555e3ea
commit 409a7a2d03
9 changed files with 326 additions and 280 deletions

View File

@@ -27,6 +27,7 @@ from .info import router as info_router
from .scripts import router as scripts_router
from .plan import router as plan_router
from .queue import router as queue_router
from .dispatch import router as dispatch_router
from .setting import router as setting_router
__all__ = [
@@ -34,5 +35,6 @@ __all__ = [
"scripts_router",
"plan_router",
"queue_router",
"dispatch_router",
"setting_router",
]

View File

@@ -21,7 +21,8 @@
import uuid
from fastapi import APIRouter, WebSocket, Body, Path
import asyncio
from fastapi import APIRouter, WebSocket, WebSocketDisconnect, Body, Path
from app.core import Config, TaskManager
from app.models.schema import *
@@ -55,14 +56,26 @@ async def stop_task(task: DispatchIn = Body(...)) -> OutBase:
async def websocket_endpoint(
websocket: WebSocket, taskId: str = Path(..., description="要连接的任务ID")
):
await websocket.accept()
try:
uid = uuid.UUID(taskId)
except ValueError:
await websocket.close(code=1008, reason="无效的任务ID")
return
if uid in TaskManager.connection_events:
if uid in TaskManager.connection_events and uid not in TaskManager.websocket_dict:
TaskManager.websocket_dict[uid] = websocket
TaskManager.connection_events[uid].set()
while True:
try:
data = await asyncio.wait_for(websocket.receive_json(), timeout=30.0)
await Config.message_queue.put({"task_id": uid, "message": data})
except asyncio.TimeoutError:
await websocket.send_json(
TaskMessage(type="Signal", data={"Ping": "无描述"}).model_dump()
)
except WebSocketDisconnect:
TaskManager.websocket_dict.pop(uid, None)
break
else:
await websocket.close(code=1008, reason="任务不存在或已结束")