fix: 修复ws断开时后端无法正常关闭

This commit is contained in:
DLmaster361
2025-08-27 18:35:50 +08:00
parent af402330b2
commit bce9777eae
3 changed files with 38 additions and 6 deletions

View File

@@ -23,6 +23,7 @@
import re
import shutil
import asyncio
import uvicorn
import sqlite3
import calendar
import requests
@@ -584,6 +585,7 @@ class AppConfig(GlobalConfig):
self.config_path.mkdir(parents=True, exist_ok=True)
self.history_path.mkdir(parents=True, exist_ok=True)
self.server: Optional[uvicorn.Server] = None
self.websocket: Optional[WebSocket] = None
self.silence_dict: Dict[Path, datetime] = {}
self.if_ignore_silence: List[uuid.UUID] = []

View File

@@ -221,10 +221,10 @@ class _SystemHandler:
["rundll32.exe", "powrprof.dll,SetSuspendState", "0,1,0"]
)
elif mode == "KillSelf":
elif mode == "KillSelf" and Config.server is not None:
logger.info("执行退出主程序操作")
sys.exit(0)
Config.server.should_exit = True
elif sys.platform.startswith("linux"):
@@ -247,10 +247,10 @@ class _SystemHandler:
logger.info("执行睡眠操作")
subprocess.run(["systemctl", "suspend"])
elif mode == "KillSelf":
elif mode == "KillSelf" and Config.server is not None:
logger.info("执行退出主程序操作")
sys.exit(0)
Config.server.should_exit = True
async def kill_emulator_processes(self):
"""这里暂时仅支持 MuMu 模拟器"""

34
main.py
View File

@@ -23,6 +23,7 @@
import os
import sys
import ctypes
import logging
from pathlib import Path
current_dir = Path(__file__).resolve().parent
@@ -34,6 +35,24 @@ from app.utils import get_logger
logger = get_logger("主程序")
class InterceptHandler(logging.Handler):
def emit(self, record):
# 获取对应 loguru 的 level
try:
level = logger.level(record.levelname).name
except ValueError:
level = record.levelno
# 转发日志
logger.opt(depth=6, exception=record.exc_info).log(level, record.getMessage())
# 拦截标准 logging
logging.basicConfig(handlers=[InterceptHandler()], level=0, force=True)
for name in ("uvicorn", "uvicorn.error", "uvicorn.access", "fastapi"):
logging.getLogger(name).handlers = [InterceptHandler()]
logging.getLogger(name).propagate = False
def is_admin() -> bool:
"""检查当前程序是否以管理员身份运行"""
try:
@@ -75,7 +94,6 @@ def main():
logger.info("主业务定时器已关闭")
logger.info("AUTO_MAA 后端程序关闭")
logger.info("----------------END----------------")
from fastapi.middleware.cors import CORSMiddleware
from app.api import (
@@ -113,7 +131,19 @@ def main():
app.include_router(history_router)
app.include_router(setting_router)
uvicorn.run(app, host="0.0.0.0", port=36163)
async def run_server():
config = uvicorn.Config(
app, host="0.0.0.0", port=36163, log_level="info", log_config=None
)
server = uvicorn.Server(config)
from app.core import Config
Config.server = server
await server.serve()
asyncio.run(run_server())
else: