task.py 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. import threading
  2. import time
  3. from model.global_manager import GM
  4. from model.helper import MyHelper
  5. from net.task_api import task_api
  6. from tools.log import logger
  7. class Task:
  8. _lock = threading.Lock()
  9. def __init__(self, helper: MyHelper):
  10. self.helper = helper
  11. self.error_count = 0
  12. def run(self):
  13. try:
  14. logger.info(f"[窗口-{self.helper.window_id}][模拟器-{self.helper.emulator_index}]任务开始",self.helper.window_id)
  15. for _ in range(1):
  16. logger.info(f"[窗口-{self.helper.window_id}][模拟器-{self.helper.emulator_index}]模拟器还原",self.helper.window_id)
  17. # 模拟器还原、改机、切换地区、启动加锁,主要避免还原和启动时的高硬盘读写以及切换Ip地区时刷新节点的频率
  18. with self._lock:
  19. result, message = self.helper.restore_emulator()
  20. if not result:
  21. logger.exception(f"[窗口-{self.helper.window_id}][模拟器-{self.helper.emulator_index}]模拟器还原失败,错误信息:{message}")
  22. break
  23. logger.info(f"[窗口-{self.helper.window_id}][模拟器-{self.helper.emulator_index}]模拟器还原成功",self.helper.window_id)
  24. time.sleep(1)
  25. #改机
  26. logger.info(f"[窗口-{self.helper.window_id}][模拟器-{self.helper.emulator_index}]模拟器改机",self.helper.window_id)
  27. result, message = self.helper.modify_emulator()
  28. if not result:
  29. logger.exception(f"[窗口-{self.helper.window_id}][模拟器-{self.helper.emulator_index}]模拟器改机失败,错误信息:{message}")
  30. break
  31. logger.info(f"[窗口-{self.helper.window_id}][模拟器-{self.helper.emulator_index}]模拟器改机成功",self.helper.window_id)
  32. time.sleep(1)
  33. #切换地区
  34. if GM.device_info.use_wuyouip == '1':
  35. logger.info(f"[窗口-{self.helper.window_id}][模拟器-{self.helper.emulator_index}]模拟器切换地区",self.helper.window_id)
  36. result, message = self.helper.switch_emulator_area()
  37. if not result:
  38. logger.error(f"[窗口-{self.helper.window_id}][模拟器-{self.helper.emulator_index}]切换模拟器地区失败,错误信息:{message}")
  39. break
  40. logger.info(f"[窗口-{self.helper.window_id}][模拟器-{self.helper.emulator_index}]模拟器地区切换成功",self.helper.window_id)
  41. time.sleep(1)
  42. #启动
  43. logger.info(f"[窗口-{self.helper.window_id}][模拟器-{self.helper.emulator_index}]模拟器启动",self.helper.window_id)
  44. with self._lock:
  45. result, message = self.helper.start_emulator_and_set_position()
  46. if not result:
  47. logger.error(f"[窗口-{self.helper.window_id}][模拟器-{self.helper.emulator_index}]模拟器启动失败,错误信息:{message}")
  48. up_log_profession = task_api.up_log_profession(self.helper.account_info.account, self.helper.game_config.task_id, '启动模拟器', '失败')
  49. logger.info(f"[窗口-{self.helper.window_id}][模拟器-{self.helper.emulator_index}]上报关键日志-{up_log_profession}",self.helper.window_id)
  50. self.helper.upload_device_log(status=0)
  51. break
  52. logger.info(f"[窗口-{self.helper.window_id}][模拟器-{self.helper.emulator_index}]模拟器启动成功",self.helper.window_id)
  53. up_log_profession = task_api.up_log_profession(self.helper.account_info.account, self.helper.game_config.task_id,'启动模拟器', '成功')
  54. logger.info(f"[窗口-{self.helper.window_id}][模拟器-{self.helper.emulator_index}]上报关键日志-{up_log_profession}",self.helper.window_id)
  55. self.helper.upload_device_log(status=1)
  56. time.sleep(1)
  57. #上报设备信息
  58. logger.info(f"[窗口-{self.helper.window_id}][模拟器-{self.helper.emulator_index}]上报设备信息:{self.helper.upload_log.upload_log.to_dict()}",self.helper.window_id)
  59. # time.sleep(10)
  60. #
  61. # result, message = self.helper.confirm_emulator_area()
  62. # if not result:
  63. # logger.error(f"[窗口-{self.helper.window_id}][模拟器-{self.helper.emulator_index}]确认模拟器地区错误,错误信息:{message}")
  64. # break
  65. time.sleep(1)
  66. #大漠绑定
  67. logger.info(f"[窗口-{self.helper.window_id}][模拟器-{self.helper.emulator_index}]执行脚本-大漠绑定",self.helper.window_id)
  68. result, message = self.helper.bind_emulator()
  69. if not result or message != 1:
  70. logger.exception(f'[窗口-{self.helper.window_id}][模拟器-{self.helper.emulator_index}]执行脚本"大漠绑定"失败,返回:{message}')
  71. break
  72. logger.info(f'[窗口-{self.helper.window_id}][模拟器-{self.helper.emulator_index}]执行脚本-大漠绑定-成功,返回:{message}',self.helper.window_id)
  73. time.sleep(1)
  74. #启动游戏
  75. logger.info(f'[窗口-{self.helper.window_id}][模拟器-{self.helper.emulator_index}]执行脚本-启动游戏',self.helper.window_id)
  76. result, message = self.helper.start_game()
  77. if not result or message != 1:
  78. self.helper.upload_log.upload_start_game_log(status=0)
  79. logger.exception(f'[窗口-{self.helper.window_id}][模拟器-{self.helper.emulator_index}]执行脚本-启动游戏-失败,错误信息:{message}')
  80. break
  81. self.helper.upload_log.upload_start_game_log(status=1)
  82. logger.info(f'[窗口-{self.helper.window_id}][模拟器-{self.helper.emulator_index}]执行脚本-启动游戏-成功,返回:{message}',self.helper.window_id)
  83. time.sleep(1)
  84. #登录游戏
  85. logger.info(f'[窗口-{self.helper.window_id}][模拟器-{self.helper.emulator_index}]执行脚本-登录游戏',self.helper.window_id)
  86. result, message = self.helper.login_game()
  87. if not result or message != 1:
  88. logger.exception(f'[窗口-{self.helper.window_id}][模拟器-{self.helper.emulator_index}]执行脚本-登录游戏-失败,错误信息:{message}')
  89. self.helper.upload_log.upload_longin_log(status=0)
  90. break
  91. logger.info(f'[窗口-{self.helper.window_id}][模拟器-{self.helper.emulator_index}]执行脚本-登录游戏-成功,返回:{message}',self.helper.window_id)
  92. self.helper.upload_log.upload_longin_log(status=1)
  93. time.sleep(1)
  94. #执行主线任务
  95. logger.info(f'[窗口-{self.helper.window_id}][模拟器-{self.helper.emulator_index}]执行脚本-教程主线',self.helper.window_id)
  96. result, message = self.helper.main_task()
  97. if not result:
  98. self.helper.upload_log.upload_main_log(status=0)
  99. logger.exception(f'[窗口-{self.helper.window_id}][模拟器-{self.helper.emulator_index}]执行脚本-教程主线-失败,错误信息:{message}')
  100. break
  101. self.helper.upload_log.upload_main_log(status=1)
  102. logger.info(f"[窗口-{self.helper.window_id}][模拟器-{self.helper.emulator_index}]执行脚本-教程主线-成功,返回:{message}",self.helper.window_id)
  103. #上报新增留存状态
  104. if self.helper.account_info.retained == 0:
  105. result = task_api.up_log_profession(self.helper.account_info.account, self.helper.game_config.task_id,
  106. '教程主线', '新增成功')
  107. logger.info(f"[窗口-{self.helper.window_id}][模拟器-{self.helper.emulator_index}]上报账号-新增成功:{result}",self.helper.window_id)
  108. else:
  109. result = task_api.up_log_profession(self.helper.account_info.account, self.helper.game_config.task_id,
  110. '教程主线', '留存成功')
  111. logger.info(f"[窗口-{self.helper.window_id}][模拟器-{self.helper.emulator_index}]上报账号-留存成功:{result}",self.helper.window_id)
  112. except Exception as e:
  113. logger.exception(f"[窗口-{self.helper.window_id}][模拟器-{self.helper.emulator_index}]任务异常:{e}",self.helper.window_id)
  114. finally:
  115. time.sleep(1)
  116. logger.info(f"[窗口-{self.helper.window_id}][模拟器-{self.helper.emulator_index}]关闭模拟器",
  117. self.helper.window_id)
  118. self.helper.close_emulator_and_confirm()
  119. logger.info(f"[窗口-{self.helper.window_id}][模拟器-{self.helper.emulator_index}]模拟器已关闭",
  120. self.helper.window_id)
  121. GM.set_emulator_status(f'{self.helper.emulator_type}-{self.helper.emulator_index}', 0)
  122. GM.set_window_status(self.helper.window_id, 0)
  123. logger.info(f"[窗口-{self.helper.window_id}][模拟器-{self.helper.emulator_index}]任务结束",
  124. self.helper.window_id)
  125. time.sleep(3)