refactor: 初步完成单一ws重构

This commit is contained in:
DLmaster361
2025-08-27 17:50:56 +08:00
parent 4c2a6407a1
commit fbcc149849
10 changed files with 454 additions and 342 deletions

View File

@@ -26,13 +26,12 @@ import subprocess
import shutil
import win32com.client
from pathlib import Path
from fastapi import WebSocket
from datetime import datetime, timedelta
from jinja2 import Environment, FileSystemLoader
from typing import List, Dict, Optional
from app.core import Broadcast, Config, MaaConfig, MaaUserConfig
from app.models.schema import TaskMessage
from app.models.schema import WebSocketMessage
from app.models.ConfigBase import MultipleConfig
from app.services import Notify, System
from app.utils import get_logger, LogMonitor, ProcessManager
@@ -50,18 +49,14 @@ class MaaManager:
"""MAA控制器"""
def __init__(
self,
mode: str,
script_id: uuid.UUID,
user_id: Optional[uuid.UUID],
websocket: WebSocket,
self, mode: str, script_id: uuid.UUID, user_id: Optional[uuid.UUID], ws_id: str
):
super().__init__()
self.mode = mode
self.script_id = script_id
self.user_id = user_id
self.websocket = websocket
self.ws_id = ws_id
self.emulator_process_manager = ProcessManager()
self.maa_process_manager = ProcessManager()
@@ -123,8 +118,10 @@ class MaaManager:
self.check_result = self.check_config()
if self.check_result != "Success!":
logger.error(f"未通过配置检查:{self.check_result}")
await self.websocket.send_json(
TaskMessage(type="Info", data={"Error": self.check_result}).model_dump()
await Config.send_json(
WebSocketMessage(
taskId=self.ws_id, type="Info", data={"Error": self.check_result}
).model_dump()
)
return
@@ -188,16 +185,20 @@ class MaaManager:
< self.script_config.get("Run", "ProxyTimesLimit")
):
user["status"] = "运行"
await self.websocket.send_json(
TaskMessage(
type="Update", data={"user_list": self.user_list}
await Config.send_json(
WebSocketMessage(
taskId=self.ws_id,
type="Update",
data={"user_list": self.user_list},
).model_dump()
)
else:
user["status"] = "跳过"
await self.websocket.send_json(
TaskMessage(
type="Update", data={"user_list": self.user_list}
await Config.send_json(
WebSocketMessage(
taskId=self.ws_id,
type="Update",
data={"user_list": self.user_list},
).model_dump()
)
continue
@@ -228,8 +229,9 @@ class MaaManager:
"Data", "LastSklandDate"
) != datetime.now().strftime("%Y-%m-%d"):
await self.websocket.send_json(
TaskMessage(
await Config.send_json(
WebSocketMessage(
taskId=self.ws_id,
type="Update",
data={"log": "正在执行森空岛签到中\n请稍候~"},
).model_dump()
@@ -246,8 +248,9 @@ class MaaManager:
logger.info(
f"用户: {user['user_id']} - 森空岛签到{type}: {''.join(user_list)}",
)
await self.websocket.send_json(
TaskMessage(
await Config.send_json(
WebSocketMessage(
taskId=self.ws_id,
type="Info",
data={
(
@@ -258,8 +261,9 @@ class MaaManager:
)
if skland_result["总计"] == 0:
logger.info(f"用户: {user['user_id']} - 森空岛签到失败")
await self.websocket.send_json(
TaskMessage(
await Config.send_json(
WebSocketMessage(
taskId=self.ws_id,
type="Info",
data={
"Error": f"用户 {user['name']} 森空岛签到失败",
@@ -281,8 +285,9 @@ class MaaManager:
logger.warning(
f"用户: {user['user_id']} - 未配置森空岛签到Token跳过森空岛签到"
)
await self.websocket.send_json(
TaskMessage(
await Config.send_json(
WebSocketMessage(
taskId=self.ws_id,
type="Info",
data={
"Warning": f"用户 {user['name']} 未配置森空岛签到Token跳过森空岛签到"
@@ -324,8 +329,9 @@ class MaaManager:
logger.error(
f"用户: {user['user_id']} - 未找到日常详细配置文件"
)
await self.websocket.send_json(
TaskMessage(
await Config.send_json(
WebSocketMessage(
taskId=self.ws_id,
type="Info",
data={"Error": f"未找到 {user['name']} 的详细配置文件"},
).model_dump()
@@ -334,8 +340,9 @@ class MaaManager:
break
# 更新当前模式到界面
await self.websocket.send_json(
TaskMessage(
await Config.send_json(
WebSocketMessage(
taskId=self.ws_id,
type="Update",
data={
"user_status": {
@@ -417,8 +424,9 @@ class MaaManager:
self.emulator_arguments = shortcut.Arguments.split()
except Exception as e:
logger.exception(f"解析快捷方式时出现异常:{e}")
await self.websocket.send_json(
TaskMessage(
await Config.send_json(
WebSocketMessage(
taskId=self.ws_id,
type="Info",
data={
"Error": f"解析快捷方式时出现异常:{e}",
@@ -429,8 +437,9 @@ class MaaManager:
break
elif not self.emulator_path.exists():
logger.error(f"模拟器快捷方式不存在:{self.emulator_path}")
await self.websocket.send_json(
TaskMessage(
await Config.send_json(
WebSocketMessage(
taskId=self.ws_id,
type="Info",
data={
"Error": f"模拟器快捷方式 {self.emulator_path} 不存在",
@@ -480,8 +489,9 @@ class MaaManager:
logger.warning(f"释放ADB时出现异常{e}")
except Exception as e:
logger.exception(f"释放ADB时出现异常{e}")
await self.websocket.send_json(
TaskMessage(
await Config.send_json(
WebSocketMessage(
taskId=self.ws_id,
type="Info",
data={"Warning": f"释放ADB时出现异常{e}"},
).model_dump()
@@ -497,8 +507,9 @@ class MaaManager:
)
except Exception as e:
logger.exception(f"启动模拟器时出现异常:{e}")
await self.websocket.send_json(
TaskMessage(
await Config.send_json(
WebSocketMessage(
taskId=self.ws_id,
type="Info",
data={
"Error": "启动模拟器时出现异常请检查MAA中模拟器路径设置"
@@ -544,8 +555,9 @@ class MaaManager:
logger.info(
f"用户: {user['user_id']} - MAA进程完成代理任务"
)
await self.websocket.send_json(
TaskMessage(
await Config.send_json(
WebSocketMessage(
taskId=self.ws_id,
type="Update",
data={
"log": "检测到MAA进程完成代理任务\n正在等待相关程序结束\n请等待10s"
@@ -559,8 +571,9 @@ class MaaManager:
)
# 打印中止信息
# 此时log变量内存储的就是出现异常的日志信息可以保存或发送用于问题排查
await self.websocket.send_json(
TaskMessage(
await Config.send_json(
WebSocketMessage(
taskId=self.ws_id,
type="Update",
data={
"log": f"{self.maa_result}\n正在中止相关程序\n请等待10s"
@@ -602,8 +615,9 @@ class MaaManager:
logger.warning(f"释放ADB时出现异常{e}")
except Exception as e:
logger.exception(f"释放ADB时出现异常{e}")
await self.websocket.send_json(
TaskMessage(
await Config.send_json(
WebSocketMessage(
taskId=self.ws_id,
type="Info",
data={"Error": f"释放ADB时出现异常{e}"},
).model_dump()
@@ -674,8 +688,9 @@ class MaaManager:
logger.info(f"检测到MAA更新正在执行更新动作")
await self.websocket.send_json(
TaskMessage(
await Config.send_json(
WebSocketMessage(
taskId=self.ws_id,
type="Update",
data={
"log": "检测到MAA存在更新\nMAA正在执行更新动作\n请等待10s"
@@ -714,9 +729,11 @@ class MaaManager:
logger.info(f"开始排查用户: {user['user_id']}")
user["status"] = "运行"
await self.websocket.send_json(
TaskMessage(
type="Update", data={"user_list": self.user_list}
await Config.send_json(
WebSocketMessage(
taskId=self.ws_id,
type="Update",
data={"user_list": self.user_list},
).model_dump()
)
@@ -759,8 +776,9 @@ class MaaManager:
f"用户: {user['user_id']} - MAA进程成功登录PRTS",
)
self.run_book["SignIn"] = True
await self.websocket.send_json(
TaskMessage(
await Config.send_json(
WebSocketMessage(
taskId=self.ws_id,
type="Update",
data={"log": "检测到MAA进程成功登录PRTS"},
).model_dump()
@@ -769,8 +787,9 @@ class MaaManager:
logger.error(
f"用户: {user['user_id']} - MAA未能正确登录到PRTS: {self.maa_result}"
)
await self.websocket.send_json(
TaskMessage(
await Config.send_json(
WebSocketMessage(
taskId=self.ws_id,
type="Update",
data={
"log": f"{self.maa_result}\n正在中止相关程序\n请等待10s"
@@ -791,8 +810,9 @@ class MaaManager:
else:
uid = str(uuid.uuid4())
await self.websocket.send_json(
TaskMessage(
await Config.send_json(
WebSocketMessage(
taskId=self.ws_id,
type="Message",
data={
"message_id": uid,
@@ -810,8 +830,9 @@ class MaaManager:
if self.run_book["SignIn"]:
uid = str(uuid.uuid4())
await self.websocket.send_json(
TaskMessage(
await Config.send_json(
WebSocketMessage(
taskId=self.ws_id,
type="Message",
data={
"message_id": uid,
@@ -827,9 +848,11 @@ class MaaManager:
await self.result_record()
await self.websocket.send_json(
TaskMessage(
type="Update", data={"user_list": self.user_list}
await Config.send_json(
WebSocketMessage(
taskId=self.ws_id,
type="Update",
data={"user_list": self.user_list},
).model_dump()
)
@@ -906,9 +929,9 @@ class MaaManager:
)
self.user_list[self.index]["status"] = "异常"
await self.websocket.send_json(
TaskMessage(
type="Update", data={"user_list": self.user_list}
await Config.send_json(
WebSocketMessage(
taskId=self.ws_id, type="Update", data={"user_list": self.user_list}
).model_dump()
)
@@ -1085,8 +1108,9 @@ class MaaManager:
async def search_ADB_address(self) -> None:
"""搜索ADB实际地址"""
await self.websocket.send_json(
TaskMessage(
await Config.send_json(
WebSocketMessage(
taskId=self.ws_id,
type="Update",
data={
"log": f"即将搜索ADB实际地址\n正在等待模拟器完成启动\n请等待{self.wait_time}s"
@@ -1175,8 +1199,10 @@ class MaaManager:
# 更新MAA日志
if await self.maa_process_manager.is_running():
await self.websocket.send_json(
TaskMessage(type="Update", data={"log": log}).model_dump()
await Config.send_json(
WebSocketMessage(
taskId=self.ws_id, type="Update", data={"log": log}
).model_dump()
)
if self.mode == "自动代理":
@@ -1600,13 +1626,14 @@ class MaaManager:
logger.warning(
f"未选择用户 {self.cur_user_data.get('Info', 'Name')} 的自定义基建配置文件"
)
await self.websocket.send_json(
TaskMessage(
await Config.send_json(
WebSocketMessage(
taskId=self.ws_id,
type="Info",
data={
"warning": f"未选择用户 {self.cur_user_data.get('Info', 'Name')} 的自定义基建配置文件"
},
)
).model_dump()
)
data["Configurations"]["Default"][
"Infrast.CustomInfrastEnabled"

View File

@@ -33,7 +33,7 @@ from typing import Union, List, Dict, Optional
from app.core import Config, GeneralConfig, GeneralUserConfig
from app.models.schema import TaskMessage
from app.models.schema import WebSocketMessage
from app.models.ConfigBase import MultipleConfig
from app.services import Notify, System
from app.utils import get_logger, LogMonitor, ProcessManager, strptime
@@ -46,18 +46,14 @@ class GeneralManager:
"""通用脚本通用控制器"""
def __init__(
self,
mode: str,
script_id: uuid.UUID,
user_id: Optional[uuid.UUID],
websocket: WebSocket,
self, mode: str, script_id: uuid.UUID, user_id: Optional[uuid.UUID], ws_id: str
):
super(GeneralManager, self).__init__()
self.mode = mode
self.script_id = script_id
self.user_id = user_id
self.websocket = websocket
self.ws_id = ws_id
self.game_process_manager = ProcessManager()
self.general_process_manager = ProcessManager()
@@ -164,8 +160,10 @@ class GeneralManager:
self.check_result = self.check_config()
if self.check_result != "Success!":
logger.error(f"未通过配置检查:{self.check_result}")
await self.websocket.send_json(
TaskMessage(type="Info", data={"Error": self.check_result}).model_dump()
await Config.send_json(
WebSocketMessage(
taskId=self.ws_id, type="Info", data={"Error": self.check_result}
).model_dump()
)
return
@@ -229,16 +227,20 @@ class GeneralManager:
< self.script_config.get("Run", "ProxyTimesLimit")
):
user["status"] = "运行"
await self.websocket.send_json(
TaskMessage(
type="Update", data={"user_list": self.user_list}
await Config.send_json(
WebSocketMessage(
taskId=self.ws_id,
type="Update",
data={"user_list": self.user_list},
).model_dump()
)
else:
user["status"] = "跳过"
await self.websocket.send_json(
TaskMessage(
type="Update", data={"user_list": self.user_list}
await Config.send_json(
WebSocketMessage(
taskId=self.ws_id,
type="Update",
data={"user_list": self.user_list},
).model_dump()
)
continue
@@ -254,8 +256,9 @@ class GeneralManager:
).exists():
logger.error(f"用户: {user['user_id']} - 未找到配置文件")
await self.websocket.send_json(
TaskMessage(
await Config.send_json(
WebSocketMessage(
taskId=self.ws_id,
type="Info",
data={"Error": f"未找到 {user['user_id']} 的配置文件"},
).model_dump()
@@ -306,8 +309,9 @@ class GeneralManager:
)
except Exception as e:
logger.exception(f"启动游戏/模拟器时出现异常:{e}")
await self.websocket.send_json(
TaskMessage(
await Config.send_json(
WebSocketMessage(
taskId=self.ws_id,
type="Info",
data={"Error": f"启动游戏/模拟器时出现异常:{e}"},
).model_dump()
@@ -326,8 +330,9 @@ class GeneralManager:
seconds=self.script_config.get("Game", "WaitTime") + 10
)
await self.websocket.send_json(
TaskMessage(
await Config.send_json(
WebSocketMessage(
taskId=self.ws_id,
type="Update",
data={
"log": f"正在等待游戏/模拟器完成启动\n请等待{self.script_config.get('Game', 'WaitTime')}s"
@@ -368,8 +373,9 @@ class GeneralManager:
logger.info(
f"用户: {user['user_id']} - 通用脚本进程完成代理任务"
)
await self.websocket.send_json(
TaskMessage(
await Config.send_json(
WebSocketMessage(
taskId=self.ws_id,
type="Update",
data={
"log": "检测到通用脚本进程完成代理任务\n正在等待相关程序结束\n请等待10s"
@@ -425,8 +431,9 @@ class GeneralManager:
)
# 打印中止信息
# 此时log变量内存储的就是出现异常的日志信息可以保存或发送用于问题排查
await self.websocket.send_json(
TaskMessage(
await Config.send_json(
WebSocketMessage(
taskId=self.ws_id,
type="Update",
data={
"log": f"{self.general_result}\n正在中止相关程序\n请等待10s"
@@ -768,8 +775,10 @@ class GeneralManager:
# 更新日志
if await self.general_process_manager.is_running():
await self.websocket.send_json(
TaskMessage(type="Update", data={"log": log}).model_dump()
await Config.send_json(
WebSocketMessage(
taskId=self.ws_id, type="Update", data={"log": log}
).model_dump()
)
if "自动代理" in self.mode: