fix: 修复ws断开时后端无法正常关闭
This commit is contained in:
@@ -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] = []
|
||||
|
||||
@@ -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
34
main.py
@@ -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:
|
||||
|
||||
|
||||
Reference in New Issue
Block a user