import threading import time from model.global_manager import GM from model.helper import MyHelper from net.task_api import task_api from tools.log import logger class Task: _lock = threading.Lock() def __init__(self, helper: MyHelper): self.helper = helper self.error_count = 0 def run(self): try: logger.info(f"[窗口-{self.helper.window_id}][模拟器-{self.helper.emulator_index}]任务开始",self.helper.window_id) for _ in range(1): logger.info(f"[窗口-{self.helper.window_id}][模拟器-{self.helper.emulator_index}]模拟器还原",self.helper.window_id) # 模拟器还原、改机、切换地区、启动加锁,主要避免还原和启动时的高硬盘读写以及切换Ip地区时刷新节点的频率 with self._lock: result, message = self.helper.restore_emulator() if not result: logger.exception(f"[窗口-{self.helper.window_id}][模拟器-{self.helper.emulator_index}]模拟器还原失败,错误信息:{message}") break logger.info(f"[窗口-{self.helper.window_id}][模拟器-{self.helper.emulator_index}]模拟器还原成功",self.helper.window_id) time.sleep(1) #改机 logger.info(f"[窗口-{self.helper.window_id}][模拟器-{self.helper.emulator_index}]模拟器改机",self.helper.window_id) result, message = self.helper.modify_emulator() if not result: logger.exception(f"[窗口-{self.helper.window_id}][模拟器-{self.helper.emulator_index}]模拟器改机失败,错误信息:{message}") break logger.info(f"[窗口-{self.helper.window_id}][模拟器-{self.helper.emulator_index}]模拟器改机成功",self.helper.window_id) time.sleep(1) #切换地区 if GM.device_info.use_wuyouip == '1': logger.info(f"[窗口-{self.helper.window_id}][模拟器-{self.helper.emulator_index}]模拟器切换地区",self.helper.window_id) result, message = self.helper.switch_emulator_area() if not result: logger.error(f"[窗口-{self.helper.window_id}][模拟器-{self.helper.emulator_index}]切换模拟器地区失败,错误信息:{message}") break logger.info(f"[窗口-{self.helper.window_id}][模拟器-{self.helper.emulator_index}]模拟器地区切换成功",self.helper.window_id) time.sleep(1) #启动 logger.info(f"[窗口-{self.helper.window_id}][模拟器-{self.helper.emulator_index}]模拟器启动",self.helper.window_id) with self._lock: result, message = self.helper.start_emulator_and_set_position() if not result: logger.error(f"[窗口-{self.helper.window_id}][模拟器-{self.helper.emulator_index}]模拟器启动失败,错误信息:{message}") up_log_profession = task_api.up_log_profession(self.helper.account_info.account, self.helper.game_config.task_id, '启动模拟器', '失败') logger.info(f"[窗口-{self.helper.window_id}][模拟器-{self.helper.emulator_index}]上报关键日志-{up_log_profession}",self.helper.window_id) self.helper.upload_device_log(status=0) break logger.info(f"[窗口-{self.helper.window_id}][模拟器-{self.helper.emulator_index}]模拟器启动成功",self.helper.window_id) up_log_profession = task_api.up_log_profession(self.helper.account_info.account, self.helper.game_config.task_id,'启动模拟器', '成功') logger.info(f"[窗口-{self.helper.window_id}][模拟器-{self.helper.emulator_index}]上报关键日志-{up_log_profession}",self.helper.window_id) self.helper.upload_device_log(status=1) time.sleep(1) #上报设备信息 logger.info(f"[窗口-{self.helper.window_id}][模拟器-{self.helper.emulator_index}]上报设备信息:{self.helper.upload_log.upload_log.to_dict()}",self.helper.window_id) # time.sleep(10) # # result, message = self.helper.confirm_emulator_area() # if not result: # logger.error(f"[窗口-{self.helper.window_id}][模拟器-{self.helper.emulator_index}]确认模拟器地区错误,错误信息:{message}") # break time.sleep(1) #大漠绑定 logger.info(f"[窗口-{self.helper.window_id}][模拟器-{self.helper.emulator_index}]执行脚本-大漠绑定",self.helper.window_id) result, message = self.helper.bind_emulator() if not result or message != 1: logger.exception(f'[窗口-{self.helper.window_id}][模拟器-{self.helper.emulator_index}]执行脚本"大漠绑定"失败,返回:{message}') break logger.info(f'[窗口-{self.helper.window_id}][模拟器-{self.helper.emulator_index}]执行脚本-大漠绑定-成功,返回:{message}',self.helper.window_id) time.sleep(1) #启动游戏 logger.info(f'[窗口-{self.helper.window_id}][模拟器-{self.helper.emulator_index}]执行脚本-启动游戏',self.helper.window_id) result, message = self.helper.start_game() if not result or message != 1: self.helper.upload_log.upload_start_game_log(status=0) logger.exception(f'[窗口-{self.helper.window_id}][模拟器-{self.helper.emulator_index}]执行脚本-启动游戏-失败,错误信息:{message}') break self.helper.upload_log.upload_start_game_log(status=1) logger.info(f'[窗口-{self.helper.window_id}][模拟器-{self.helper.emulator_index}]执行脚本-启动游戏-成功,返回:{message}',self.helper.window_id) time.sleep(1) #登录游戏 logger.info(f'[窗口-{self.helper.window_id}][模拟器-{self.helper.emulator_index}]执行脚本-登录游戏',self.helper.window_id) result, message = self.helper.login_game() if not result or message != 1: logger.exception(f'[窗口-{self.helper.window_id}][模拟器-{self.helper.emulator_index}]执行脚本-登录游戏-失败,错误信息:{message}') self.helper.upload_log.upload_longin_log(status=0) break logger.info(f'[窗口-{self.helper.window_id}][模拟器-{self.helper.emulator_index}]执行脚本-登录游戏-成功,返回:{message}',self.helper.window_id) self.helper.upload_log.upload_longin_log(status=1) time.sleep(1) #执行主线任务 logger.info(f'[窗口-{self.helper.window_id}][模拟器-{self.helper.emulator_index}]执行脚本-教程主线',self.helper.window_id) result, message = self.helper.main_task() if not result: self.helper.upload_log.upload_main_log(status=0) logger.exception(f'[窗口-{self.helper.window_id}][模拟器-{self.helper.emulator_index}]执行脚本-教程主线-失败,错误信息:{message}') break self.helper.upload_log.upload_main_log(status=1) logger.info(f"[窗口-{self.helper.window_id}][模拟器-{self.helper.emulator_index}]执行脚本-教程主线-成功,返回:{message}",self.helper.window_id) #上报新增留存状态 if self.helper.account_info.retained == 0: result = task_api.up_log_profession(self.helper.account_info.account, self.helper.game_config.task_id, '教程主线', '新增成功') logger.info(f"[窗口-{self.helper.window_id}][模拟器-{self.helper.emulator_index}]上报账号-新增成功:{result}",self.helper.window_id) else: result = task_api.up_log_profession(self.helper.account_info.account, self.helper.game_config.task_id, '教程主线', '留存成功') logger.info(f"[窗口-{self.helper.window_id}][模拟器-{self.helper.emulator_index}]上报账号-留存成功:{result}",self.helper.window_id) except Exception as e: logger.exception(f"[窗口-{self.helper.window_id}][模拟器-{self.helper.emulator_index}]任务异常:{e}",self.helper.window_id) finally: time.sleep(1) logger.info(f"[窗口-{self.helper.window_id}][模拟器-{self.helper.emulator_index}]关闭模拟器", self.helper.window_id) self.helper.close_emulator_and_confirm() logger.info(f"[窗口-{self.helper.window_id}][模拟器-{self.helper.emulator_index}]模拟器已关闭", self.helper.window_id) GM.set_emulator_status(f'{self.helper.emulator_type}-{self.helper.emulator_index}', 0) GM.set_window_status(self.helper.window_id, 0) logger.info(f"[窗口-{self.helper.window_id}][模拟器-{self.helper.emulator_index}]任务结束", self.helper.window_id) time.sleep(3)