refactor: 初步完成单一ws重构
This commit is contained in:
163
app/task/MAA.py
163
app/task/MAA.py
@@ -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"
|
||||
|
||||
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user